为什么每次更新 pods 时我的 kubernetes 服务端点 IP 都会改变?

Why does my kubernetes service endpoint IP change every time I update the pods?

我有一个名为 staging 的 kubernetes 服务,它选择了所有 app=jupiter pods。它在端口 1337 上公开了一个 HTTP 服务。这是描述输出:

$ kubectl describe service staging
Name:           staging
Namespace:      default
Labels:         run=staging
Selector:       app=jupiter
Type:           NodePort
IP:             10.11.255.80
Port:           <unnamed>   1337/TCP
NodePort:       <unnamed>   30421/TCP
Endpoints:      10.8.0.21:1337
Session Affinity:   None
No events.

但是当我在 RC 上 运行 一个 kubectl rolling-update 时,它删除了 1 个 pod 运行ning 应用程序并添加了另一个,然后 运行 再次描述,我得到:

$ kubectl describe service staging
Name:           staging
Namespace:      default
Labels:         run=staging
Selector:       app=jupiter
Type:           NodePort
IP:             10.11.255.80
Port:           <unnamed>   1337/TCP
NodePort:       <unnamed>   30421/TCP
Endpoints:      10.8.0.22:1337
Session Affinity:   None
No events.

一切都一样,除了端点 IP 地址。事实上,每次我这样做它都会增加 1。这是我希望不会改变的一件事,因为服务是对 pods 的抽象,所以当 pods 改变时它们不应该改变。

我知道您可以对端点地址进行硬编码,所以这更像是一种好奇心。

此外,谁能告诉我描述输出中的 IP 字段是做什么用的?

IP 是您的服务地址,它会随着时间的推移保持不变。端点是后端地址的集合,在给定的时间点,对服务地址的请求分布在这些后端地址上。每次包含您的服务的 pods 集合发生变化时,该集合都会发生变化,正如您在复制控制器 (RC) 上执行滚动更新时所注意到的那样。