В примере есть:
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