问题描述
假设我知道以下秘密参数:
"name": "aaa","docker-server": "a.b.com","docker-username": "aaa","docker-password": "aaaa","docker-email": "[email protected]"
然后我要使用client-go来创建拉取映像的秘密
secret := &corev1.Secret{
ObjectMeta: Metav1.ObjectMeta{
Name: "pull-image-secret",Namespace: "aaaaaa",},Type: "kubernetes.io/dockerconfigjson",Data: map[string][]byte{".dockerconfigjson": []byte(secretData)},}
err = k8sClient.Create(context.Background(),secret)
我的问题是,如何将秘密参数转换为secretData?
解决方法
来自docs:
Secret对象的数据字段必须包含.dockerconfigjson密钥,其中〜/ .docker / config.json文件的内容以base64编码的字符串的形式提供
因此,如果您想使用Data
字段,则需要修改代码以对秘密数据进行base64编码,这样的方法应该起作用:
import b64 "encoding/base64"
...
base64EncodedData := make([]byte,b64.StdEncoding.EncodedLen(len(secretData)))
b64.StdEncoding.Encode(base64EncodedData,[]byte(secretData))
secret := &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "pull-image-secret",Namespace: "aaaaaa",},Type: "kubernetes.io/dockerconfigjson",Data: map[string][]byte{".dockerconfigjson": base64EncodedData},}
否则,您可以尝试使用StringData
字段而不使用base64编码:
secret := &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "pull-image-secret",StringData: map[string]string{".dockerconfigjson": secretData},}