2

这些是我进入 kubernetes 世界的第一步,如果我的术语使用不正确等,请原谅。我正在运行一个没有外部负载均衡器的单节点 kubernetes 设置,并且我已经部署了一个带有容器的 pod。一个mysql数据库和一个powerdns。Powerdns 应该向 Internet 公开端口 53,而 mysql 应该只在集群中公开其端口。因此我设置了以下内容:

“hostNetwork: true” 用于
powerdns 容器的 pod “hostPort” 而不是 mysql

使用“类型:ClusterIP”为端口 3306 提供服务

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

谁能给我一个提示我做错了什么?

4

1 回答 1

5

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

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

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

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

于 2018-05-20T16:56:25.477 回答