在带有命名空间的 YML 中指定一个秘密
Specify a secret in YML WITH a namespace
示例有:
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
(注意我在元数据下添加了命名空间声明)
我收到这个错误:
Error validating data:
[ValidationError(Pod.spec.containers[1].env[2].valueFrom.secretKeyRef):
unknown field "namespace" in io.k8s.api.core.v1.SecretKeySelector,
ValidationError(Pod.spec.containers[1].env[6].valueFrom.secretKeyRef):
unknown field "namespace" in io.k8s.api.core.v1.SecretKeySelector];
如果我取出名称空间(在 secretKeyRef 下)....pod 失败...
Warning Failed 2s (x8 over 1m) kubelet, minikube Error:
secret "mysecret" not found
是的,我的秘密在命名空间中:
kubectl get secrets --namespace mycustomnamespace
NAME TYPE DATA AGE
default-token-55bzp kubernetes.io/service-account-token 3 10m
mysecret Opaque 2 10m
追加:(分辨率)
这是我的错误。在 Vasily 的回答下查看我的评论。
但基本上,魔术酱是下面的 yml....
metadata:
name: secret-env-pod
namespace: mycustomnamespace
上面的 yml 应该 "drive" 其余配置 (yml) 的命名空间(也就是设置命名空间的范围)....
(如果你是这个问题的未来 reader,请仔细检查你的所有内容是否都在正确的命名空间下。所有正常的 "get" 语句都需要使用 -n(又名--namespace) 作为一部分。
例子
kubectl get pods
以上只会得到"default"下的pods。
你必须做
kubectl get pods --namespace mycustomnamespace
只需从 pod secretKeyRef 定义中删除 namespace: mycustomnamespace
。
你的秘密创建命令也应该是这样的:
kubectl --namespace=mycustomnamespace create secret generic mysecret --from-literal=passwordkey="abc123" --from-literal=usernamekey="mememe"
试试这个 你可以 运行 你的 pod
kubectl apply -f podconfigfile.yaml -n mycustomnamespace
这将 运行 同一个命名空间中的 pod 并在创建秘密时找到秘密
如果出现任何错误,则检查具有机密的命名空间和命名空间的专有名称。
检查命名空间中的秘密:
kubectl get secret -n mycustomnamespace
示例有:
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
(注意我在元数据下添加了命名空间声明)
我收到这个错误:
Error validating data: [ValidationError(Pod.spec.containers[1].env[2].valueFrom.secretKeyRef): unknown field "namespace" in io.k8s.api.core.v1.SecretKeySelector, ValidationError(Pod.spec.containers[1].env[6].valueFrom.secretKeyRef): unknown field "namespace" in io.k8s.api.core.v1.SecretKeySelector];
如果我取出名称空间(在 secretKeyRef 下)....pod 失败...
Warning Failed 2s (x8 over 1m) kubelet, minikube Error: secret "mysecret" not found
是的,我的秘密在命名空间中:
kubectl get secrets --namespace mycustomnamespace
NAME TYPE DATA AGE
default-token-55bzp kubernetes.io/service-account-token 3 10m
mysecret Opaque 2 10m
追加:(分辨率)
这是我的错误。在 Vasily 的回答下查看我的评论。
但基本上,魔术酱是下面的 yml....
metadata:
name: secret-env-pod
namespace: mycustomnamespace
上面的 yml 应该 "drive" 其余配置 (yml) 的命名空间(也就是设置命名空间的范围)....
(如果你是这个问题的未来 reader,请仔细检查你的所有内容是否都在正确的命名空间下。所有正常的 "get" 语句都需要使用 -n(又名--namespace) 作为一部分。
例子
kubectl get pods
以上只会得到"default"下的pods。
你必须做
kubectl get pods --namespace mycustomnamespace
只需从 pod secretKeyRef 定义中删除 namespace: mycustomnamespace
。
你的秘密创建命令也应该是这样的:
kubectl --namespace=mycustomnamespace create secret generic mysecret --from-literal=passwordkey="abc123" --from-literal=usernamekey="mememe"
试试这个 你可以 运行 你的 pod
kubectl apply -f podconfigfile.yaml -n mycustomnamespace
这将 运行 同一个命名空间中的 pod 并在创建秘密时找到秘密
如果出现任何错误,则检查具有机密的命名空间和命名空间的专有名称。
检查命名空间中的秘密:
kubectl get secret -n mycustomnamespace