Kubernetes 公开了比预期更多的环境变量

Kubernetes exposes more environment variables than expected

我在 AWS EKS 集群(版本 1.14)中遇到了 K8s pods 运行 的奇怪行为。这些服务是通过 Helm 3 图表部署的。情况是 pod 接收到的环境变量比预期的多。

pod 规范说变量应该从配置映射中填充。

apiVersion: v1
kind: Pod
metadata:
  name: apigw-api-gateway-59cf5bfdc9-s6hrh
  namespace: development
spec:
  containers:
  - env:
    - name: JAVA_OPTS
      value: -server -XX:MaxRAMPercentage=75.0 -XX:+UseContainerSupport -XX:+HeapDumpOnOutOfMemoryError
    - name: GATEWAY__REDIS__HOST
      value: apigw-redis-master.development.svc.cluster.local
    envFrom:
    - configMapRef:
        name: apigw-api-gateway-env # <-- this is the map
  # the rest of spec is hidden

配置映射 apigw-api-gateway-env 具有此规范:

apiVersion: v1
data:
  GATEWAY__APP__ADMIN_LOPUSH: ""
  GATEWAY__APP__CUSTOMER_LOPUSH: ""
  GATEWAY__APP__DISABLE_RATE_LIMITS: "true"
  # here are other 'GATEWAY__' envs
  JMX_AUTH: "false"
  JMX_ENABLED: "true"
  # here are other 'JMX_' envs
kind: ConfigMap
metadata:
  name: apigw-api-gateway-env
  namespace: development

如果我请求环境变量列表,我可以从不同的服务中找到值。 'apigw' 应用程序的配置映射中未指定这些值;它们存储在 'lopush' 应用程序的地图中。这是一个示例。

/ # env | grep -i lopush | sort | head -n 4 
GATEWAY__APP__ADMIN_LOPUSH=<hidden>
GATEWAY__APP__CUSTOMER_LOPUSH=<hidden>
LOPUSH_GAME_ADMIN_MOBILE_PORT=tcp://172.20.248.152:5050
LOPUSH_GAME_ADMIN_MOBILE_PORT_5050_TCP=tcp://172.20.248.152:5050

我还注意到这种行为在某种程度上与服务启动的顺序有关。那可能只是因为当时某些配置映射不存在。现在看来 pod 从当前命名空间中的所有配置映射接收变量。

以前有人遇到过这个问题吗?是否有可能有其他标准迫使 K8s 从其他地图填充环境?

如果您指的是 _PORT 内容,那是为了与旧的 Docker Container Links 系统兼容。命名空间中的所有服务都会以这种方式自动设置,以便更轻松地从基于 Docker 的旧系统中移动内容。