docker 配置密钥的格式可以在文档(或在集群中通过oc export secret/mysecret
)中的Using Secrets部分找到。
apiVersion: v1
kind: Secret
metadata:
name: aregistrykey
namespace: myapps
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson:<base64encoded docker-config.json>
一种方法是在模板参数中接受 json 文件的 pre-based64 编码内容并将它们填充到数据部分中。
apiVersion: v1
kind: Secret
metadata:
name: aregistrykey
namespace: myapps
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson:${BASE64_DOCKER_JSON}
另一种方法是使用秘密对象的 stringData 字段。如同一页所述:
stringData 映射中的条目将转换为 base64,然后该条目将自动移动到数据映射中。该字段是只写的;该值将仅通过数据字段返回。
apiVersion: v1
kind: Secret
metadata:
name: aregistrykey
namespace: myapps
type: kubernetes.io/dockerconfigjson
stringData:
.dockerconfigjson:${REGULAR_DOCKER_JSON}
.dockerconfigjson 键的实际值的格式与文件的内容相同.docker/config.json
。因此,在您的特定情况下,您可能会执行以下操作:
apiVersion: v1
kind: Secret
metadata:
name: aregistrykey
namespace: myapps
type: kubernetes.io/dockerconfigjson
stringData:
.dockerconfigjson:'{"auths": {"${REGISTRY_URL}": {"auth": "${BASE64_USERNAME_COLON_PASSWORD}"}}}'
不幸的是,OpenShift 用于模板的模板语言不够强大,无法为您对实际参数值进行 base64 编码,因此您无法完全避免username:password
在模板本身之外对这对进行编码,但您的 CI/CD 工具应该是能够使用原始用户名/密码字符串执行此操作。