Укажите секрет в YML с пространством имен - PullRequest
1 голос
/ 08 мая 2019

В примере есть:

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: usernamekey
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: passwordkey
  restartPolicy: Never

выше из:

https://kubernetes.io/docs/concepts/configuration/secret/

Я создал такой секрет:

kubectl --namespace=mycustomnamespace create secret generic mysecret --from-literal=passwordkey="abc123" --from-literal=usernamekey="mememe"

Я понимаю, что вышеуказанные секреты существуют в пространстве имен.

Но если я попробую это сделать:

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
  namespace: mycustomnamespace
spec:
  containers:
  - name: mycontainer
    image: redis
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: usernamekey
            namespace: mycustomnamespace
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: passwordkey
            namespace: mycustomnamespace
  restartPolicy: Never

(обратите внимание, что я добавил объявление пространства имен в метаданных)

Я получаю эту ошибку:

Ошибка при проверке данных: [ValidationError (Pod.spec.containers [1] .env [2] .valueFrom.secretKeyRef): неизвестное поле «пространство имен» в io.k8s.api.core.v1.SecretKeySelector, ValidationError (Pod.spec.containers [1] .env [6] .valueFrom.secretKeyRef): неизвестное поле «пространство имен» в io.k8s.api.core.v1.SecretKeySelector];

Если я вынимаю пространство имен (под secretKeyRef (s)) .... модуль не работает .. с

Предупреждение Failed 2s (x8более 1 м) kubelet, minikube Ошибка: секрет «mysecret» не найден

Да, мои секреты находятся в пространстве имен:

kubectl get secrets --namespace mycustomnamespace

NAME                  TYPE                                  DATA      AGE
default-token-55bzp   kubernetes.io/service-account-token   3         10m
mysecret              Opaque                                2         10m

APPEND: (разрешение)

Это была ошибка на моем рИзобразительное искусство.Посмотрите мой комментарий под ответом Василия.

Но по сути, волшебный соус заключается в том, что нижеследующий yml ....

metadata:
  name: secret-env-pod
  namespace: mycustomnamespace

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

(если вы будущий читатель этого вопроса, дважды и трижды проверьте, что у вас все в правильном пространстве имен.ВСЕ из вас, как правило, в выражениях «get» должны использовать -n (aka --namespace) как часть.

пример

kubectl get pods

, приведенное выше будет получать pods только под «default».

нужно сделать

kubectl get pods --namespace mycustomnamespace

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

Просто удалите namespace: mycustomnamespace из определений pod secretKeyRef.

Также ваша секретная команда создания должна быть такой:

kubectl --namespace=mycustomnamespace create secret generic mysecret --from-literal=passwordkey="abc123" --from-literal=usernamekey="mememe"
1 голос
/ 08 мая 2019

Попробуйте это Вы можете запустить свой модуль

kubectl apply -f podconfigfile.yaml -n mycustomnamespace

Это запустит pod в том же пространстве имен и найдет секрет, если секрет создан

Если будет какая-либо ошибка, проверьте, есть ли у пространства имен секреты и правильное имя пространства имен.

Проверьте секрет в пространстве имен:

kubectl get secret -n mycustomnamespace
...