我有一个使用 Kubespray(Calico 作为 CNI)的裸机 K8 集群设置,并启用了双栈。我可以看到部署的所有 pod 都获得了 IPv4 和 IPv6 地址,但是当我尝试使用 nginx helm chart 安装 nginx-ingress 控制器时,服务仅启用并分配了 IPv4。当我在服务上执行 kubectl get 时,我可以看到以下规范:
kubectl 获取 svc ingress-nginx-controller -n ingress-nginx -o yaml
spec:
clusterIP: 10.233.34.249
clusterIPs:
- 10.233.34.249
externalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
我已尝试手动将以下规范添加到 ingress-controller helm chart 的 values.yaml 文件中:
service:
enabled: true
annotations: {}
labels: {}
# clusterIP: ""
## List of IP addresses at which the controller services are available
## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
##
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv6
- IPv4
并使用以下方法应用它但无济于事:helm install ingress-nginx ingress-nginx/ingress-nginx -f values.yaml -n ingress-nginx
这不仅是入口的问题,基本上我尝试使用 helm charts 部署的任何应用程序都具有单栈和 IPv4 作为服务规范,这让我认为我缺少这些图表的值文件中所需的一些手动配置。
此外,当我尝试创建基本服务并使用服务文件直接部署它时,ipFamilyPolicy: PreferDualStack 和 ipFamilies: IPv6, IPv4 成功部署了该服务,并分配了 v6 和 v4 地址。因此,从集群的角度来看,我知道我的配置很好,只是部署的图表缺少一些参数。