Как установить липкую сессию для нескольких сервисов в кубернетах?
У меня 2 услуги:
Сервис Restful/websocket API с Nginx (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.