hostnetwork pod - 只有 1 个容器应该暴露在互联网上

hostnetwork pod - only 1 container should expose to the internet

这是我进入 kubernetes 世界的第一步,如果我的术语使用不当等,请原谅。 我是 运行 没有外部负载均衡器的单节点 kubernetes 设置,我已经部署了一个带有容器的 pod。一个 mysql 数据库和一个 powerdns。 Powerdns 应该将端口 53 暴露给互联网,而 mysql 应该只在集群中暴露它的端口。 因此我设置如下:

"hostNetwork: true" 用于广告连播
"hostPort" 用于 powerdns 容器而不是 mysql

端口 3306 服务 "type: ClusterIP"

现在一切都是 运行。 Powerdns 可以连接到 mysql 并暴露在互联网的端口 53 上。 但与我的假设相反,mysql 数据库也暴露在互联网上。

任何人都可以提示我做错了什么吗?

使用 hostNetwork: true 允许您的整个 pod(其中的所有容器)将端口绑定到您已经确定为有问题的主机。

首先,您应该考虑将 mysql 容器移出您的 pod。使用多个容器应该将作为一个单元工作的容器分组(例如,一个应用程序和一个后台进程相互密切通信)。

思考服务。您的服务 PowerDNS 本身就是服务用户,因为它需要数据库,而应用程序 PowerDNS 不提供。您想要 MySQL 的另一项服务。查看 StatefulSets 的文档 (one, two),因为它使用 MySQL 作为示例(运行 Kubernetes 上的数据库是更复杂的任务之一)。 为此创建一个 ClusterIP 服务。 ClusterIP 服务只能在集群内使用(您的数据库是内部服务,所以这就是您想要的)。

这样一来,您的 PowerDNS pod 将只有一个可以绑定到主机网络的容器。 但是使用hostNetwork: true一般来说不是很好。您将无法创建应用程序的多个实例(以防 PowerDNS 扩展),但对于第一步来说没问题。不过,在您的设置前面安装一个负载平衡器会更好。您可以使用 NodePort 服务使您的服务在负载均衡器代理连接到的高价值端口上可用。