Конфигурирование IP-адреса Stati c с Ingress Nginx Sticky Session на Azure Kubernetes - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь настроить дополнительный слой Sticky Session для моей текущей архитектуры Kubernetes. Вместо того, чтобы направлять каждый запрос через основной сервис LoadBalancer, я хочу направить запросы через верхний уровень nginx липкой сессии. Я следую руководству по https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/

Я использую Azure Cloud для развертывания моего кластера. Ранее использование службы с типом LoadBalancer автоматически создавало внешний IP-адрес для подключения пользователей к моему кластеру. Теперь мне нужно настроить IP-адрес stati c, к которому будут подключаться мои пользователи, с входом nginx. Как я могу это сделать? Я следовал инструкции здесь - https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/static-ip, но внешний адрес Ingress все еще пуст!

Что я сделал неправильно?

kubectl get ing

# nginx-sticky-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-ingress-lb
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  ports:
  - port: 80
    name: http
    targetPort: 80
  - port: 443
    name: https
    targetPort: 443
  selector:
    # Selects nginx-ingress-controller pods
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

# nginx-sticky-controller.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-ingress-controller
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/part-of: ingress-nginx
  template:
    metadata:
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.31.0
        name: nginx-ingress-controller
        ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 443
          hostPort: 443
        resources:
          limits:
            cpu: 0.5
            memory: "0.5Gi"
          requests:
            cpu: 0.5
            memory: "0.5Gi"
        env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
        args:
        - /nginx-ingress-controller
        - --publish-service=$(POD_NAMESPACE)/nginx-ingress-lb
# nginx-sticky-server.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "nginx-sticky-server"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/affinity-mode: persistent
    nginx.ingress.kubernetes.io/session-cookie-hash: sha1
spec:
  rules:
  - http:
      paths:
      - backend:
          # This assumes http-svc exists and routes to healthy endpoints.
          serviceName: my-own-service-master
          servicePort: http

1 Ответ

0 голосов
/ 27 апреля 2020

Хорошо, я все заработал. Я думаю, что разница заключается в том, какой облачный провайдер вы используете, и для Azure Cloud вы должны следовать их документации и способам внедрения входного контроллера в кластере Kubernetes.

Link over здесь для развертывания входного контроллера. Их способ создания IPL-адреса publi c в кластере Kubernetes и связывания его с входным контроллером работает. Я могу подтвердить на момент написания статьи.

Как только я закончу развертывание шагов по ссылке выше, я могу применить входящий файл .yaml как обычно, то есть kubectl apply -f nginx-sticky-server.yaml, чтобы установить липкий сеанс nginx. Если имя службы и порт службы, указанные в вашем входном файле .yaml, верны, входной контроллер nginx должен перенаправить ваши пользовательские запросы на правильный сервис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...