Я пытаюсь добиться липкости в кластере 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: {}
Похоже, проблема здесь в том, что клиентский IP-адрес, который видит служба, является IP-адресом балансировщика нагрузки (предполагается, что вы используете входящий трафик со своей службой порта узла). Эта статья подробнее обсуждает эту проблему и предлагает обходной путь.
В качестве альтернативы вы можете использовать Группы конечных точек сети что, по сути, позволит балансировщику нагрузки переднего плана отправлять трафик непосредственно на серверные части контейнера, что должно улучшить сродство сеанса. Вы по-прежнему не можете включить определение привязки сеанса в свою входную конфигурацию для GKE, но вы можете отредактировать ресурс L7LB после его создания для включить привязку сеанса
Я бы также предложил создать запрос функции с помощью Google, чтобы добавить аннотации к входному ресурсу для настройки привязки сеанса LB, чтобы эта функция была встроена в GKE (обычно не рекомендуется изменять ресурсы GKE вне k8s после их создания)