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

时间:2018-05-20 16:37:56

标签: kubernetes kubernetes-pod

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

“hostNetwork:true”表示pod powerdns容器的“hostPort”而不是mysql

使用“type:ClusterIP”

为端口3306提供服务

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

有人能给我一些暗示我做错了吗?

1 个答案:

答案 0 :(得分:4)

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

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

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

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