Kubernetes:每个Pod都公开端口时,在节点上运行多个Pod

10

我正在按照 Kubernetes 入门指南中的 Hello, World示例 进行操作。

该示例在 Google 容器引擎上创建了一个具有 3 个节点/实例的集群。

要部署的容器是一个基本的 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,但在这种情况下行为会是什么样子呢?

2个回答

16

在 Slack 的 频道 #kubernetes-users 中获得了一些帮助:

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

此外,当我从浏览器访问我的服务时,我能够在所有 4 个 pods 中看到日志,所以实现了对所有 4 个 pods 的流量服务。


1
澄清:Pod IP地址是私有的,仅在集群内部使用,而服务将拥有一个单一的IP地址,据我所知通常可以从集群外部访问。 - giorgiosironi
据我所知,要从外部访问一个节点,需要一个单一的IP地址,而多个Pod将拥有自己的端口。 - SinhaOjas
据我所记,每个 Pod 都会获得一个 IP 地址。可能值得进一步了解一下。 - Jatin
@Jatin,你说得对,所有的Pod IP地址都保存在IPTables中,节点可以访问这些地址,从而帮助发现Pods。 - SinhaOjas

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接