Исключительная клиентская близость - PullRequest
0 голосов
/ 05 декабря 2018

Мне известно, что клиентская привязанность возможна для службы типа LoadBalancer в Кубернетесе.Дело в том, что эта близость не запрещает двум разным клиентам получать доступ к одному и тому же модулю.

Можно ли ассоциировать стручок исключительно всегда с одним и тем же клиентом?

Заранее спасибо и хорошего дня!

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Не совсем так: POD.

Вы можете использовать сходство сеансов на основе IP-адреса клиента, что, конечно, только в том случае, если IP-адрес клиента является статическим и только один клиент на IP-адрес.

apiVersion: v1
kind: Service
metadata:
  name: wlp-service
  labels:
    app: wlp-service
spec:
  type: LoadBalancer 
  sessionAffinity: ClientIP
  ports:
  - port: 443
    targetPort: 7443
    name: https
  - port: 80
    targetPort: 7080
    name: http
  selector:
    app: POD_NAME

Второй вариант - это сессионная близость, основанная на Cookies.Это будет работать, если есть несколько клиентов с одного и того же IP-адреса, поскольку файлы cookie хранятся локально на клиентском компьютере.

Вам потребуется использовать объект Ingress и создавать файлы cookie.Ваше развертывание Ingress должно иметь:

Annotations:
  affinity: cookie
  session-cookie-hash:      sha1/md5/index #choose one
  session-cookie-name:      INGRESSCOOKIE #name used in cookie value

Вы можете узнать больше об этих двух способах на Перенаправить своих пользователей в один и тот же модуль, используя сродство сеанса в Kubernetes по среде.com

Если я не ошибаюсь, Session Affinity будет работать, только если модули ядра IPVS установлены на узле до запуска kube-proxy.

Запуск kube-proxy в режиме IPVS

В настоящее время локальные сценарии, сценарии GCE и kubeadm поддерживают переключение режима прокси IPVS посредством экспорта переменных среды (KUBE_PROXY_MODE=ipvs) или указания флага (--proxy-mode=ipvs).Перед запуском прокси-сервера IPVS убедитесь, что необходимые модули ядра IPVS уже установлены.

ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4

Наконец, для Kubernetes v1.10 для функции gateway SupportIPVSProxyMode по умолчанию установлено значение true.Для Kubernetes v1.11 шлюз функций полностью удален.Однако вам необходимо явно включить --feature-gates=SupportIPVSProxyMode=true для Kubernetes до v1.10.

Пожалуйста, проверьте этот вопрос StackOverflow Возможно ли перенаправить трафик на определенный Pod? , такжеВы можете узнать больше об IPVS на Балансировка нагрузки в кластере на основе IPVS Deep Dive

0 голосов
/ 05 декабря 2018

Чтобы разрешить доступ к конкретному Pod / Deployment только определенному внешнему клиенту (-ам), вы можете использовать белые списки / исходные диапазоны.Ограничения могут быть применены к LoadBalancers как loadBalancerSourceRanges.Вы добавляете раздел к Сервису следующим образом:

  loadBalancerSourceRanges:
  - 130.211.204.1/32
  - 130.211.204.2/32  

Но не все облачные провайдеры в настоящее время поддерживают его .

В качестве альтернативы вы можете выставить Стручок со Входом и применить белый список к Входу .Для внесения в белый список с входом nginx вы можете добавить примечание к входу, например nginx.ingress.kubernetes.io/whitelist-source-range: 49.36.X.X/32

0 голосов
/ 05 декабря 2018

Нет, это будет означать, что вы запускаете одну копию сервиса для каждого клиента, что является очень нестандартным способом, поэтому вам придется создавать его самостоятельно.

...