【问题标题】:setup kubernetes worker node behind NAT在 NAT 后面设置 kubernetes 工作节点
【发布时间】:2019-04-15 06:15:46
【问题描述】:

我已经使用 kubeadm 设置了一个 kubernetes 集群。

环境

  1. 主节点安装在具有公共 IP 的 PC 中。
  2. NAT地址后面的工作节点(接口有本地内部IP,但需要使用公共IP访问)

状态

worker节点能够加入集群并运行

kubectl get nodes

节点的状态为就绪。

Kubernetes 可以在该节点上部署和运行 pod。

问题

我遇到的问题是我无法访问部署在该节点上的 pod。例如,如果我运行

kubectl logs <pod-name>

其中 pod-name 是部署在工作节点上的 pod 的名称,我有这个错误:

Error from server: Get https://192.168.0.17:10250/containerLogs/default/stage-bbcf4f47f-gtvrd/stage: dial tcp 192.168.0.17:10250: i/o timeout

因为它试图使用本地 IP 192.168.0.17,外部无法访问。

我看到节点有这个注解:

flannel.alpha.coreos.com/public-ip: 192.168.0.17

所以,我尝试修改注解,设置外部IP,这样:

flannel.alpha.coreos.com/public-ip: <my_externeal_ip>

我看到该节点已正确注释,但它仍在使用 192.168.0.17。

我还需要在工作节点或集群配置中设置什么吗?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    边栏中有大量相关问题,我有 90% 的把握这是一个常见问题解答,但懒得对重复项进行分类

    我还需要在工作节点或集群配置中设置什么吗?

    不,这种情况不是您的工作节点配置错误,也不是您的集群配置。这只是 Kubernetes 处理以 Pod 为中心的流量的方式的副作用。这确实意味着,如果您选择继续进行该设置,您将无法使用kubectl execkubectl logs(我也认为port-forward),因为这些命令不会通过 API 服务器发送流量,而是直接联系 Node 上的 kubelet 端口,该端口托管您正在与之交互的 Pod。这主要是为了减轻通过 API 服务器传输的流量,但如果您有足够多的 exec/log/port-foward/etc 命令同时发生,也可能是一个扩展问题,因为 TCP 端口不是无限的。

    我认为理论上可以让您的工作站加入覆盖网络,因为根据定义它与外部网络无关,但我没有大量尝试获得的经验一个与 NAT 配合得很好的叠加层,所以这是“理论上”的部分。

    我亲自让 Wireguard 跨 NAT 工作,这意味着您可以 VPN 进入您的 Node 网络,但这是一些齿轮转动,并且可能比它的价值更麻烦。

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 2020-05-21
      • 2020-08-17
      • 2021-06-22
      • 2019-04-28
      相关资源
      最近更新 更多