在 Pod 启动期间,Kubernetes 正在根据我创建的服务创建一些环境变量(通过向下的 API?)。问题是其中之一 MY_APPLICATION_PORT 似乎初始化不正确,如下所示:
MY_APPLICATION_PORT=tcp://192.168.0.5:7777
而我预计它只能保存 7777 值。问题是我有一个 Spring Boot 应用程序,它在 application.properties 中具有此属性:
my.application.port=7777
因此,当 spring 解析其属性时,它更喜欢环境变量中的值而不是 .properties 文件中的值,从而用不正确的值覆盖它。
我的问题是 - 你们知道如何控制 kubernetes 环境变量的创建吗?我可以在我的deployment.yaml中覆盖它,但我想知道是否还有其他方法。
编辑:
我发现这是我在网上看到的最接近我的问题的描述: https://github.com/kubernetes/kubernetes/issues/65130
最佳答案
此环境变量来自与非常旧的 Docker 功能的兼容性。您可以通过在 Container 上设置 enableServiceLinks: false
在 Kubernetes 中禁用它。 Pod 规范中可能出现的任何地方的对象。例如:
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- name: ...
enableServiceLinks: false
env: [...]
特别是,该语法旨在与第一代 Docker 网络中的容器链接生成的环境变量兼容。从那时起,Docker 还在其核心中引入了 DNS 系统,在纯 Docker 中使用链接现在被认为已经过时了。始终设置此 Kubernetes 属性应该是安全的,特别是当它导致像您在此处描述的那样的冲突时。
关于spring-boot - Kubernetes自动生成的环境变量设置错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75364184/