Достижение липкости на кластере kubernetes с помощью ingess-gce
Я пытаюсь добиться липкости на кластере kubernetes, но каждый раз, когда я получаю доступ к балансировщику нагрузки, меня перенаправляют на разные модули. Я установил привязку сеанса к ClientIP, а также попробовал сгенерированный файл cookie.
У меня установлена следующая внутренняя служба:
apiVersion: v1
kind: Service
metadata:
annotations:
beta.cloud.google.com/backend-config: '{"ports": {"80":"test-backendconfig"}}'
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"beta.cloud.google.com/backend-config":"{\"ports\": {\"80\":\"test-backendconfig\"}}"},"labels":{"app":"test","tier":"frontend"},"name":"test","namespace":"default"},"spec":{"ports":[{"name":"backend-port","port":80,"targetPort":5000}],"selector":{"app":"test","tier":"frontend"},"sessionAffinity":"ClientIP","type":"NodePort"}}
creationTimestamp: 2018-12-31T18:01:26Z
labels:
app: test
tier: frontend
name: test
namespace: default
resourceVersion: "..."
selfLink: /api/v1/namespaces/default/services/test
uid: ...
spec:
clusterIP: 10.**.***.***
externalTrafficPolicy: Cluster
ports:
- name: backend-port
nodePort: 32385
port: 80
protocol: TCP
targetPort: 5000
selector:
app: test
tier: frontend
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
type: NodePort
status:
loadBalancer: {}
1 ответ
Похоже, проблема в том, что IP-адрес клиента, который видит служба, является IP-адресом балансировщика нагрузки (предполагается, что вы используете вход со своей службой Node Port). Эта статья обсуждает эту проблему немного больше и предоставляет обходной путь.
В качестве альтернативы вы можете использовать группы сетевых конечных точек, которые, по существу, позволят внешнему балансировщику нагрузки отправлять трафик непосредственно в бэкэнды контейнера, что должно улучшить соответствие сеанса. Вы все еще не можете включить определение соответствия сеанса в вашу входную конфигурацию для GKE, но вы можете отредактировать ресурс L7LB после его создания, чтобы включить соответствие сеанса
Я также предложил бы создать запрос функции с помощью Google, чтобы добавить аннотации к входному ресурсу для настройки соответствия сеанса LB, чтобы эта функция была встроена в GKE (обычно не рекомендуется изменять ресурсы GKE за пределами k8 после их создания).