【问题标题】:can two web services be hosted in a kubernetes pod?可以在 Kubernetes pod 中托管两个 Web 服务吗?
【发布时间】:2019-11-13 11:49:06
【问题描述】:

在 kubernetes 的一个 pod 中可以有两个 Web 服务。如果是,负载均衡器将如何处理它?还有一个问题,负载均衡器是否直接与 Pod 或 Pod 内的容器通信?如果它与 pod 的对话没有像第一个那样增加路由,LB->pod,pod->container。由于 pod 介于两者之间。我是 Kubernetes 新手,有这些疑问。

【问题讨论】:

    标签: docker kubernetes docker-compose google-kubernetes-engine kubectl


    【解决方案1】:

    可以在单个 pod 中运行多个容器,但使用它来托管两个单独的服务可能不是预期用途。

    在同一个 pod 中运行多个容器的示例是一个容器,即所谓的 sidecar,它运行某种形式的应用程序来生成文件(例如,一些同步工具),而主服务以某种方式使用这些文件。这可能是一个 Web 服务器,它提供同步工具从某处提取的静态文件。

    回到你的问题,因为一个 pod 只有一个 IP,所以每个端口只能使用一次。容器上的端口直接对应 pod 上的端口。因此,虽然您理论上可以通过 Web 服务运行两个容器,但您将需要使用两个不同的端口。因此,负载均衡器需要分别处理这两个端口。

    如果您想运行同一服务的多个副本以实现负载平衡,您应该使用多个 Pod,最好由部署管理,并使用一个服务(集群 IP 用于内部或 load balancer 用于外部)来分配流量。

    【讨论】:

    • 那么 LB 是否使用套接字地址直接与容器通信?
    • 在集群内部,负载均衡器必须使用 Pod 的 IP 地址来访问其发布的端口。但是,您通常会在服务上使用标签选择器,而不是手动使用 pod IP。如果您的负载均衡器在集群外部,您必须首先让服务可用,因为 pod IP 无法在集群外部路由。
    【解决方案2】:

    这里有一些对你有帮助的答案。

    - Pod 是容器的运行实例。您可以在 Pod 中运行两个容器/两个 Web 服务,但在 POD 下运行一个是理想的。

    - 当您启动容器时,您会为服务创建入口/LoadBalancer 路由。

    - 因此,当您在 pod 中运行两个 Web 服务时,每个服务都会在两个不同的服务入口发布它们的服务。

    - 理想情况下,这些服务在 POD 内有两条路由,并有一个小的服务发现来识别它们。

    - 这是我们更喜欢每个 POD 运行一个容器的原因之一。
    - 请您阅读 Kubernetes in Action 这本书以更清楚地了解。

    【讨论】:

      【解决方案3】:

      如果服务紧密耦合,您可以在同一个 pod 上运行多个容器。例如,如果您有一个 Web 服务器和一个 SQL 数据库。

      如果 Web 服务没有紧密耦合,您可能希望将它们放在不同的 pod 中。

      然后您需要部署一个service 并将其公开以使您的Web 服务无论是从集群内部还是从外部都可以访问,具体取决于service type

      要在您的服务之间进行负载平衡,您需要一个ingress controller

      【讨论】:

        猜你喜欢
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 2011-07-13
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        相关资源
        最近更新 更多