【问题标题】:The value of argocd-secret is further encoded to base64argocd-secret 的值进一步编码为 base64
【发布时间】:2020-06-02 00:12:06
【问题描述】:

在 argocd 中管理机密时,我使用 base64 对 argocd-secret 中的值进行编码并将其设置为 manifest。

在这种情况下,虽然我使用了 kusotomize,构建并应用它,但 base64 编码的秘密将进一步编码为 base64。

$ echo -n "clientid" | base64
Y2xpZW50aWQ=

$ echo -n "clientsecret" | base64
Y2xpZW50c2VjcmV0
---
apiVersion: v1
kind: Secret
metadata:
  name: argocd-secret
type: Opaque
stringData:
  dex.github.clientID: Y2xpZW50aWQ=
  dex.github.clientSecret: Y2xpZW50c2VjcmV0

如果你使用kustomize build构建并检查差异,它看起来像这样

$ kustomize build --load_restrictor none overlays/dev/ap-northeast-1/argocd | k diff -f -

+  dex.github.clientID: WTJ4cFpXNTBhV1E9
+  dex.github.clientSecret: WTJ4cFpXNTBjMlZqY21WMA==

我不明白为什么用 base64 编码的东西会被进一步编码。 我要请人帮忙。

谢谢。

【问题讨论】:

    标签: kubernetes kubernetes-secrets kustomize argocd


    【解决方案1】:

    我复制了您的案例,它看起来不是由 kustomize 而是由 kubectl 进一步编码(由kubectl 客户端本身或由kube-apiserver 执行kubectl apply 命令请求的操作)。

    here,您可以找到一个片段来解释为什么会发生这种情况:

    The Secret 包含两张地图:datastringDatadata 字段是 用于存储任意数据,使用 base64 编码。 stringData 为方便起见提供字段,并允许您提供秘密 数据作为未编码的字符串。

    data 字段用于存储已经使用 base64 编码的数据,当我们应用Secret 时,该字段的值不会进一步编码。但是 stringData 的行为完全不同。它允许您以未编码字符串的形式提供秘密数据,因此在您运行kubectl apply 时会对其进行进一步编码。在您的示例中,您使用 stringData 字段,虽然它包含已编码的数据,但它被视为任何其他字符串,因此会再次编码。

    解决方案:只需在您的Secret 中使用data 而不是stringData 映射,并且您的base64 编码字符串在资源创建期间不会再次编码。

    【讨论】:

      【解决方案2】:

      实际上是秘密控制器对字符串进行编码。因此,您不能将编码字符串传递给 yaml。您需要将其保留为纯文本:

      $ echo -n demo | base64
      ZGVtbw==
      $ echo -n ZGVtbw== | base64
      WkdWdGJ3PT0=
      
      $ kubectl create secret generic demo --from-literal=key=demo
      secret/demo created
      $ kubectl create secret generic demo2 --from-literal=key=ZGVtbw==
      secret/demo2 created
      
      $ kubectl get secret demo demo2 -oyaml
      apiVersion: v1
      items:
      - apiVersion: v1
        data:
          key: ZGVtbw==        <- word demo got encoded
        kind: Secret
        metadata:
          creationTimestamp: "2020-06-04T13:41:27Z"
          name: demo
          namespace: default
          resourceVersion: "10118413"
          selfLink: /api/v1/namespaces/default/secrets/demo
          uid: bc39444c-e4f6-43ba-b151-705e15811831
        type: Opaque
      
      - apiVersion: v1
        data:
          key: WkdWdGJ3PT0=    <- encoded string of demo got encoded further
        kind: Secret
        metadata:
          creationTimestamp: "2020-06-04T13:41:47Z"
          name: demo2
          namespace: default
          resourceVersion: "10118469"
          selfLink: /api/v1/namespaces/default/secrets/demo2
          uid: 2fe63343-06b4-4f47-94cd-9fe8e12fb388
        type: Opaque
      kind: List
      metadata:
        resourceVersion: ""
        selfLink: ""
      

      注意:并不总是这样。它实际上可以再次改变。过去,你必须对其进行编码,然后你不能,然后再次......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-08
        • 1970-01-01
        • 2017-01-02
        • 2014-11-06
        相关资源
        最近更新 更多