【问题标题】:Expose two ports, one as ClusterIP and other as NodePort公开两个端口,一个作为 ClusterIP,另一个作为 NodePort
【发布时间】:2017-09-26 11:03:39
【问题描述】:

我有一个带有两个容器的 pod。一个应用程序和一个数据库。我有两个 pod 副本。

我想暴露应用程序端口以在集群外访问,我不想暴露数据库端口。

但我想使用 DNS 访问数据库端口来平衡流量。

我可以创建两个服务,一个作为 NodePort 并将应用程序端口公开,另一个服务作为 ClusterIP 公开数据库端口。

我还可以从应用程序服务器连接到 localhost,因为之前的流量已经平衡。并且只将应用服务器公开为节点端口。

问题是:我能否将数据库端口公开为集群 ip,将应用程序端口公开为节点端口,仅提供一项服务?

谢谢。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    答案是:不,你不能。

    但您仍然应该知道,NodePort 类型的 Kubernetes 服务还将分配一个集群 IP,该端口将路由到该 IP。因此,如果您想同时发布这两个端口,一个服务就足以通过名称在内部访问它们,并通过节点端口在外部访问它们。

    【讨论】:

    • 是的,问题是这两个端口都会暴露为 NodePort。我只想要一个作为 NodePort,而另一个只是内部的。我还认为,由于 Nodeport 通过 ClusterIP,我可以访问 ddbb 端口,但如果我没有在服务描述中指定它,它既不会暴露为 ClusterIP,也不会暴露为 NodePort。
    • 是的,这就是为什么实际答案是“否”。
    【解决方案2】:

    没有。你不能。

    更不用说在复制设置中将数据库保留在同一个 pod 中的情况非常罕见,因为您通常希望将它们分成不同的部署/服务。

    【讨论】:

    • 如果数据库只用于在 pod 中运行的应用程序,为什么很少见?我会说这是微服务方法。简单的隔离应用程序。
    • 首先,您复制微服务。除非您的数据库执行了一些严重的复制魔术(或者您的服务不共享状态),否则一旦您开始运行多个实例,您就会遇到麻烦。此外,最好能够分别扩展状态存储 (db) 和服务。如果你的 svc 经常做一些合理的事情,那可能是你需要添加 do 东西的 pod,而不是那些存储状态的 pod。另一件事是数据持久性——如何在被破坏的 pod 上保留数据(除非你不需要持久性)。还有更多,但字符限制开始了...... :)
    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多