在 Kubernetes 中用于编排容器化机器

99次阅读
没有评论

问题描述

正在使用 Kubernetes(k8s)在本地网络上进行环境编排。他的想法是部署多个 Linux 机器,每台机器都应该有自己的“外部”IP地址。目前,他找到了一些关于在外部IP上暴露服务的指南(例如:https://kubernetes.io/docs/tutorials/stateless-application/expose-external-ip-address/),但这些指南都是为了在特定端口上暴露服务。他的需求更多地针对将整个机器暴露在一个特定的静态IP上,而不仅仅是一个端口。这将使他能够轻松地部署和重塑所需的任何网络拓扑。需要注意的是,不能在不暴露IP的情况下进行(因此使用内部的K8s路由/DNS),因为这个环境需要与现有网络中的真实/裸金属硬件进行交互。

以下是期望结果的一个小示例:
在 Kubernetes 中用于编排容器化机器

请问是否有人了解这种情况,并能告诉我这是否可能实现?

解决方案

请注意以下操作可能涉及版本差异及一些配置设置。

使用 DaemonSets

在 Kubernetes 中,您可以考虑使用 DaemonSets。您可以配置它,以便 Pod 在 Kubernetes 集群的每个节点上运行。每个独立的 Pod(运行您的 Linux 机器)可以通过它所在节点的 IP 地址对外部网络进行暴露。

需要强调的是,访问任何机器始终需要IP地址和端口的组合。因此,您需要根据要访问容器的哪个端口来进行决策。

示例:
假设有一个由3个节点组成的 Kubernetes 集群,您可以创建一个 DaemonSet,并为其指定您选择的应用程序/镜像。以下的名字/细节是虚构的,但应该可以帮助您理解映射关系。

  • ubuntu-daemonset-pod-xyzk8s-node-1 上,IP 地址为 192.168.2.1
  • ubuntu-daemonset-pod-abck8s-node-2 上,IP 地址为 192.168.2.2
  • ubuntu-daemonset-pod-hijk8s-node-3 上,IP 地址为 192.168.2.3

上述的 Pods 可以在它们所在节点的 IP 地址上进行“暴露”。也就是说,ubuntu-daemonset-pod-xyz 可以在 192.168.2.1 上访问。

使用 NodePort

任何 Pod 都可以配置为在节点的 IP 上可访问,称为 NodePort。即使您不使用 DaemonSet,也可以实现这一点。

静态IP暴露

关于将 Pod 暴露在与节点不同的静态 IP 上的问题,Kubernetes 并不直接支持为 Pod 分配独立的静态 IP。不过,您可以考虑使用一些网络策略或工具,如 Ingress Controller、MetalLB 等,来实现更高级的网络配置和静态 IP 的分配。

针对更多Pod的情况

如果您希望拥有比节点更多的 Pod,或者在不同的子网中放置 Pod,您可以使用 Kubernetes 的网络策略、网络插件或第三方工具来实现。这些工具可以帮助您更灵活地管理 Pod 之间的网络通信和路由规则,从而实现更复杂的网络拓扑。

希望这些解决方案能够帮助您实现您的网络编排需求!

正文完