Azure AKS中如何为Nginx Pod配置静态IP实现自动化访问?
关于AKS中Nginx Pod固定访问IP的解决方案
首先明确:Kubernetes(包括AKS)不支持直接给Pod设置固定静态IP。Pod的IP是集群网络插件动态分配的,Pod重启、重建甚至集群扩容都会导致IP变更,这是K8s的核心设计逻辑,强行绑定静态IP会破坏集群的弹性和自愈能力。
下面是两种符合K8s设计的解决方案,满足你固定IP访问的需求:
场景1:集群内部访问(比如其他Pod/组件调用)
创建ClusterIP类型的Service,Service会自动分配一个固定的集群内部IP(只要Service不被删除,IP就不会变更),并自动路由到匹配的Nginx Pod。
示例YAML配置:
apiVersion: v1 kind: Service metadata: name: nginx-internal-service spec: selector: app: nginx # 需与你的Nginx Pod的label完全匹配 ports: - protocol: TCP port: 80 targetPort: 80 # 对应Nginx Pod暴露的端口 type: ClusterIP
创建后,集群内部可通过nginx-internal-service(K8s内部域名)或Service的固定IP访问Nginx,无需关注Pod IP的变化。
场景2:外部互联网访问
使用LoadBalancer类型的Service绑定Azure静态公共IP,实现外部固定IP访问:
- 先在Azure门户或CLI创建静态公共IP,注意IP的资源组必须是AKS集群的节点资源组(格式通常为
MC_<你的资源组名>_<AKS集群名>_<区域>)。 - 创建LoadBalancer Service时,通过注解指定静态IP:
apiVersion: v1 kind: Service metadata: name: nginx-external-service annotations: service.beta.kubernetes.io/azure-load-balancer-static-ip: "13.xx.xx.xx" # 替换为你的静态公共IP spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
部署后,外部即可通过这个静态公共IP稳定访问Nginx Pod,即使Pod重建或集群更新,IP也不会改变。
进阶方案:多服务统一入口(Ingress)
如果需要暴露多个服务,推荐使用Ingress Controller:
- 部署AKS官方的NGINX Ingress Controller,给其对应的LoadBalancer Service绑定静态公共IP。
- 创建Ingress规则,将外部请求路由到Nginx Pod。
这种方式可以用一个静态IP管理多个服务的访问,更适合复杂场景。
内容的提问来源于stack exchange,提问作者Eddi-88
相关产品推荐
相关产品推荐

