Kubernetes выставляет больше переменных среды, чем ожидалось - PullRequest
0 голосов
/ 18 марта 2020

Я столкнулся со странным поведением с модулями K8s, работающими в AWS EKS кластере (версия 1.14). Сервисы развертываются через Хелм 3 чарта. Дело в том, что модуль получает больше переменных среды, чем ожидалось.

В спецификации модуля указано, что переменные должны быть заполнены из карты конфигурации.

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; они хранятся на карте для приложения lopu sh. Вот пример.

/ # 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

Я также заметил, что это поведение каким-то образом связано с порядком запуска служб. Это может быть только потому, что некоторые карты конфигурации не существовали в тот момент. На данный момент кажется, что модуль получает переменные из всех карт конфигурации в текущем пространстве имен.

Кто-нибудь сталкивался с этой проблемой раньше? Возможно ли, что есть другие критерии, которые заставляют K8 заполнять окружающую среду с других карт?

1 Ответ

2 голосов
/ 18 марта 2020

Если вы имеете в виду _PORT, это для совместимости со старой системой Docker Container Links. Все службы в пространстве имен автоматически настраиваются таким образом, чтобы упростить перемещение объектов из более старых систем Docker.

...