docker - 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 不存在
解决方案
这是因为 vagrant,在其默认配置中,将有一个 NAT public_network
,通常是 eth0,然后是任何其他网络接口——例如 192.168.33.10 上的可能仅主机接口
您需要更改 kubelet 配置 - 可能还有您的 CNI 提供程序 - 以绑定和通告kubenode2
您的机器可以访问的子网中的 IP 地址。来自的单向流量kubenode2
可能会kubemaster
通过 NAT IP 到达,但根据定义,您的机器几乎无法到达 NAT IP 后面的任何内容,因此尝试到达 kubelet 端口时连接失败
推荐阅读
- python - Django为没有类/模型的视图添加下拉过滤器
- node-red - 如何在 Node-RED 中合并来自多个有效负载的数据?
- java - Java 错误:不兼容的类型:Object[] 无法转换为 Student[]
- java - Mapstruct 映射子类和父类作为源
- python - socketIO-client 连接到服务器时抛出错误
- google-chrome-extension - 为什么 http 未定义 chrome.runtime 但 https 可以正常工作
- swift - Observable
If else in RxSwift - c# - 检测两个字符串之间的差异
- c# - 如何在 c# 中使用 open cv 检测目标上的弹孔
- google-apps-script - 获取股票名称中带有 ^ 的股票的 API 信息