【问题标题】:Kubernetes: multiple pods in a node when each pod exposes a portKubernetes:当每个 pod 暴露一个端口时,一个节点中有多个 pod
【发布时间】:2016-11-14 10:23:57
【问题描述】:

我一直在关注 Kubernetes 入门指南中的 Hello, World example

在该示例中,在 Google Container Engine 上创建了一个具有 3 个节点/实例的集群。

要部署的container是一个基本的nodejs http服务器,监听8080端口。

现在当我运行
kubectl run hello-node --image <image-name> --port 8080
它创建一个pod 和一个deployment,在其中一个节点上部署pod

运行
kubectl scale deployment hello-node --replicas=4
命令将 pod 的数量增加到 4 个。

但是既然每个pod都暴露了8080端口,那会不会在部署两个节点的pod上造成端口冲突呢? 当我执行kubernetes get pods 时,我可以看到 4 个 pod,但是在这种情况下会是什么行为?

【问题讨论】:

    标签: docker kubernetes google-kubernetes-engine


    【解决方案1】:

    您的 pod 公开的端口与您节点上的物理端口之间存在差异。这些需要通过例如 kubernetes service 或 loadBalancer 进行链接,正如在 hello-world 文档 http://kubernetes.io/docs/hellonode/#allow-external-traffic 中进一步讨论的那样

    【讨论】:

      【解决方案2】:

      #kubernetes-users channel 上获得一些帮助:

      1. kubectl run ... 中指定的端口是pod 的端口。每个 pod 都有其唯一的 IP 地址。因此,没有端口冲突。
      2. 除非您将 Pod 公开为 service,否则 Pod 不会提供流量。
      3. 通过运行kubectl expose ... 暴露service 会在每个 node 上分配一个NodePort(范围为30000-32000)。此端口对于每项服务都必须是唯一的。
      4. 如果一个节点有多个 Pod,kube-proxy 会平衡这些 Pod 之间的流量。

      另外,当我从浏览器访问我的服务时,我能够看到所有 4 个 pod 中的日志,因此流量来自所有 4 个 pod。

      【讨论】:

      • 澄清:Pod IP 地址是私有的并且是集群内部的,而服务将有一个 IP 地址,据我所知,通常可以从集群外部访问。
      • AFAIK,对于从外部访问,一个节点只有一个 IP 地址,多个 pod 将有自己的端口。
      • @SinhaOjas 根据我的记忆,每个 pod 都有一个 IP 地址。可能值得进一步阅读
      • @Jatin 你是对的,所有 Pod 的 IP 地址都保存在 IPTables 中,节点可以访问,同时有助于发现 Pod。
      猜你喜欢
      • 2021-05-13
      • 2019-02-17
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      相关资源
      最近更新 更多