kubernetes集群升级ipv4/ipv6双栈
前提条件
- 节点配置ipv4/ipv6地址
- k8s集群<=1.23
- 安装calico插件>=3.23
地址规划
网络 | ipv4 | ipv6 |
---|---|---|
pod-cidr | 10.244.0.0/16 | 2000::/112 |
service-cidr | 10.96.0.0/12 | 3000::/112 |
注意:ipv6掩码位需要>=108,否则kube-apiserver会报错
网卡同时配置ipv4/ipv6
1 | vim /etc/sysconfig/network-scripts/ifcfg-XXX |
1 | TYPE=Ethernet |
1 | systemctl restart network |
测试ipv4
1 | ping 10.20.13.90 |
测试ipv6
1 | ping -6 2031:0:130c::90 |
节点开启ipv6(所有节点)
1 | vim /etc/sysctl.d/k8s.conf |
1 | net.bridge.bridge-nf-call-ip6tables = 1 |
1 | sysctl --system |
k8s开启双栈(主节点)
修改kube-apiserver
1 | vim /etc/kubernetes/manifests/kube-apiserver.yaml |
1 | --service-cluster-ip-range=10.96.0.0/12,3000::/112 |
修改kube-controller-manager
1 | vim /etc/kubernetes/manifests/kube-controller-manager.yaml |
修改kube-proxy
1 | kubectl edit cm -n kube-system kube-proxy |
重启kube-proxy容器
1 | kubectl get pod -n kube-system | grep kube-proxy | awk '{print $1}' | xargs kubectl delete pod -n kube-system |
calico 配置双栈
1 | kubectl edit cm -n kube-system calico-config |
1 | "ipam": { |
1 | kubectl edit ds -n kube-system calico-node |
1 | # 设置自动获取ipv6地址 |
等待calico重启
修改kubeadm-config
上方修改的apiserver、controller-manager是静态文件,如果集群升级kubeadm-config会重置静态文件,导致ipv6的配置消失,所以将这个配置文件同时修改
1 | kubectl edit cm -n kube-system kubeadm-config |
验证
查看ipv6地址池
1 | kubectl get ippool |
pod获取ipv6地址
重启pod,查看获取的ipv6地址
1 | kubectl delete pod -n xxxx xxxxxx-xxx-xxx --force |
services配置双栈
1 | kubectl edit svc -n xxxx xxxxx-svc |
SingleStack
:单栈 Service。控制面使用第一个配置的服务集群 IP 范围为 Service 分配集群 IPPreferDualStack
:为 Service 分配 IPv4 和 IPv6 集群 IP 地址。RequireDualStack
:从 IPv4 和 IPv6 的地址范围分配 Service 的ClusterIPs
。从
ipFamilies
数组中第一个ip地址的ClusterIPs
作为ClusterIP
注意:ipFamilies 字段修改是有条件的:你可以添加或删除第二个 IP 地址族, 但你不能更改现有 Service 的主要 IP 地址。
1 | kubectl describe svc -n xxxx xxxxxx-svc |
service示例
新增service单栈ipv6
1 | apiVersion: v1 |
service双栈
1 | apiVersion: v1 |
参考链接:IPv4/IPv6 双协议栈 | Kubernetes、自定义 Calico 配置 |Calico 文档 (tigera.io)