Kubespray (CNI として Calico) を使用してベアメタル K8 クラスターをセットアップし、デュアル スタックを有効にしています。デプロイされたすべてのポッドが IPv4 と IPv6 の両方のアドレスを取得することがわかりますが、nginx helm chart を使用して nginx-ingress コントローラーをインストールしようとすると、サービスでは IPv4 のみが有効になって割り当てられています。サービスで kubectl get を実行すると、次の仕様が表示されます。
kubectl get 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 チャートの 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 をインストール ingress-nginx ingress-nginx/ingress-nginx -f values.yaml -n ingress-nginx
これはイングレスだけの問題ではなく、基本的に Helm チャートを使用してデプロイしようとしているすべてのアプリケーションには、サービスの仕様としてシングル スタックと IPv4 があるため、これらのチャートの値ファイルに必要な手動構成が不足していると考えられます。
また、基本的なサービスを作成し、ipFamilyPolicy: PreferDualStack および ipFamilies: IPv6、IPv4 を指定したサービス ファイルを使用して直接デプロイしようとしたところ、サービスは正常にデプロイされ、v6 と v4 の両方のアドレスが割り当てられました。したがって、クラスターの観点からは、構成は正常であり、デプロイされているチャートにいくつかのパラメーターが不足していることがわかります。