如何在 MAAS 后面接入 Kubernetes

如何在 MAAS 后面接入 Kubernetes

我有一台路由器,后面有 MAAS,后面有 Kubernetes,位于 MAAS 控制器后面(它有 2 个 NIC --- 一个连接到 Kubernetes,一个连接到路由器)。我正尝试从路由器上的另一台计算机连接到 IP 地址为 10.12.0.2 的 Kubernetes 中的容器。但是,我无法连接。

MAAS 控制器的 IP 地址为 10.11.0.2,我可以正常连接到该地址。但是,10.12.0.0 网络未暴露给路由器。如何从连接到路由器的计算机连接到 Kubernetes 集群?有没有一种自动化的方法可以做到这一点,而不必为每个新容器手动桥接 MAAS 中的 IP?此外,我能否以一种对 Kubernetes 集群和路由器之间 MAAS 节点所提供的安全性影响最小的方式来做到这一点?

答案1

首先……容器 IP 是10.12.0.2ClusterIP?如果是这样,这可能解释了您遇到的很多问题。我写下面的内容时有一个主要假设……它是您在 pod 内的容器中获得的内部、未公开的 IP。如果您还没有尝试过,您可以尝试一件事……尝试10.12.0.2从 MAAS 框访问该容器 IP。无法访问?我敢打赌它需要暴露……


我还没有尝试过您使用的确切设置。我认为下面写的内容可能不完全适用,因为您的设置通过 MAAS 服务器运行,这会使事情变得复杂。

也许您已经发现了这一点,但大多数 Kubernetes 服务提供的 ClusterIP 地址仅向集群内的其他机器公开。公开服务的方法有很多,其中许多方法我不推荐您使用。

下面描述的是我目前最简单、最好的设置,它的优点是为该服务提供静态 IP。然后,您可以使用 MAAS 中的 DNS 设置(或您喜欢的任何 DNS 设置)为该服务创建A指向该 IP 的记录。

为了使这个概念不那么抽象和被术语所束缚,这里有一个具体的例子……你可以:

  • rook.io在你的 k8s 集群上部署 Rook/Ceph( )
  • 更改 svc 以使其具有,为指向 Ceph 仪表板的 svc 发现ServiceType: LoadBalancer获取一个 IP192.168.1.240
  • A在 MAAS 的 DNS 中设置一条记录以绑定ceph.maas192.168.1.240

现在您可以打开浏览器并ceph.maas访问 dash。

就您而言,静态 IP 可能是您需要的一部分,以便为 Web 应用、服务和存储提供可预测的端点。也许 MAAS 在充当代理时只会转发 IP。


如果您需要的是 LAN 中集群外部可访问的静态 IP,我建议您在子网上保留 MAAS 和路由器未使用的 IP 范围。图片中的示例保留了 192.168.1.240-247毫无保留由 MAAS 和其他机构提供。

然后使用 MetalLB:

kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml

为配置映射创建以下清单,为您的负载均衡器提供可用的 IP 池。

layer2.yaml

 apiVersion: v1
 kind: ConfigMap
 metadata:
   namespace: metallb-system
   name: config
 data:
   config: |
     address-pools:
     - name: my-ip-space
       protocol: layer2
       addresses:
       - 192.168.1.240/29

将清单应用到您的集群

kubectl apply -f layer2.yaml

这些步骤将部署和配置一个裸机负载平衡器,该负载平衡器能够绑定到您可以在集群外部访问的静态 IP。上述设置及其配置图设置为绑定到该狭窄范围的保留地址 (192.168.1.240-247)。如果您需要更广泛和/或不同的范围,此 CIDR 到 IP 范围计算器会有所帮助。

https://www.ipaddressguide.com/cidr

部署 MetalLB 后,您需要使用静态 IP 转到希望内部公开的服务,并将 ClusterIP(或 NodePort)更改为 LoadBalancer。这将从 MetalLB 可用的 IP 池中挑选并分配一个。

希望你一切顺利。祝你好运!

在此处输入图片描述

相关内容