【问题标题】:hostnetwork pod - only 1 container should expose to the internethostnetwork pod - 只有 1 个容器应该暴露在互联网上
【发布时间】:2018-05-20 16:37:56
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: kubernetes kubernetes-pod


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢,您的解释非常详细。这清除了其他一些我无法完全确定我是否走在正确轨道上的问题。
    • 我第一次使用 Rancher 设置,但切换到 vanilla 设置,因为我发现 Rancher 品牌的 k8 有点太混乱了。很难理清什么是分布问题或普通问题。我尝试从我的个人主机迁移我的 docker 服务,到目前为止,大多数事情都运行良好。在工作中,我们正在迁移一些服务,但 k8 基础设施由另一个部门维护,并且规模非常大。我在本主题中的私人主机并不需要 HA 设置,但我明白了这一点。在处理这个特定的路由问题方面,它会很有帮助。
    • 很高兴我能帮上忙 :-) 如果对您有帮助,请考虑将我的帖子标记为正确答案。
    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多