Назад | Перейти на главную страницу

Достижение липкости в кластере Kubernetes с помощью ingress-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: {}

Похоже, проблема здесь в том, что клиентский IP-адрес, который видит служба, является IP-адресом балансировщика нагрузки (предполагается, что вы используете входящий трафик со своей службой порта узла). Эта статья подробнее обсуждает эту проблему и предлагает обходной путь.

В качестве альтернативы вы можете использовать Группы конечных точек сети что, по сути, позволит балансировщику нагрузки переднего плана отправлять трафик непосредственно на серверные части контейнера, что должно улучшить сродство сеанса. Вы по-прежнему не можете включить определение привязки сеанса в свою входную конфигурацию для GKE, но вы можете отредактировать ресурс L7LB после его создания для включить привязку сеанса

Я бы также предложил создать запрос функции с помощью Google, чтобы добавить аннотации к входному ресурсу для настройки привязки сеанса LB, чтобы эта функция была встроена в GKE (обычно не рекомендуется изменять ресурсы GKE вне k8s после их создания)