#kubernetes #minikube
#kubernetes #minikube
Вопрос:
Я предоставил сервис как NodePort в Kubernetes и применил привязку к сеансу к этому сервису. Когда клиент подключается к сервису в первый раз, привязка сеанса вступает в действие и поддерживает сеанс для клиента, но по истечении тайм-аута, когда клиент снова подключается к сервису, привязка сеанса не вступает в действие, что приводит к ненадлежащему поведению. Я использую minikube для настройки кластера в экземпляре AWS ec2. версия k8s является основной: «1», второстепенной: «18». На самом деле я предоставил веб-svc-службу на узловом порту, и клиент подключается к этой службе через общедоступный IP AWS, например, AWS-instance-ip: NodePort. Клиент сначала подключается к UDP-порту, отправляя один пакет для авторизации, после авторизации модуль, скажем, POD-A, вставляет некоторые правила iptables, чтобы разрешить конкретному клиенту, после авторизации клиент немедленно устанавливает TCP-соединение со службой, но проблема в том, что этот запрос отправляется другому модулю, скажем, POD-B, поскольку у меня replica = 3, а в POD-B правила iptables отсутствуют для конкретного клиента.
Когда я полностью удаляю свое развертывание и службу, как kubectl delete -f my-deployment.yaml
, а затем создаю его снова с помощью kubectl apply -f my-deployment.yaml
, я получаю ожидаемое поведение, как UDP, так и TCP-соединение отправляются в один и тот же модуль, но после упомянутого тайм-аута sessionAffinity, когда клиент снова подключается, UDP и TCP-соединение не отправляются в один и тот же модуль.
Режим Kube-proxy — это IPVS
Фрагмент сервиса:
apiVersion: v1
kind: Service
metadata:
name: web-svc
spec:
type: NodePort
selector:
app: web-app
externalTrafficPolicy: Local
sessionAffinity: "ClientIP"
sessionAffinityConfig:
clientIP:
timeoutSeconds: 240
ports:
- port: 30573
nodePort: 30573
name: tcp-30573
protocol: TCP
- port: 30375
nodePort: 30375
name: udp-30375
protocol: UDP
kube-журналы прокси:
sudo kubectl logs kube-proxy-njwxl -n kube-system I0820 10:22:03.591026 1 node.go:136] Successfully retrieved node IP: 172.31.27.53 I0820 10:22:03.591320 1 server_others.go:259] Using ipvs Proxier. W0820 10:22:03.591341 1 server_others.go:436] detect-local-mode set to ClusterCIDR, but no cluster CIDR defined I0820 10:22:03.591346 1 server_others.go:447] detect-local-mode: ClusterCIDR , defaulting to no-op detect-local W0820 10:22:03.591667 1 proxier.go:429] IPVS scheduler not specified, use rr by default I0820 10:22:03.591989 1 server.go:583] Version: v1.18.3 I0820 10:22:03.592440 1 conntrack.go:52] Setting nf_conntrack_max to 131072 I0820 10:22:03.596529 1 config.go:133] Starting endpoints config controller I0820 10:22:03.596556 1 shared_informer.go:223] Waiting for caches to sync for endpoints config I0820 10:22:03.600578 1 config.go:315] Starting service config controller I0820 10:22:03.600600 1 shared_informer.go:223] Waiting for caches to sync for service config I0820 10:22:03.697978 1 shared_informer.go:230] Caches are synced for endpoints config I0820 10:22:03.700844 1 shared_informer.go:230] Caches are synced for service config
Комментарии:
1. Пожалуйста, предоставьте дополнительную информацию, входные данные: версия k8s, как вы настраивали свой кластер, и укажите некоторые команды, которые вы использовали, и результаты для этой конкретной проблемы:
session affinity doesn't come into action which leads to inappropriate behaviour
2. Обновлено описание @Hanx.
3. Если я правильно понял, вы используете minikube на экземпляре AWS ec2?
4. @Hanx да, я запускаю minikube в экземпляре AWS ec2.
5. Итак, вы пытаетесь настроить minikube ipvs sessionAffinity. Какая у вас версия minikube и проверяли ли вы
kube-proxy
журналы?