为工作节点设置不同的内部IP

Bob*_*vic 4 kubernetes kubelet

我想在本地设置一个 kubernetes 集群,其中我希望有 1 个主节点和 2 个工作节点。我已经设法做到了这一点,但我无法访问 Pod 或查看特定 Pod 的任何日志,因为所有节点的内部 IP 地址都是相同的。

vagrant@k8s-head:~$ kubectl get nodes -o wide
NAME         STATUS   ROLES    AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
k8s-head     Ready    master   5m53s   v1.15.0   10.0.2.15     <none>        Ubuntu 16.04.6 LTS   4.4.0-151-generic   docker://18.6.2
k8s-node-1   Ready    <none>   4m7s    v1.15.0   10.0.2.15     <none>        Ubuntu 16.04.6 LTS   4.4.0-151-generic   docker://18.6.2
k8s-node-2   Ready    <none>   2m28s   v1.15.0   10.0.2.15     <none>        Ubuntu 16.04.6 LTS   4.4.0-151-generic   docker://18.6.2
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我发现应该做以下事情:
- 添加KUBELET_EXTRA_ARGS=--node-ip=<IP_ADDRESS>/etc/default/kubelet文件
- 通过运行重新启动 kubelet:
sudo systemctl daemon-reload && sudo systemctl restart kubelet

问题是此位置缺少/etc/default/kubelet文件,我无法添加此附加参数。尝试手动创建文件,但当我重新启动 kubelet 时,它看起来不起作用,IP 地址仍然相同。

有人遇到过缺少 /etc/default/kubelet 文件的问题,或者是否有其他更简单的方法来设置不同的内部 IP 地址?

小智 7

对于 VirtualBox 中运行的 Kubernetes 集群,每个节点具有相同的 IP 是正常的,原因是它不是NAT newtork用于虚拟机之间通信的,访问外界时 10.0.2.15 IP 进行了 NAT。

下图显示了在 VirtualBox 之上的 Kubernetes 集群中创建的网络,如您所见,每个节点在NAT newtork其他网络上具有相同的 IP,但在其他网络上具有不同的 IP:

Kubernetes 集群网络

为了访问 POD,您可以使用 NodePort 和HOST ONLY网络。

请参阅使用 Vagrant 和 Ansible(不带 Minikube)构建 Kubernetes 集群查看完整示例并下载代码。该教程解释了如何使用 Ansible playbook、Vagrant 和 VirtualBox 启动 Kubernetes 集群。

它使用 Calico 进行网络连接,如果您需要微服务网格,它还包含另一个安装Istio的教程。