更换service和pod网段

1 介绍及前提
在内网环境里,由于网络规划的原因通常会遇到需要更换Kubernetes内部的ip网段。此文档是针对于已经存在的Kubernetes来进行网段更换的操作。操作期间会短时间内中断向外提供的服务;需提前发布停机通告。
Kubernetes内部的ip网段也分为两类,一个是service的ip地址段,也称为ClusterIP(service的ip强烈不建议修改,虽然此文档提供了修改教程,但是手动修改的地方很多,操作不当会引起集群无法使用,而且发布此文档时并没有在所有的版本上进行过测试)。还有一类是pod的ip地址段,也称为cidr,由网络插件来分配和管理,用于pod和pod之间的通信。
测试环境参考:
| 操作系统/内核版本 | Calico版本 | K8S版本(kubeadm安装) | 容器版本 |
| centos7.9/3.10+ | 3.17.1 | v1.19.4 | docker 19 .03 |
注意:以下操作使用的用户均为root;不是root用户的自行识别添加sudo,并且所有的操作均在k8s-master节点。
2 更换pod网段
1. 获取calico的ip池并导出到yaml文件。
# kubectl get ippool
# kubectl get ippool -o yaml > k8s-ippool.yaml
2. cidr修改为想要修改的网段。
推荐修改为B类地址,也就是16位子网掩码(C类也可,但不推荐,会影响后期pod数量扩展)。
# vi k8s-ippool.yaml

3. 删除旧的ippool。
# kubectl delete ippool default-ipv4-ippool
4. 创建新的ippool。
kubectl apply -f k8s-ippool.yaml
5. 查看验证。
# kubectl get ippool -o yaml | grep cidr
6. 重建全部pod。
# kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(\S+)\s+(\S+).*/kubectl --namespace \1 delete pod \2/e'
#这步操作是将拥有"旧ip地址"的容器进行重建,然后会获得"新ip地址"
7. 第6步操作全部操作完成之后,查看一下是否全部pod-ip更换为新的地址。
3 更换service网段
1. 获取当前所有service的yaml。
# kubectl get svc --all-namespaces | grep -v -w kubernetes| awk '$4 !~ /None|CLUSTER/{print "kubectl get svc -n "$1" " $2 " -o yaml && echo ---"}' | bash | sed '/clusterIP: 10/d' > ~/all_svc.yaml
#上面命令有局限性,针对于10.开头的service-ip段,如果不是,需要自行再修改下。
2. 修改apiserver配置参数。
# vi /etc/kubernetes/manifests/kube-apiserver.yaml
推荐修改为B类地址,也就是16位子网掩码(C类也可,但不推荐,会影响后期pod数量扩展)。

3. 修改controller-manager配置参数。
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
推荐修改为B类地址,也就是16位子网掩码(C类也可,但不推荐,会影响后期pod数量扩展)。

4. 删除所有存在的service。
kubectl get svc --all-namespaces | awk '$4 !~ /None|CLUSTER/{print "kubectl delete svc -n "$1" " $2}' | bash
5. 将刚才获取的yaml,apply生成新的service。
kubectl apply -f ~/all_svc.yaml
注意:如果出现如下报错,重启所有的master和node节点,这是新的虚拟网桥没有建立起来的报错
Error from server (InternalError): error when creating "/root/all_svc.yaml": Internal error occurred: failed to allocate a serviceIP: the provided range does not match the current range
6. 查看创建的svc的地址段是否是新地
更换service和pod网段
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



