我有一個使用 Kubespray(Calico 作為 CNI)的裸機 K8 叢集設置,並啟用了雙堆疊。我可以看到部署的所有 pod 都獲得 IPv4 和 IPv6 位址,但是當我嘗試使用 nginx helm 圖表安裝 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
我嘗試手動將以下規格新增至入口控制器 helm 圖表的 value.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 安裝 ingress-nginx ingress-nginx/ingress-nginx -f value.yaml -n ingress-nginx
這不僅是入口問題,基本上我嘗試使用 helm 圖表部署的任何應用程式都具有單堆疊和 IPv4 作為服務規範,這讓我認為我缺少這些圖表的值檔案中所需的一些手動配置。
此外,當我嘗試建立基本服務並直接使用具有 ipFamilyPolicy: PreferDualStack 和 ipFamilies: IPv6, IPv4 的服務檔案來部署它時,該服務已成功部署並分配了 v6 和 v4 位址。所以我知道從叢集的角度來看,我的配置很好,並且在部署圖表時缺少一些參數。