我已将此问题发布在 StackOverflow 中,但被重定向到这里,所以我再次询问。我目前正在研究一个用例,其中 NAT 路由器后面的多台机器需要能够充当 Kubernetes 集群中的节点。这带来了一些严重的网络困难,因为节点甚至没有可公开访问的 IP,而不是在同一个本地网络上,并且能够通过 IP 轻松访问其他 pod。我一直在尝试找出使用隧道的解决方案,但我不确定它究竟如何工作。所有 pod 都需要能够通信,所以我是否必须在每个 pod 之间以及从每个节点到 api 服务器之间设置隧道?我们集群中充当节点的所有机器都将通过 WebRTC 连接进行连接,因此理论上数据也可以通过 WebRTC 传递。其他人提到使用 VPN,所以如果有人知道如何做到这一点的更多细节,那也很棒。我希望以前有人以某种方式做到了这一点。
答案1
以下是通过 OpenVPN 网络构建 Kubernetes 集群的一个很好的示例:
该示例使用了tun
opevpn 模式,但我认为'点击模式更合适,因为它创建了第 2 层覆盖网络并允许在节点的 vpn 接口上使用任何 IPv4 子网。
在这两种情况下,至少需要一台具有公共 IP 的机器作为 NAT 后面节点的 VPN 服务器。
您可能还需要:
- 指定
--apiserver-advertise-address
期间kubeadm init
, - 在 Flannel 插件 YAML 文件中设置正确的接口(以避免默认路由接口上的集群流量),
--node-name
将节点加入集群时手动指定节点名称( )kubeadm join
。