我有一个从IAAS提供商在虚拟机上运行的自定义Kubernetes群集(使用kubeadm部署)。 Kubernetes节点没有面向Internet的IP地址(主节点除外,我也用于Ingress)。
我现在正在尝试将计算机加入此群集,该群集不是由我的主要IAAS提供商托管的。我想这样做是因为我需要专门为我的应用程序提供IAAS不提供的计算资源。
这样做的最佳方式是什么?
以下是我已经尝试过的内容:
当我告诉主节点上的kube-apiserver
监听0.0.0.0
并为每个节点使用公共IP地址时,我没有加入节点。但是,从安全角度来看,这种方法是不理想的,并且还会导致更高的成本,因为必须为通常不需要它们的节点租用公共IP地址。
我通过使用sshuttle创建从外部计算机到Kubernetes主节点的隧道取得了一定的成功,sshuttle在我的外部计算机上配置为通过隧道路由10.0.0.0/8
。这在原理上是有效的,但它似乎太过于hacky并且也有点不稳定(有时外部机器无法获得到其他节点的路径,我还没有进一步研究这个问题)。
以下是一些可行的建议,但我还没有尝试,因为我不赞成这些方法:
我可以尝试使用合适的VPN隧道来连接机器。我不赞成这种解决方案,因为它会给集群增加(无可否认的很小)开销。
看来kubefed专门用于此目的。但是,我认为这在我的情况下是过度的:我只是尝试将一台外部计算机加入集群。使用Kubefed会增加 ton 的开销(外部机器上的主集群+单主机Kubernetes部署上的联合控制平面)。
答案 0 :(得分:1)
我想不出比VPN更好的解决方案了。特别是因为您只有一个隔离节点,所以在此节点和主节点之间进行握手应该相对容易。
将流量从“内部”节点路由到此隔离节点也很简单。由于所有节点都已将主服务器用作其默认网关,因此修改主服务器上的路由表足以通过隧道将流量从内部节点转发到隔离节点。
您必须小心容器网络的配置。根据您用于部署它的解决方案,您可能必须为VPN的另一侧的Docker桥分配不同的子网。