问题背景

准备使用kubectl exec -it ngx -- sh进入容器,发现不能进入,报错如下:
image-1664354439485

服务器配置:ubuntu 使用virtualbox安装,网络配置如下:
image-1664354502664
image-1664354507752
也就是双网卡,一张使用NAT,一张使用Host-Only模式

master节点的ip地址是192.168.56.101
node1节点的ip地址是192.168.56.105

使用kubectl get node -owide结果如下:
image-1664354580947

我发现node1节点的INTERNAL-IP是10.0.2.15,和master节点的ip不在同一个网段,这个ip应该是flannel提供的。这时我觉得只要把node1节点的ip显示成192.168.56.105就好了

解决办法

  1. master节点修改flannel.yaml配置,文件中加入 --iface=enp0s3,位置如下
containers:
  - name: kube-flannel
    image: xxx
    command:
    - /opt/bin/flanneld
    args:
    - --ip-masq
    - --kube-subnet-mgr
    - --iface=enp0s3 # 这里新增这条
  1. 在node节点上执行以下命令:
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# 增加这一行
Environment="KUBELET_EXTRA_ARGS=--node-ip=192.168.56.105"
  1. 重启服务
 systemctl daemon-reload
 systemctl restart kubelet
  1. 验证结果
    image-1664354853808
    这时已经可以在ctrl服务器上使用kubectl exec 命令进入容器了
    image-1664354873229

写在最后

  1. 感谢极客时间的同学给出的解决方案,虽然没有彻底解决我的问题,但是提供了思路,因为我这个是双网卡的虚拟机,最好给flannel指定网卡:https://time.geekbang.org/column/article/536829
    image-1664355154288
  2. 感谢这位网友给出的解决方案:https://yanbin.blog/kubernetes-cluster-internal-ip-issue/#more-10102
    image-1664355249755