如何使用Client-Go创建Docker Secret

问题描述

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

    "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},}