首页 > 解决方案 > Kubernetes 主节点和工作节点获得不同的 IP 范围

问题描述

我已经使用 vagrant 设置了一个本地 kubernetes 集群。为每个 vagrant box public 和 private 分配了 2 个 nw 接口。

kubectl 获取节点 -o 宽

NAME         STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   
OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
kubemaster   Ready    master   14h   v1.12.2   192.168.33.10   <none>        
Ubuntu 16.04.5 LTS   4.4.0-137-generic   docker://17.3.2
kubenode2    Ready    <none>   14h   v1.12.2   10.0.2.15       <none>        
Ubuntu 16.04.5 LTS   4.4.0-138-generic   docker://17.3.2

在 master 上启动 kubeadm 时,我运行 ip Advertisement 并将 ip 作为 master 的 192.168.33.10。

我真正的问题是我无法登录任何吊舱。

kubectl exec -ti web /bin/bash

错误:无法升级连接:pod 不存在

标签: dockerkubernetesoverlay

解决方案


这是因为 vagrant,在其默认配置中,将有一个 NAT public_network,通常是 eth0,然后是任何其他网络接口——例如 192.168.33.10 上的可能仅主机接口

您需要更改 kubelet 配置 - 可能还有您的 CNI 提供程序 - 以绑定和通告kubenode2您的机器可以访问的子网中的 IP 地址。来自的单向流量kubenode2可能会kubemaster通过 NAT IP 到达,但根据定义,您的机器几乎无法到达 NAT IP 后面的任何内容,因此尝试到达 kubelet 端口时连接失败


推荐阅读