如何在AKS上通过同一Ingress控制器同时暴露IPv4和IPv6流量?
在AKS上用单ingress-nginx控制器实现DualStack支持
刚好在AKS上折腾过ingress-nginx双栈的配置,给你分享下不用部署两个控制器的解决方案,核心是利用AKS负载均衡器的双栈特性和ingress-nginx Helm Chart的对应配置项:
1. 前提:确保AKS集群已启用DualStack网络
首先你的AKS集群必须支持双栈,不管是新建还是现有集群都可以配置:
- 新建集群:创建时添加双栈启用参数
az aks create --name myAKSCluster --resource-group myResourceGroup \ --network-plugin azure --network-policy azure \ --enable-dual-stack --node-count 3 - 现有集群:通过升级启用双栈(注意需要集群满足网络配置要求,比如虚拟网络已有IPv6地址空间)
az aks update --name myAKSCluster --resource-group myResourceGroup --enable-dual-stack
2. 配置ingress-nginx Helm Chart的双栈参数
你提到的controller.service.loadBalancerIP确实只能填单个IP,但Chart里还有一个复数形式的loadBalancerIPs参数,支持传入IPv4和IPv6的IP数组,再配合Azure的双栈注解就能实现需求:
示例values.yaml配置
controller: service: type: LoadBalancer # 不要用单个loadBalancerIP,改用数组形式的loadBalancerIPs loadBalancerIPs: - "10.0.0.10" # 你提前预留的IPv4静态公共IP - "2001:db8::1" # 你提前预留的IPv6静态公共IP # 关键注解:告诉Azure负载均衡器启用双栈模式 annotations: service.beta.kubernetes.io/azure-load-balancer-dual-stack: "true"
如果不需要固定IP,也可以省略loadBalancerIPs,只保留双栈注解,Azure会自动分配一对IPv4+IPv6的公共IP给负载均衡器。
3. 安装/升级ingress-nginx部署
用你的自定义values文件安装或升级Helm Chart:
- 首次安装:
helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx --create-namespace \ -f your-dualstack-values.yaml - 升级现有部署:
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ -f your-dualstack-values.yaml
4. 验证双栈配置
执行以下命令查看Service状态:
kubectl get service ingress-nginx-controller -n ingress-nginx
你会看到EXTERNAL-IP列同时显示IPv4和IPv6地址(用逗号分隔),此时分别用IPv4和IPv6地址访问你的Ingress域名/路径,都应该能正常路由到后端服务。
内容的提问来源于stack exchange,提问作者rjdkolb
相关产品推荐
相关产品推荐

