Openshift / OKD-如何为Docker机密模板

时间:2019-03-29 15:49:04

标签: openshift okd

作为具有许多参数化Openshift模板的管理员,我正在努力在kubernetes.io/dockerconfigjson或kubernetes.io/dockercfg类型的模板中创建参数化SECRET对象,以便将秘密用于docker pull。

挑战:对于正常的dockerconfigjson模板设置,一切都以JSON格式进行base64之前的编码,并且不确定如何更改。

Ask:如何创建一个使用参数$ {DOCKER_USER},$ {DOCKER_PASSWORD},$ {DOCKER_SERVER}和$ {DOCKER_EMAIL}的SECRET模板,然后创建可用于从中提取docker映像的实际机密。私有/安全的Docker注册表。

这是通过将命令行技术放入gitlab / github中存储的模板文件中以具有gitOps样式部署模式来替换命令行“ oc创建秘密docker-registry ....”技术。

谢谢!

1 个答案:

答案 0 :(得分:3)

可以在Using Secrets部分下的文档中找到docker配置密钥的格式(或通过oc export secret/mysecret在您的集群中找到)。

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工具应具有超过原始用户名/密码字符串执行此功能的能力。