Kubernetes + Rancher:多个 VLAN

Kubernetes + Rancher:多个 VLAN

我打算在我的本地网络上部署一个 k8s + Rancher 集群,但我的环境有多个 VLAN,pfSense 充当这些 VLAN 之间的防火墙和路由器。

我的集群作为虚拟机管理程序驻留在 XCP-NG 中,我将通知它应该传递给集群节点的 VLAN。

我打算将一些服务放在不同的 VLAN 中,因为我有用于开发、DMZ、生产、管理等的 VLAN,我想知道在部署 K8s + Rancher 时是否必须根据我的环境采取不同的方法?

要部署一个可在多个 VLAN 上与 Pod 协同工作的集群,集群节点是否必须具有多个 NIC,每个 NIC 都在我打算使用的 VLAN 上?

例如,如果我的集群有 6 个节点,3 个主节点和 3 个工作节点,它们必须在同一个 VLAN 中吗,还是它们在不同的 VLAN 中,并且它们之间进行通信就足够了?

如果我想在开发 VLAN 上部署一个 pod,并且我的集群位于管理 VLAN 上,这样可以吗?

在此先感谢您的帮助。

答案1

如果我想在开发 VLAN 上部署一个 pod,并且我的集群位于管理 VLAN 上,这样可以吗?

这是不可能的,kubernetes 集群有自己的内部网络。该网络与您的本地网络完全隔离。

在部署您的 kubernetes 集群时(无论是 rancher 还是任何其他内部部署 kubernetes 集群),您都可以定义您的集群将位于哪个 CIDR 上。

您可能会想:如果 kubernetes 有自己的网络,我如何与集群中部署的应用程序通信?

您可以使用服务或入口来公开您的资源。例如:当您使用服务创建服务时,type: LoadBalancer您的服务将分配一个可从内部网络访问的外部或公共 IP 地址(端点)。

$ kubectl get svc
NAME                                      TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)                      AGE
custom-nginx-svc                          LoadBalancer   10.0.10.18   104.155.87.232   80:31549/TCP                 11d
echo-svc                                  LoadBalancer   10.0.10.14   23.251.138.185   80:30668/TCP                 11d
kubernetes                                ClusterIP      10.0.0.1     <none>           443/TCP                      11d
nginx-ing-nginx-ingress-controller        NodePort       10.0.9.184   <none>           80:31745/TCP,443:31748/TCP   25h
nginx-ing-nginx-ingress-default-backend   ClusterIP      10.0.1.169   <none>           80/TCP                       25h

从上面的例子中可以看出,有两个定义了外部IP的服务。

在您的场景中,您需要将这些外部 IP 设置为来自本地网络的 IP。这可以使用 MetalLB 来实现。

在 MetalLB 中,您可以定义将使用本地网络中的哪些 IP。例如,以下配置使 MetalLB 能够控制从 到192.168.1.240的IP 192.168.1.250

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.250

这会将 MetalLB 绑定到一个范围,而这并不是您所需要的。因此,请查看文章中解释了如何创建 IPPools 并使用它们。

相关内容