我们以 Docker 作为容器运行时在 Kubernetes 中运行或组件。它的一个问题是 pod 环境被 Docker 风格的链接变量污染了,比如
SERVICENAME_PORT_8181_TCP
SERVICENAME_PORT_HTTP
- ......
SERVICENAME_PORT
对于每个可见服务(相同命名空间中的服务)。在这种情况下,自动创建的变量很容易与显式声明的环境发生冲突。这有时会导致难以诊断的问题。我也不想依赖那些自动变量,因为我希望容器不依赖于 Kubernetes 服务配置的细节。目前,我正在为显式变量添加唯一名称前缀以避免此类冲突。
有没有办法配置集群不为每个可见服务添加这些自动变量?或者,使用其他运行时会containerd
解决这个问题吗?令我惊讶的是,由于通过环境变量进行配置被认为是一种很好的做法,因此没有现成的 googleable 解决方案。一般来说,我如何在不遇到此类命名冲突的情况下使用环境?或者服务名称被认为是与容器合同的一部分,我不应该随意更改它们?
是和否:不是集群范围的,AFAIK,但该
enableServiceLinks: false
字段spec:
旨在允许您将其关闭不,这些名称是本着与 docker 兼容的精神而添加的,但与 docker 完全无关——它们是由 kubelet 注入的
另一种选择不是全面禁止它们,您也可以只屏蔽困扰您的应用程序的特定问题;以 Spring Boot结尾的那些特别有问题,其中
_HTTP
有一个超级通用名称,例如或Service
metadata: { name:
service
server
您可以按部署执行此操作:
或者你可以声明一个包含攻击性的 ConfigMap 并用它们
envFrom:
(为了不必修补每个受影响的部署)