查看集群节点时候internal ip是内网的ip
[root@master ~]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node4 Ready <none> 20m v1.27.1 10.0.40.7 <none> CentOS Stream 8 4.18.0-358.el8.x86_64 containerd://1.6.21
node5 Ready <none> 44m v1.27.1 10.0.40.6 <none> CentOS Stream 8 4.18.0-358.el8.x86_64 containerd://1.6.21
查看node节点的flannel public_ip也为内网ip
解决办法一
修改节点注解
kubectl annotate node <node name> flannel.alpha.coreos.com/public-ip=<some ip> --overwrite
重新查看
public_ip变为了公网ip
解决办法二
修改kubelet启动参数文件
添加 kubelet的启动参数--node-ip=公网IP, 每个主机都要添加并指定对应的公网ip
# 修改/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf, 此文件安装kubeadm后就存在了
[root@node4 ~]# vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# 在末尾添加参数 --node-ip=公网IP
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=机器公网IP
# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet
# 可以看到node4的地址变为公网ip了
[root@master ~]# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node4 Ready <none> 7h58m v1.27.1 119.0.8.7 <none> CentOS Stream 8 4.18.0-358.el8.x86_64 containerd://1.6.21
node5 Ready <none> 8h v1.27.1 10.0.40.6 <none> CentOS Stream 8 4.18.0-358.el8.x86_64 containerd://1.6.21