簡體   English   中英

Configuring Static IP address with Ingress Nginx Sticky Session on Azure Kubernetes

[英]Configuring Static IP address with Ingress Nginx Sticky Session on Azure Kubernetes

我正在嘗試為我當前的 Kubernetes 架構配置額外的一層 Sticky Session。 我不想通過主 LoadBalancer 服務路由每個請求,而是希望通過 nginx 粘性 session 的上層路由請求。 我正在關注https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/上的指南

我正在使用 Azure Cloud 進行集群部署。 以前,使用具有 LoadBalancer 類型的服務會自動生成一個外部 IP 地址供用戶連接到我的集群。 現在我需要為我的用戶配置 static IP 地址以連接到 nginx 入口。 我該怎么做? 我按照這里的指南 - https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/static-ip但入口的外部地址仍然是空的!!

我做錯了什么?

kubectl 獲取

# 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

好的,我讓它工作了。 我認為區別在於您使用的雲提供商,對於 Azure Cloud,您應該遵循他們的文檔以及他們在 Z30136395F018797921498317C11831EAZ 集群中實現入口 controller 的方式。

此處鏈接以部署入口 controller。 他們在 Kubernetes 集群中創建公共 IP 地址並將其與入口 controller 鏈接起來的方式有效。 到目前為止,我可以確認撰寫本文的時間。

Once I am done deploying the steps in the link above, I can apply the ingress.yaml file as usual ie kubectl apply -f nginx-sticky-server.yaml to set up the nginx sticky session. 如果您的 ingress.yaml 文件中說明的服務名稱和服務端口是正確的,則 nginx 入口 controller 應該將您的用戶請求重定向到正確的服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM