云服务器、公网搭建k8s集群问题解决思路
都是个人实验测试,仅供参考。基于两台云服务器,内网无法互相ping通,主要是问题展示、解决,省略了其他环境准备、安装步骤
集群初始化
准备两个命令窗口,初始化指令参考
kubeadm init
--kubernetes-version=v1.17.4 #版本
--pod-network-cidr=10.244.0.0/16 # pod 子网
--service-cidr=10.96.0.0/12 #Service子网
--image-repository=registry.aliyuncs.com/google_containers
--apiserver-advertise-address=xxxxxx #公网ip
最终在这里会卡住 当检测到有 etcd.yaml 生成时,立即在另一个窗口编辑修改
vim /etc/kubernetes/manifests/etcd.yaml
如下
# 也就是将多余的公网ip删除,将公网ip改为127
- --listen-client-urls=https://127.0.0.1:2379
- --listen-metrics-urls=http://127.0.0.1:2381
- --listen-peer-urls=https://127.0.0.1:2380
k8s集群初始化成功,执行 kubeadm join ...即可加入节点 若失败可以执行 kubeadm reset重置,再重复以上步骤
网络不通问题
问题:访问 pod ip 超时,执行logs、exec命令超时
解决:安装flannel后,会自动生成 public-ip 注解,但是默认为服务器内网ip,只要手动将其修改为公网ip即可解决,但这样每次重启服务器会失效,所以通过下面的命令增加 public-ip-overwrite 注解,每次重启时 flannel 会自动对 public-ip 实现自动修改
查看node1的 public-ip 注解
kubectl edit node node1-name
对所有node添加public-ip-overwrite 注解
#flannel会自动根据这个注解实现对public-ip的修改 kubectl annotate node node1-name flannel.alpha.coreos.com/public-ip-overwrite=node1-公网ip --overwrite kubectl annotate node node2-name flannel.alpha.coreos.com/public-ip-overwrite=node2-公网ip --overwrite #重启服务器,使生效 reboot
iptables.sh 脚本内容,建议对每台服务器都执行:
#!/bin/bash iptables -t nat -A OUTPUT -d node1-内网ip -j DNAT --to-destination node1-公网ip iptables -t nat -A OUTPUT -d node2-内网ip -j DNAT --to-destination node2-公网ip
iptables配置后,服务器重启就会失效,可以将其加入开机启动。
vim /etc/rc.d/rc.local` # 以root用户执行脚本 su - root -c cd /root/boot-shells/ && sh iptables.sh
授权,重启
#授予 rc.local 执行权限 chmod +x /etc/rc.d/rc.local #重启服务器,使生效 reboot
