что может быть вопрос ламерский.
Имеем k8s cluster на Azure, и через какое-то время замечаем, что внутри подов env просто какой-то монструозный.
Т.е. внутри каждого пода env vars всех вообще подов какие запущены.
Залезаю на ноду в кластере:
$ /bin/kubectl debug node/aks-nodepool-12981295-vmss000000 -it --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
Creating debugging pod node-debugger-aks-nodepool-12981295-vmss000000-jl528 with container debugger on node aks-nodepool-12981295-vmss000000.
If you don't see a command prompt, try pressing enter.
root@aks-nodepool-12981295-vmss000000:/# env
KC_SYNC_SERVICE_HOST=10.0.223.32
SPOOR_EQ_REMOTE_SCHEMA_PORT=tcp://10.0.123.28:80
KEYCLOAK_HTTP_PORT_80_TCP_PORT=80
REMOTE_SCHEMA_PORT_80_TCP_PROTO=tcp
.....
еще 140 env-vars от всех подов
Разве это нормально?
Я полагал, что :
- env-vars подов на нодах не видны
- что они не перемешиваются вместе
- что env-vars ноды не видны на подах
Я что-то понимал не так?
там нет все env'ов от всех подов. Это все енвы сервисов в namespace'е пода, нужны для обнаружения сервисов > env-vars подов на нодах не видны env-vars любого процесса можно посмотреть с ноды если у тебя есть root. Процесс в контейнере это обычный процесс в системе, только огорожен cgroup'ом и неймспейсами. > то они не перемешиваются вместе они не перемешаны > что env-vars ноды не видны на подах так и есть. Но под env-vars ноды непонятно что имеется в виду
Посмотреть - ОК Это вероятно с использованием nsenter или чего-то еще Но какого черта все поды имеют мешанину из env-vars друг друга - я понять не могу Это получается security breach потенциальный Запихал ты пароли в env-vars потом кто-то запустил под и видит все вокруг?
> Это вероятно с использованием nsenter или чего-то еще Да нет, никаких nsenter даже не надо, идешь в файл /proc/номер-pid-процесса/environment
> Но какого черта все поды имеют мешанину из env-vars друг друга - я понять не могу Нет никакой мешанины. Все приведенные примеры, это енвы для обнаружения служб поды не видят енвы друг-друга > потом кто-то запустил под и видит все вокруг? нет. Ну если только запустить привелигированный под, то через него ты можешь посмотреть енвы всех контейнеров на ноде. Но если ты разрешил запускать привелигированные поды - сам дурак
https://kubernetes.io/docs/concepts/services-networking/service/#environment-variables REDIS_MASTER_SERVICE_HOST=10.0.0.11 REDIS_MASTER_SERVICE_PORT=6379 REDIS_MASTER_PORT=tcp://10.0.0.11:6379 REDIS_MASTER_PORT_6379_TCP=tcp://10.0.0.11:6379 REDIS_MASTER_PORT_6379_TCP_PROTO=tcp REDIS_MASTER_PORT_6379_TCP_PORT=6379 REDIS_MASTER_PORT_6379_TCP_ADDR=10.0.0.11
Так в том-то и дело, что видят В кластере лежат огрызки вообще другой системы, для которой пока руки не дошли отдельный кластер создать так видны env-vars и от этих огрызков
нет. Ты просто невнимательно посмотрел на эти переменные. И не прошел по ссылке в доку что я выше кинул
ну как невнимательно? ╰─➤ kubectl exec -it kc-admin-5f8c49685-z9vnz -- env 130 ↵ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=kc-admin-5f8c49685-z9vnz TERM=xterm KEYCLOAK_BASE_URL=https://authentication-staging.api.adit.periplus.ch HASURA_GRAPHQL_URL=https://staging.api.adit.periplus.ch/v1/graphql KC_REALM=adit HASURA_GRAPHQL_ADMIN_SECRET=XXXX HASURA_GRAPHQL_DATABASE_URL=postgres://hasurauser:XXXXX@morat-staging-db.cxadsubxcuj7.eu-central-1.rds.amazonaws.com:5432/adit KC_PASSWORD=AditAdmin42! KC_CLIENT=adit-spa KC_URL=http://keycloak-http.staging KC_USER=adit-admin AUTH_WEBHOOK_SERVICE_PORT_HTTP=80 REMOTE_SCHEMA_SERVICE_HOST=10.0.127.72 SPOOR_LIGHT_STAGING_SPOOR_LIGHT_BACKEND_PORT_80_TCP_PORT=80 AUTH_WEBHOOK_SERVICE_HOST=10.0.171.153 KC_SYNC_SERVICE_PORT_HTTP=80 все env-vars всех подов или как иначе смотреть? Конечно, если я смотрю kubectl secrets, то все ОК: ╰─➤ kubectl -n staging get secrets kc-admin -o yaml | yq -r '.data| map_values(@base64d)' 1 ↵ { "HASURA_GRAPHQL_ADMIN_SECRET": "asdadaz", "HASURA_GRAPHQL_DATABASE_URL": "postgres://hasurauser:XXXXX@morat-staging-db.cxadsubxcuj7.eu-central-1.rds.amazonaws.com:5432/adit", "HASURA_GRAPHQL_URL": "https://staging.api.adit.periplus.ch/v1/graphql", "KC_PASSWORD": "XXXXXX", "KEYCLOAK_BASE_URL": "https://authentication-staging.api.adit.periplus.ch" }
ну и что тут не так? какие переменные тебя смущают?
Пароли к БД которые сервисом не используются И не могут использоваться доступны из env
Так вы глазами ничего не видите. И верите в то что не видите, да еще пытаетесь исправить несуществующее явление =) Секрет kc-admin имеет поля: HASURA_GRAPHQL_ADMIN_SECRET, HASURA_GRAPHQL_DATABASE_URL, HASURA_GRAPHQL_URL, KC_PASSWORD, KEYCLOAK_BASE_URL - все эти поля прокидываются в env пода. Потому что это указано в этом ямле для пода очевидно (поля env, envFrom) Также очевидно переменные среды KC_REALM, KC_CLIENT, KC_USER - также прокинуты каким-то сопсобом в под через манифест (поля env, envFrom) Остальные переменные среды AUTH_WEBHOOK_SERVICE_PORT_HTTP, REMOTE_SCHEMA_SERVICE_HOST, SPOOR_LIGHT_STAGING_SPOOR_LIGHT_BACKEND_PORT_80_TCP_PORT, KC_SYNC_SERVICE_PORT_HTTP это автоматически созданные кубом переменные для обнаружения служб - auth-webhook, remote-schema, kc-sync и так далее
Обсуждают сегодня