hostnetwork pod-仅1个容器应暴露于Internet

Cla*_*ova 2 kubernetes kubernetes-pod

这些是我进入kubernetes的第一步,因此,如果我的术语使用不当等,请原谅。一个mysql数据库和一个powerdns。Powerdns应该将端口53公开给Internet,而mysql应该仅在群集中公开其端口。因此,我设置以下内容:


对于Powerdns容器而不是mysql,“ pod ”的“ hostNetwork:true”

端口3306的“类型:ClusterIP”服务

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

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

小智 5

通过使用hostNetwork: true,您的整个Pod(其中的所有容器)都可以将端口绑定到主机,您已经将其识别为有问题的主机。

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

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

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