[英]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但入口的外部地址仍然是空的!!
我做錯了什么?
# 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.