【问题标题】:Specify a secret in YML WITH a namespace在带有命名空间的 YML 中指定一个秘密
【发布时间】:2020-03-23 20:51:03
【问题描述】:

例子有:

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

(注意我在元数据下添加了命名空间声明)

我收到此错误:

验证数据时出错: [验证错误(Pod.spec.containers[1].env[2].valueFrom.secretKeyRef): io.k8s.api.core.v1.SecretKeySelector 中的未知字段“命名空间”, 验证错误(Pod.spec.containers[1].env[6].valueFrom.secretKeyRef): io.k8s.api.core.v1.SecretKeySelector]中的未知字段“命名空间”;

如果我取出命名空间(在 secretKeyRef(s) 下).. pod 失败..with

警告 Failed 2s (x8 over 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

追加:(分辨率)

这是我的错误。在 Vasily 的回答下查看我的评论。

但基本上,神奇的是下面的 yml....

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

上面的 yml 应该为其余的配置(yml)“驱动”命名空间(也就是设置命名空间的范围)......

(如果您是这个问题的未来读者,请仔细检查您是否在正确的命名空间下拥有所有内容。所有正常的“get”语句都需要使用 -n(又名 --namespace)作为一部分。

例子

kubectl get pods

以上只会获取“默认”下的 pod。

你必须这样做

kubectl get pods --namespace mycustomnamespace

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    只需从 pod secretKeyRef 定义中删除 namespace: mycustomnamespace

    你的秘密创建命令也应该是这样的:

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

    【讨论】:

    • 我刚刚附加了我的问题文本。当我从 secretKeyRef(s) 下删除命名空间时,我发现没有找到秘密。 :( 。(是的,我会修复秘密创建代码...那是“演示”复制/粘贴错误)。
    • 你能粘贴命令“kubectl -n mycustomnamespace get secret”和“kubectl -n mycustomnamespace get pod”的输出吗?
    • 瓦西里,那个请求……帮我弄明白了。这是我的配置错误。我会将其标记为正确.....未来的读者............正如 Vasily 向我展示的那样......确保使用“-n”对 pod、服务等进行三重检查" 论据。
    【解决方案2】:

    试试这个你可以运行你的 pod

    kubectl apply -f podconfigfile.yaml -n mycustomnamespace
    

    这将在相同的命名空间中运行 pod,如果创建了秘密,则会找到秘密

    如果出现任何错误,则检查名称空间是否具有秘密和名称空间的正确名称。

    检查命名空间中的秘密:

    kubectl get secret -n mycustomnamespace
    

    【讨论】:

    • 为这个“技巧”点赞。我不知道您可以使用 -n 参数运行“应用”。
    • 您可以对任何文件使用 create 和 apply ,最后给出命名空间,以便特定文件配置仅适用于命名空间。
    • 例如创建服务kubectl apply -f service.yaml -n <namespacename>
    猜你喜欢
    • 2021-08-07
    • 2018-02-28
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多