在仅支持IPv6网络的节点上部署双栈K8s集群
在仅支持IPv6网络的节点上部署双栈K8s集群
先给你理清楚核心思路:你要的是节点只有IPv6物理网络,但K8s集群本身是双栈(同时支持IPv4和IPv6服务),Kubespray官方确实没直接支持这种场景,得手动调整几个关键配置和组件,我把具体要改的地方拆成几个部分:
一、基础集群配置调整
首先得在Kubespray的集群变量里明确开启双栈,同时指定节点用IPv6注册:
编辑
inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml:- 设置
kube_enable_dual_stack: true,强制开启双栈模式 - 配置IPv4和IPv6的集群CIDR:
kube_cluster_ipv4_cidr: "10.233.64.0/18"(选一个你常用的私有IPv4段),kube_cluster_ipv6_cidr: "fd00:10:233::/48"(符合RFC 4193的私有IPv6段) - 让Kubelet和控制平面组件绑定到IPv6地址:
kubelet_bind_address: "::" kube_apiserver_bind_address: "::" kube_controller_manager_bind_address: "::" kube_scheduler_bind_address: "::" - 指定节点用IPv6地址注册到集群:
kube_node_ip: "{{ ansible_default_ipv6.address }}"
- 设置
编辑
inventory/mycluster/hosts.ini,把所有节点的地址写成IPv6格式(注意加方括号),比如:[kube-master] master1 ansible_host=[fd00::101] ansible_user=ubuntu [kube-node] node1 ansible_host=[fd00::201] ansible_user=ubuntu
二、容器运行时配置
不管用Docker还是containerd,都要开启IPv6支持,确保容器能分配到双栈地址:
- 如果用Docker:编辑
inventory/mycluster/group_vars/docker/docker.yml,设置docker_ipv6_enabled: true,docker_fix_iptables: true,让Docker支持IPv6网络。 - 如果用containerd:编辑
inventory/mycluster/group_vars/containerd/containerd.yml,在containerd_config_template里添加IPv6相关配置,确保runtime支持双栈网络。
三、CNI插件适配(以Calico为例)
Calico是支持双栈且能在纯IPv6节点运行的CNI,需要调整它的配置:
- 编辑
roles/network_plugin/calico/defaults/main.yml:- 设置
calico_use_dual_stack: true - 配置IPv4和IPv6的Pool CIDR,和集群CIDR对应:
calico_ipv4pool_cidr: "{{ kube_cluster_ipv4_cidr }}",calico_ipv6pool_cidr: "{{ kube_cluster_ipv6_cidr }}" - 关闭IPv4的IPIP隧道(节点没有物理IPv4,不需要):
calico_ipv4pool_ipip: "Never" - 指定节点用IPv6网卡自动检测:
calico_node_ip_autodetection_method: "interface=eth0"(替换成你的节点实际网卡名)
- 设置
四、跳过IPv4相关的系统检查和配置
Kubespray默认会做一些IPv4的系统优化,但你的节点没有IPv4,这些步骤需要跳过:
- 找到
roles/kubernetes/preinstall/tasks/sysctl.yml,注释掉或删除所有和IPv4相关的sysctl设置,比如net.ipv4.ip_forward、net.ipv4.conf.all.forwarding等。 - 检查其他脚本里的IPv4检查逻辑,比如
roles/kubernetes/node/tasks/main.yml里的节点IP检查,修改为只验证IPv6地址是否存在。
五、组件镜像与kube-proxy配置
- 确保你用的K8s组件镜像支持IPv6,官方
k8s.gcr.io的镜像都支持,国内环境可以选支持IPv6的镜像源。 - 编辑
k8s-cluster.yml,开启kube-proxy的双栈模式:kube_proxy_dual_stack: true,确保它能同时处理IPv4和IPv6的流量。
最后,部署完成后可以测试一下:创建一个双栈的Nginx Deployment,查看Service的ClusterIP,应该同时有IPv4和IPv6地址,并且能通过节点的IPv6地址访问这个服务。
备注:内容来源于stack exchange,提问作者Neeraj Jain
相关产品推荐
相关产品推荐

