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 下运行,这样它们就可以直接路由而无需通过公共(public)互联网,并且将节点/pod 等放在自己的空间中,而不会弄乱我们已经很小的 IP 空间.
PS:主要VPC地址空间由于与主要公司网络的ip重叠限制,只有一个/22。
最佳答案
一旦你定义了一个可以从你的 k8s 集群外部访问的服务端点(无论你是否使用 NodePort
或 LoadBalancer
选项),k8s 就会在集群中的每个节点上打开一个服务端口(也在主节点上) )。
集群中的每个节点都运行一个 kube-proxy,它负责将服务端口上的任何请求路由到正在运行的 Pod,即使该 Pod 在另一个 VPC 中完全不同的节点中运行(假设该节点可以通过当然是凝视)。
此外,Pod 在与节点的物理网络无关的虚拟网络中运行 - 所以 Pod 不会耗尽网络的 IP 空间 ,但您的 VPC/网络中的节点数确实如此。
所以,我认为你应该限制你的 VPC 中 IP 空间有限的节点数量(你可以按照你想要的方式放置主节点)并将工作节点放在另一个 VPC 中。
关于 Pod 的节点亲和性:您可以将 Pod 分配给特定的工作节点(参见 here)。
例如,您可以将所有 Pod 分配给单个 VPC 中的工作节点,并将任何公共(public)流量路由到另一个 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 的公共(public)端点。所有这些都得到了更详细的解释here .
关于amazon-web-services - 多个 vpc 上的 Kubernetes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839129/