在YML中使用命名空间指定机密

时间:2019-05-08 13:17:49

标签: kubernetes kubectl

该示例具有:

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

2 个答案:

答案 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