2

假设我知道以下秘密参数:

"name":            "aaa",
"docker-server":   "a.b.com",
"docker-username": "aaa",
"docker-password": "aaaa",
"docker-email":    "aaa@gmail.com"

然后我想用client-go创建一个pull-image secret

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)

我的问题是,如何将秘密参数转换为秘密数据?

4

1 回答 1

2

来自文档

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",
        Namespace: "aaaaaa",
    },
    Type: "kubernetes.io/dockerconfigjson",
    StringData: map[string]string{".dockerconfigjson": secretData},
}
于 2020-11-09T22:55:24.503 回答