这是我进入kubernetes世界的第一步,请原谅我,如果我的条款没有正确使用等等。 我正在运行没有外部负载均衡器的单节点kubernetes设置,我已经将容器部署了一个容器。一个mysql数据库和一个powerdns。 Powerdns应该将端口53暴露给互联网,而mysql应该仅在群集中暴露其端口。 因此我设置了以下内容:
“hostNetwork:true”表示pod powerdns容器的“hostPort”而不是mysql
使用“type:ClusterIP”
为端口3306提供服务现在一切都在运行。 Powerdns可以连接到mysql,并在Internet上的端口53上公开。 但与我的假设相反,mysql数据库也暴露在互联网上。
有人能给我一些暗示我做错了吗?
答案 0 :(得分:4)
使用hostNetwork: true
允许您的整个pod(其中的所有容器)将端口绑定到主机,您已将其识别为有问题。
首先,您应该考虑将mysql容器移出pod。使用多个容器应该将容器分组为一个单元(例如,应用程序和后台进程彼此密切通信)。
在服务中思考。您的服务PowerDNS本身就是一个服务用户,因为它需要一个数据库,这是PowerDNS无法提供的应用程序。你想要MySQL的另一项服务。查看StatefulSets的文档(one,two),因为它使用MySQL作为示例(在Kubernetes上运行数据库是更复杂的任务之一)。
为此创建ClusterIP
服务。 ClusterIP
服务只能在群集中使用(您的数据库是内部服务,因此这就是您想要的)。
这样,您的PowerDNS窗格将只包含一个可以绑定到主机网络的容器。 但使用hostNetwork: true
一般不太好。您无法创建应用程序的多个实例(在PowerDNS扩展的情况下),但是对于第一步来说它没什么问题。您的设置前面的负载平衡器会更好。您可以使用NodePort
服务在负载均衡器代理连接的高价值端口上提供服务。