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: ""
注意:并非总是如此。它实际上可以再次改变。在那些日子里,你必须对它进行编码,然后你不能,然后再...
在 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
andstringData
. Thedata
field is used to store arbitrary data, encoded using base64. ThestringData
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: ""
注意:并非总是如此。它实际上可以再次改变。在那些日子里,你必须对它进行编码,然后你不能,然后再...