argocd-secret 的值进一步编码为 base64

The value of argocd-secret is further encoded to base64

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

在那种情况下,虽然我使用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 编码的东西要进一步编码。 我要请人帮忙。

谢谢。

我转载了你的案例,看起来它没有被 kustomize 进一步编码,而是被 kubectl 进一步编码(或者被 kubectl 客户端本身或由 kube-apiserver 执行例如 kubectl apply 命令请求的操作)。

并且 here 你可以找到一个片段来阐明为什么会发生这种情况:

The Secret contains two maps: data and stringData. The data field is used to store arbitrary data, encoded using base64. The stringData field is provided for convenience, and allows you to provide secret data as unencoded strings.

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

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

实际上是暗控者对字符串进行了编码。因此,您不能将编码字符串传递到 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: ""

注意:并非总是如此。它实际上可以再次改变。在那些日子里,你必须对它进行编码,然后你不能,然后再...