多个 vpc 上的 Kubernetes
Kubernetes over multiple vpc's
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 之间的通信
问题:是否可以将 minion 实例/节点/pods 等分离到它们自己的 VPC 中,以节省网络 space主 VPC。如果可能的话,我希望主节点和服务端点 运行 在主 vpc 下,这样它们就可以直接路由,而无需通过 public 互联网,并在它们的节点中包含节点/pods 等拥有 space 不会弄乱我们已经很小的 ip space。
PS: 由于与主要公司网络的 ip 重叠限制,主 VPC 地址 space 仅为 /22。
一旦你定义了一个可以从你的 k8s 集群外部访问的服务端点(无论你是否使用 NodePort
or LoadBalancer
选项),k8s 都会在你的集群中的每个节点上打开一个服务端口(也在主节点)。
集群中的每个节点 运行 都是一个 kube-proxy,它负责将服务端口上的任何请求路由到 运行ning Pod,即使该 Pod 是 运行ning在另一个 VPC 中的一个完全不同的节点中(假设该节点当然可以通过对等访问)。
此外,虚拟网络中的 Pods 运行 与节点的物理网络无关 - 因此 Pods 不会耗尽网络的 IP space,但是 VPC/network 中的节点数确实如此。
因此,我认为您应该只限制 IP space 有限的 VPC 中的节点数量(您可以按照您想要的方式将主节点放在那里)并将工作节点放在另一个 VPC 中。
关于 Pods 的节点关联:您可以将 Pods 分配给特定的工作节点(请参阅 here)。
例如,您可以将所有 Pods 分配给单个 VPC 中的工作节点,并将任何 public 流量路由到另一个 VPC 中的节点,然后将流量代理到 运行ning Pod,但这根本无法解决您的 IP space 问题。
更新:
关于服务端点:当您配置可从 k8s 集群外部访问的服务时,主节点首先分配一个端口,该端口从那时起就为该服务保留。然后在集群中的每个节点(主节点和工作节点)上打开该端口。该端口由 kube-proxy 操作,当然它也驻留在每个节点上。 kube-proxy 然后负责其余的工作,并将来自该端口的传入流量代理到相应服务的 运行ning pod,即使该 pod 运行ning 在完全不同的节点上(k8s 内部通过一些 iptables 魔法实现了这一点)。这意味着您可以将您的请求发送到集群中任何节点上的该端口(让我们现在称之为 <service-port>
)。您的服务端点基本上是 <proto>://<any-worker-or-master-node-ip>:<service-port>
。有了这个,您还可以轻松设置 ELB 并将所有节点添加为实例,因此您有一个 public internet-facing 端点。所有这些都得到了更详细的解释 here。
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 之间的通信
问题:是否可以将 minion 实例/节点/pods 等分离到它们自己的 VPC 中,以节省网络 space主 VPC。如果可能的话,我希望主节点和服务端点 运行 在主 vpc 下,这样它们就可以直接路由,而无需通过 public 互联网,并在它们的节点中包含节点/pods 等拥有 space 不会弄乱我们已经很小的 ip space。
PS: 由于与主要公司网络的 ip 重叠限制,主 VPC 地址 space 仅为 /22。
一旦你定义了一个可以从你的 k8s 集群外部访问的服务端点(无论你是否使用 NodePort
or LoadBalancer
选项),k8s 都会在你的集群中的每个节点上打开一个服务端口(也在主节点)。
集群中的每个节点 运行 都是一个 kube-proxy,它负责将服务端口上的任何请求路由到 运行ning Pod,即使该 Pod 是 运行ning在另一个 VPC 中的一个完全不同的节点中(假设该节点当然可以通过对等访问)。
此外,虚拟网络中的 Pods 运行 与节点的物理网络无关 - 因此 Pods 不会耗尽网络的 IP space,但是 VPC/network 中的节点数确实如此。
因此,我认为您应该只限制 IP space 有限的 VPC 中的节点数量(您可以按照您想要的方式将主节点放在那里)并将工作节点放在另一个 VPC 中。
关于 Pods 的节点关联:您可以将 Pods 分配给特定的工作节点(请参阅 here)。 例如,您可以将所有 Pods 分配给单个 VPC 中的工作节点,并将任何 public 流量路由到另一个 VPC 中的节点,然后将流量代理到 运行ning Pod,但这根本无法解决您的 IP space 问题。
更新:
关于服务端点:当您配置可从 k8s 集群外部访问的服务时,主节点首先分配一个端口,该端口从那时起就为该服务保留。然后在集群中的每个节点(主节点和工作节点)上打开该端口。该端口由 kube-proxy 操作,当然它也驻留在每个节点上。 kube-proxy 然后负责其余的工作,并将来自该端口的传入流量代理到相应服务的 运行ning pod,即使该 pod 运行ning 在完全不同的节点上(k8s 内部通过一些 iptables 魔法实现了这一点)。这意味着您可以将您的请求发送到集群中任何节点上的该端口(让我们现在称之为 <service-port>
)。您的服务端点基本上是 <proto>://<any-worker-or-master-node-ip>:<service-port>
。有了这个,您还可以轻松设置 ELB 并将所有节点添加为实例,因此您有一个 public internet-facing 端点。所有这些都得到了更详细的解释 here。