k8s开启ipv6和ipv4双栈

安装k8s集群请参考上一篇文章

提示:k8s集群开启ipv6,需要集群节点能够获取到ipv6地址,版本大于1.20

文章摘抄于https://zhuanlan.zhihu.com/p/574773736

1、修改kube-apiserver配置

vi /etc/kubernetes/manifests/kube-apiserver.yaml

修改以下参数,增加集群service ipv6地址范围

- --service-cluster-ip-range=10.233.0.0/18,fc00::/108

2、修改kube-controller-manager参数

 vi /etc/kubernetes/manifests/kube-controller-manager.yaml

修改以下参数,增加集群ipv6地址范围和pod的ipv6地址范围

 # cluster-cidr添加pod IPv6地址段
 # service-cluster-ip-range添加service IPv6地址段
 # node-cidr-mask-size-ipv4是为每个节点分配的pod IPv4地址段掩码长度,默认为24
 # node-cidr-mask-size-ipv6是为每个节点分配的pod IPv6地址段前缀长度,默认为64
- --cluster-cidr=10.233.64.0/18,fd00::/48 
- --service-cluster-ip-range=10.233.0.0/18,fc00::/108
- --node-cidr-mask-size-ipv4=24
- --node-cidr-mask-size-ipv6=120 #

3、修改kube-proxy配置

提示:前两步骤修改的不对,kubelet会挂掉,执行不了这步

 kubectl edit cm -n kube-system kube-proxy

修改参数

# clusterCIDR 增加pod IPv6地址段,与步骤2的cluster-cidr相同
 clusterCIDR: 172.168.0.0/16,fd00::/48 

重启kube-proxy

 kubectl get pod -n kube-system | grep kube-proxy | awk '{print $1}' | xargs kubectl delete pod -n kube-system

4、 修改calico配置

修改calico配置,让IPAM为pod同时分配ipv4/ipv6双栈地址

 kubectl edit cm -n kube-system calico-config

修改ipam参数

 "ipam": {
     "type": "calico-ipam",
     "assign_ipv4": "true",
     "assign_ipv6": "true"
 }

修改calico-node环境变量

kubectl edit ds -n kube-system calico-node
        # 在 - name: IP 配置附近增加一个IPv6地址的配置
        - name: IP6
          value: "autodetect"
        # felix启用IPv6支持,原来可能已经有这个参数,修改value即可
        - name: FELIX_IPV6SUPPORT
          value: "true"
        # 设置pod IPv6 pool,与步骤2、3中的clusterCIDR相同
        - name: CALICO_IPV6POOL_CIDR
          value: "fd00::/48"
		# 设置IPv6 vxLAN的模式为CrossSubnet(默认是Never)
	 	# 如果节点跨了子网,pod通信用vxlan封装,注意该功能3.23版本后才支持
		- name: CALICO_IPV6POOL_VXLAN
		  value: "CrossSubnet"
		# 增加环境变量,开启IPv6 pool nat outgoing功能,默认是false
		- name: CALICO_IPV6POOL_NAT_OUTGOING
		  value: "true"

验证

calicoctl node status

得到如下结果

Calico process is running.

IPv4 BGP status
+---------------+-------------------+-------+----------+-------------+
| PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+---------------+-------------------+-------+----------+-------------+
| 192.168.0.201 | node-to-node mesh | up    | 13:28:54 | Established |
| 192.168.0.202 | node-to-node mesh | up    | 13:28:11 | Established |
| 192.168.0.203 | node-to-node mesh | up    | 13:28:34 | Established |
| 192.168.0.204 | node-to-node mesh | up    | 13:27:52 | Established |
+---------------+-------------------+-------+----------+-------------+
calicoctl get ippool

得到如下结果

NAME                  CIDR                  SELECTOR
default-ipv4-ippool   10.233.64.0/18        all()
default-ipv6-ippool   fd7c:e038:f437::/48   all()

修改configmap

 kubectl edit cm -n kube-system kubeadm-config
   # 与2、3中的clusterCIDR相同
   podSubnet: 10.233.64.0/18,fd00::/48
   # 与1、2中的service-cluster-ip-range相同
   serviceSubnet: 10.233.0.0/18,fc00::/108

新创建的pod或者已有的pod重新创建会分配ipv6地址,使用以下命令验证

kubectl get pod nginx-75695b4ddc-stnzp -o jsonpath='{.status.podIPs}'
#看到以下信息表示已经获取到ipv4和ipv6地址
[{"ip":"10.233.96.2"},{"ip":"fd7c:e038:f437:be5:3f6f:1943:1663:dfc1"}]

service分配ipv6地址的配置

# 创建完service 修改这个配置即可,会自动分配ipv6地址
ipFamilyPolicy: PreferDualStack
#用下面的命令验证,看到ipv6地址 便是配置成功
kubectl get svc nginx-svc -o jsonpath='{.spec.clusterIPs}'
["10.233.60.35","fc00::a79a"]

至此,k8s已经成功开启双栈协议了。其实我开ipv6的主要目的是想在互联网上访问到我的k8s集群。 后面针对如何通过互联网访问家里的设备写个专栏。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值