2 VPC:
主要VPC: 10.111.0.0/22
主要VPC子网包含4个子网:
10.111.0.0/25
10.111.0.128/25
10.111.1.0/25
10.111.1.128/25
辅助VPC: Kubernetes Minion VPC(172.16.0.0/20)
附加说明: 主要VPC&&辅助VPC使用VPC对等来启用2个VPC之间的通信
问题:是否可以在自己的VPC中分离minion实例/节点/ pod等,以节省主VPC中的网络空间。如果可能的话,我希望在主vpc下运行主端点和服务端点,这样它们就可以直接路由而不需要通过公共互联网,并且在自己的空间中拥有节点/ pod等不会弄乱我们已经很小的ip空间
PS:由于主公司网络的IP重叠限制,主VPC地址空间仅为/ 22。
答案 0 :(得分:1)
一旦定义了可从k8s群集外部访问的服务端点(无论您使用NodePort
还是LoadBalancer
选项),k8s都会在您的每个节点上打开一个服务端口集群(也在主节点上)。
群集中的每个节点都运行一个kube-proxy,它会关注服务端口上的任何请求都被路由到正在运行的Pod,即使该Pod在另一个VPC中的完全不同的节点中运行(假设该节点可通过当然是凝视)。
此外,Pod在与您的节点的物理网络无关的虚拟网络中运行 - 因此 Pod不会耗尽网络的IP空间,但是VPC /网络中的节点数量确实如此。
所以,我认为你应该只限制你的VPC中具有有限IP空间的节点数量(你可以按照你想要的方式放置主节点)并将工作节点放在另一个VPC中。
关于Pod的节点关联:您可以将Pod分配给特定的工作节点(请参阅here)。 例如,您可以将所有Pod分配到单个VPC中的工作节点,并将任何公共流量路由到另一个VPC中的节点,然后将该流量代理到正在运行的Pod,但这并不能解决您的IP空间问题。
<强>更新强>
关于服务端点:当您配置可从k8s群集外部访问的服务时,主节点首先分配一个端口,该端口从那时起为该服务保留。然后,在群集中的每个节点(主节点和工作节点)上打开该端口。该端口由kube-proxy操作,当然它也驻留在每个节点上。然后kube-proxy负责其余部分,并将来自该端口的传入流量代理到相应服务的运行pod,即使该pod在完全不同的节点上运行(内部k8s通过一些iptables魔术实现这一点)。这意味着您可以将请求发送到群集中任何节点上的该端口(现在可以调用它<service-port>
)。您的服务端点基本上是<proto>://<any-worker-or-master-node-ip>:<service-port>
。通过这种方式,您还可以轻松设置ELB并将所有节点添加为实例,这样您就可以拥有面向Internet的公共端点。所有这些都有更详细的解释here。