我有一台路由器,后面有 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.2
吗ClusterIP
?如果是这样,这可能解释了您遇到的很多问题。我写下面的内容时有一个主要假设……它是您在 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.maas
到192.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 池中挑选并分配一个。
希望你一切顺利。祝你好运!