K8s - секреты проецирования объема не создают файл - PullRequest
0 голосов
/ 10 июля 2020

У меня проблема с развертыванием нескольких секретов из шаблона deployment.yaml. По какой-то причине, когда мое приложение пытается найти файл в развертывании, его не удается найти. Секреты взяты groovy скриптом из gopass.

Вот актуальная упрощенная версия файла (уровни индикации должны быть правильными)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "test-app"
spec:
  template:
    spec:
      containers:
      - name: "some-container"
        image: "imgtag"
        volumeMounts:
        - name: app-secrets
          mountPath: /app/secrets
      volumes:
      - name: app-secrets
        projected:
          sources:
          - secret:
            name: secret1
          - secret:
            name: secret2

Старая версия (правильно созданная private_key.pem) :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "test-app"
spec:
  template:
    spec:
      containers:
      - name: "some-container"
        image: "imgtag"
        volumeMounts:
          - name: app-secrets
            mountPath: /app/secrets
      volumes:
      - name: app-secrets
        secret:
          secretName: secret1

secrets.groovy:

def secrets() {
    [
        [type: "fromFile", name: "secret1", key: "private_key.pem", gopassPath: "firstGopassPath"],
        [type: "fromFile", name: "secret2", key: "credentials.txt", gopassPath: "secondGopassPath"]
    ]
}

return this

Когда я добавил задержку (чтобы избежать сбоев), я увидел, что эти файлы просто нигде не смонтированы.

Описание модуля говорит, что:

(это было до обновления клиента kube)

Volumes:
  app-secrets:
  <unknown>

(это было после обновления клиента kube до версии 1.18 с 1.12.1)

Volumes:
  app-secrets:
    Type:  Projected (a volume that contains injected data from multiple sources)

- ОБНОВЛЕНИЕ -

kubectl get secret secret1 -o yaml

apiVersion: v1
data:
  old_private_key.pem: somekey
kind: Secret
metadata:
  creationTimestamp: "2020-04-22T15:31:43Z"
  name: jpd-sales-force-private-key
  namespace: default
  resourceVersion: "137791226"
  selfLink: /api/v1/namespaces/default/secrets/secret1
  uid: a4f71c36-81d0-44f8-87a0-a6100c6f9f01
type: Opaque

(примечание: я пытался переименовать файл - оригинал был private_key.pem, здесь: old_private_key.pem, и private_key.pem в исходном сообщении имеет настоящее новое имя, поэтому похоже, что новое имя файла не появилось).

Кто-нибудь из вас знает, что может быть не так?

1 Ответ

1 голос
/ 16 июля 2020

Решение моей проблемы:

  1. Удаление старого секрета (исправлено изменение имени файла): kubectl delete secret secret1
  2. имя secret1 и secret2 были одним уровень слишком низкий. Улучшенная версия:
apiVersion: apps/v1
kind: Deployment
metadata:
 name: "test-app"
spec:
 template:
   spec:
     containers:
     - name: "some-container"
       image: "imgtag"
       volumeMounts:
       - name: app-secrets
         mountPath: /app/secrets
     volumes:
     - name: app-secrets
       projected:
         sources:
         - secret:
             name: secret1
         - secret:
             name: secret2
...