Kubernetes SERVICE_PORT 环境变量出现顺序依赖

Kubernetes SERVICE_PORT environment variable appears order dependent

我已经向我的 Kubernetes 服务添加了第二个 TCP 端口,并且注意到 kubelet 分配给 {SVCNAME}_SERVICE_PORT environment variable 的端口似乎是顺序相关的。

例如,如果我在我的服务中这样声明我的端口:

ports:
- name: example
  port: 9000
  protocol: TCP
- name: http
  port: 8080
  protocol: TCP

那么FOO_SERVICE_PORT会被赋值为9000。但是如果我翻转顺序...

ports:
- name: http
  port: 8080
  protocol: TCP
- name: example
  port: 9000
  protocol: TCP

...然后 FOO_SERVICE_PORT 现在是 8080.

有没有办法强制 kubelet 选择一个特定的端口设置到这个变量中,这样它就不会依赖于我定义端口的顺序?也就是说,是否有我可以设置的配置,以便它始终使用“http”端口 (8080) 作为分配给该变量的值,而不管该特定端口在列表中的何处声明?

在旧的 Kubernetes 版本中,一个服务只能定义一个端口。当他们添加对多个端口的支持时,他们通过设计选择放置 first port in the backwards compatible environment variable。没有更改此行为的配置。

但是,Kubernetes 还为命名端口设置了{serviceName}_SERVICE_PORT_{portName} 环境变量,因此您可以通过端口名称获取端口号。例如:

FOO_SERVICE_PORT_EXAMPLE=9000
FOO_SERVICE_PORT_HTTP=8080