集群添加节点时候出现internalip是内网ip的情况

210 阅读1分钟

查看集群节点时候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

image.png

解决办法一

修改节点注解

kubectl annotate node <node name> flannel.alpha.coreos.com/public-ip=<some ip> --overwrite

重新查看

public_ip变为了公网ip

image.png

解决办法二

修改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