Kubernetes Kustomize: заменить переменную в файле патча - PullRequest
1 голос
/ 14 января 2020

Учитывая следующий патч kustomize:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flux
spec:
  template:
    spec:
      containers:
        - name: some-name
          args:
            - --some-key=some-value
            ...
            - --git-url=https://user:${PASSWORD}@domain.de

Я хочу использовать kubectl apply -k и каким-то образом передать значение для ${PASSWORD}, которое я могу установить из своего скрипта сборки.

Единственное решение, которое я получил до сих пор, - это замена ${PASSWORD} на sed, но я бы предпочел решение kustomize.

1 Ответ

2 голосов
/ 15 января 2020

Как уже сказал @Jonas, вы должны рассмотреть возможность использования Secret. Это хорошо описано в этой статье.

Я хочу использовать kubectl apply -k и каким-то образом передать значение для $ {PASSWORD}, которое я могу установить из моего скрипта сборки.

Я полагаю, ваш скрипт может сохранить сгенерированный пароль в виде переменной или сохранить его в каком-нибудь файле. Вы можете легко создать Secret следующим образом:

$ kustomize edit add secret sl-demo-app --from-literal=db-password=$PASSWORD

или из файла:

$ kustomize edit add secret sl-demo-app --from-file=file/path

Как вы можете прочитать в упомянутой статье:

Эти команды изменят ваш kustomization.yaml и добавят в него SecretGenerator.

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

bases:
- ../../base

patchesStrategicMerge:
- custom-env.yaml
- replica-and-rollout-strategy.yaml

secretGenerator:
- literals:
  - db-password=12345
  name: sl-demo-app
  type: Opaque

kustomize build Выполнение в вашем каталоге проекта создаст среди прочих следующие Secret:

apiVersion: v1
data:
  db-password: MTIzNDU=
kind: Secret
metadata:
  name: sl-demo-app-6ft88t2625
type: Opaque
...

Более подробную информацию вы можете получить в статье .

Если мы хотим использовать этот секрет из нашего развертывания, у нас просто, как и прежде, есть добавьте новое определение слоя, которое использует секрет.

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sl-demo-app
spec:
  template:
    spec:
      containers:
      - name: app
        env:
        - name: "DB_PASSWORD"
          valueFrom:
            secretKeyRef:
              name: sl-demo-app
              key: db.password

В вашем файле определения Deployment это может выглядеть примерно так:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flux
spec:
  template:
    spec:
      containers:
        - name: some-name
          env:
            - name: "PASSWORD"
              valueFrom:
                secretKeyRef:
                  name: git-secret
                  key: git.password
          args:
            - --some-key=some-value
            ...
            - --git-url=https://user:${PASSWORD}@domain.de
...