该示例具有:
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下).... pod失败..
警告失败2s(x8超过1m)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 :(分辨率)
这是我的错误。在Vasily的回答下检查我的评论。
但是,基本上,魔术酱是下面的yml。...
metadata:
name: secret-env-pod
namespace: mycustomnamespace
上述yml应该“驱动”其余配置(yml)的名称空间(也就是设置名称空间的范围)...。
(如果您将来是这个问题的读者,请仔细检查两次,以确保所有内容都位于正确的名称空间下。所有正常的“ get”语句都需要使用-n(即--namespace)作为一部分。
示例
kubectl get pods
以上内容只会将Pod设置为“默认”。
你必须做
kubectl get pods --namespace mycustomnamespace
答案 0 :(得分:3)
只需从pod secretKeyRef定义中删除namespace: mycustomnamespace
。
此外,您的秘密创建命令应如下所示:
kubectl --namespace=mycustomnamespace create secret generic mysecret --from-literal=passwordkey="abc123" --from-literal=usernamekey="mememe"
答案 1 :(得分:1)
尝试此操作您可以运行您的pod
kubectl apply -f podconfigfile.yaml -n mycustomnamespace
这将在相同的名称空间中运行pod并在创建秘密的情况下找到秘密
如果出现任何错误,请检查具有秘密和名称空间正确名称的名称空间。
检查名称空间中的机密:
kubectl get secret -n mycustomnamespace