Я развертываю службу, которая жестко использует конфигурацию YAML, которая выглядит примерно так:
# /config/srv.yaml
#
# ...
#
tenantid: '...'
clientid: '...'
certfile: '/config/client/client.crt'
keyfile: '/config/client/client.key'
#
# ...
#
TL;ДР; Я хочу только хранить файлы tenantid
, clientid
и сертификатов в k8s
секретах.
Мое текущее решение хранит весь файл YAML в секрете, что кажется расточительным, а также громоздким в управлении.
По сути, у меня есть это, которое хорошо работает для двух файлов сертификатов (/config/client/client.crt
и /config/client/client.key
):
spec:
containers:
- name: my-container
image: "my-image"
imagePullPolicy: Always
ports:
- containerPort: 50100
env:
- name: CONF_FILE
value: "/config/srv.yaml"
volumeMounts:
- name: yaml-vol
mountPath: "/config" # KLUDGY
readOnly: true
- name: certs-vol
mountPath: "/config/client"
readOnly: true
volumes:
- name: yaml-vol
secret:
secretName: my-yamls # KLUDGY
- name: certs-vol
secret:
secretName: my-certs # contains the *.crt/*.key cert files
Однако это включает в себя хранение всего /config/srv.yaml
в секретах kubernetes my-yamls
.
документы по секретам k8s предлагают способ создайте динамическую конфигурацию YAML для своих контейнеров, заполняя секреты именно там, где это необходимо, используя stringData
, например.
stringData:
config.yaml: |-
apiUrl: "https://my.api.com/api/v1"
username: {{username}}
password: {{password}}
но документы заканчиваются очень расплывчато:
Затем ваш инструмент развертывания может заменить переменные шаблона {{username}} и {{password}} перед запуском
kubectl apply
.
Мне просто нужно заполнить два строковых элемента в динамическом конфиге: clientid
и tenantid
.
Используя только kubectl
, как можно создать динамический YAML для контейнера, сохраняя неконфиденциальный шаблон YAML в deploy.yaml
, и иметь только конфиденциальные элементы в k8s secrets
?
kubectl
плюс команды оболочки. - person Cloud   schedule 27.11.2019app.yaml
и вместо этого передать их черезENV VAR
? - person colm.anseo   schedule 27.11.2019yaml
с только частями, которые вам нужны, с помощью скрипта Python для загрузки файлаyaml
(его можно импортировать как объект, аналогичный данным JSON), извлечь только секреты, которые вас интересуют, и запишите только эти секреты в новыйyaml
файл, который можно развернуть либо черезkubectl
, либо внутри Python с помощью K8S Py API. Пожалуйста, избегайте использования env vars, когда это возможно, так как они уродливы (т.е. глобальные) и имеют тенденцию создавать дыры в безопасности. - person Cloud   schedule 27.11.2019/proc
и получать данные, если система не защищена должным образом. - person Cloud   schedule 27.11.2019ENV VAR
с. Я следую вашему обходному пути. Но если кто-то создает службу с нуля, как лучше всего вводить секреты в указанную службу? У вас естьapp.yaml
для обслуживания иsecrets.yaml
со всеми конфиденциальными строками? - person colm.anseo   schedule 27.11.2019