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
我已经向我的 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