Как установить липкую сессию для нескольких сервисов в кубернетах?

У меня 2 услуги:

  1. Сервис Restful/websocket API с Nginx (2 реплики)

  2. Служба демона (1 реплика)

В какой-то момент служба демона отправит событие веб-сокета во внешний интерфейс. Тем не менее, событие, похоже, не было успешно отправлено на интерфейс из службы демона.

Я также попытался передать события с сервера API на интерфейс, и событие было успешно отправлено на интерфейс. (возможно, потому, что интерфейс подключен к серверу API WebSocket).

Что я сделал для липкой сессии:

---
apiVersion: "v1"
kind: "Service"
metadata:
  name: "daemon"
  namespace: app
spec:
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80
  selector:
    app: "daemon"
  type: "NodePort"
  sessionAffinity: ClientIP  
---
---
apiVersion: "v1"
kind: "Service"
metadata:
  name: "api"
  namespace: app
spec:
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80
  selector:
    app: "api"
  type: "NodePort"
  sessionAffinity: ClientIP
---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
  annotations:
    getambassador.io/resource-downloaded: '2020-03-30T16:10:34.466Z'
  name: api
  namespace: app
spec:
  prefix: /api
  service: api:80
load_balancer:
  policy: ring_hash
  cookie:
    name: sticky-cookie
    ttl: 60s
---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
  annotations:
    getambassador.io/resource-downloaded: '2020-03-30T16:10:34.466Z'
  name: api-ws
  namespace: app
spec:
  prefix: /private
  service: api:80
  use_websocket: true
load_balancer:
  policy: ring_hash
  cookie:
    name: sticky-cookie
    ttl: 60s
---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
  annotations:
    getambassador.io/resource-downloaded: '2020-03-30T16:10:34.466Z'
  name: api-daemon
  namespace: app
spec:
  prefix: /daemon
  service: daemon:80
  use_websocket: true
load_balancer:
  policy: ring_hash
  cookie:
    name: sticky-cookie
    ttl: 60s

1 ответ

Из документации kubernetes.io DaemonSet:

Служба: создайте службу с тем же селектором Pod и используйте службу для доступа к демону на случайном узле. (Невозможно достичь определенного узла.)

Поэтому я думаю, что sessionAffinity не может работать с DaemonSet.

Другие вопросы по тегам