作为一个拥有大量参数化Openshift模板的管理员,我很难在模板中为kubernetes.io/dockerconfigjson或kubernetes.io/dockercfg创建一个参数化的秘密对象,这样就可以将秘密用于docker拉出。
挑战:对于普通的dockerconfigjson模板设置,一切都是用JSON格式编码的,并且不确定如何更改它。
问题:如何创建一个秘密模板,该模板接受参数${DOCKER_USER}、${DOCKER_PASSWORD}、${DOCKER_SERVER}和${DOCKER_EMAIL},然后创建实际的秘密,该秘密可用于从私有/安全的码头注册表中提取码头图像。
这将取代命令行"oc创建秘密坞-注册表.“方法是将它们放入存储在gitlab/github中的模板文件中,使其具有gitOps风格的部署模式。
谢谢!
发布于 2019-03-29 16:26:33
码头配置机密的格式可以在使用秘密部分的文档(或通过使用秘密在集群中找到)中找到。
apiVersion: v1
kind: Secret
metadata:
name: aregistrykey
namespace: myapps
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson:<base64encoded docker-config.json>一种方法是接受模板参数中json文件的预基64编码内容,并将它们填充到数据部分。
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用于模板的模板语言功能不够强大,无法为您编码实际的参数值,因此您无法避免对模板本身之外的username:password对进行编码,但是您的CI/CD工具应该能够使用原始用户名/密码字符串执行此操作。
https://stackoverflow.com/questions/55421059
复制相似问题