将输入密码安装到OpenShift构建配置中
我有一个OpenShift 3.9构建配置将输入密码安装到OpenShift构建配置中,openshift,Openshift,我有一个OpenShift 3.9构建配置my_bc和一个类型为kubernetes.io/ssh auth的secretmy_secret。秘密是这样创造的: oc create secret generic my_secret \ --type=kubernetes.io/ssh-auth \ --from-file=key 我已将其作为源代码机密安装到my_bc中,并且oc get bc/my_bc-o yaml揭示了此规范: source: contextDir: ...
my_bc
和一个类型为kubernetes.io/ssh auth
的secretmy_secret
。秘密是这样创造的:
oc create secret generic my_secret \
--type=kubernetes.io/ssh-auth \
--from-file=key
我已将其作为源代码机密安装到my_bc
中,并且oc get bc/my_bc-o yaml
揭示了此规范:
source:
contextDir: ...
git:
uri: ...
sourceSecret:
name: my_secret
type: Git
因此,OpenShift builder可以从我的私有Git存储库中提取图像,并使用Docker策略生成图像,这在某种意义上已经很有效了
我现在想将my_secret
也作为输入密码添加到my_bc
。我的理解是,这不仅允许构建器使用它(作为源代码机密),还允许构建中的其他组件获取它(作为输入机密)。例如,对于Docker策略,它将存在于WORKDIR
中
通过在创建生成配置时添加输入机密的示例对此进行了说明:
oc new-build \
openshift/nodejs-010-centos7~https://github.com/openshift/nodejs-ex.git \
--build-secret secret-npmrc
现在,相应的规范引用了secrets
(不是:sourceSecret
)下的秘密,大概是因为它现在是一个输入秘密(不是:sourceSecret)
oc set build secret
显然允许使用命令行参数--source
(以及--push
/--pull
)向生成配置添加源机密(以及推送和拉取机密--这些用于与容器注册表交互),但是输入机密呢?我还没有发现
所以我有这些问题:
my_secret
作为输入密码添加到现有生成配置(如my_bc
)中Dockerfile
可以在哪个路径下获取存储在my_secret
中的私钥这个程序现在对我有效(感谢@GrahamDumpleton的指导):
get bc/my_bc-o jsonpath='{.spec.source.sourceSecret}'
reportsmap[name:my_secret]
(没有路径).spec.source.secrets
处添加输入密码以生成配置,YAML对应于oc explain bc.spec.source.secrets
:oc edit bc/my_bc
oc get bc/my_bc-o jsonpath='{.spec.source.secrets}'
报告[map[destinationDir:secret:map[name:my_secret]]]
oc descripe bc/my_bc|grep“Source Secret:”
reportsSource Secret:my_Secret
(无路径)和oc descripe bc/my_bc|grep“Build Secrets:
reportsBuild Secrets:my_Secret->Secret
Dockerfile
内部机密:COPY secret/ssh privatekey secret/my_secret
,运行chmod 0640 secret/my_secret
;必要时调整ssh privatekey
(如oc get secret/my_secret-o jsonpath='{.data}'| sed-ne的/^map\[\(.*):.*$/\1/p'
)oc exec-it-c my_db file/secret/my_secret
报告/secret/my_secret:PEM RSA私钥
(图像的WORKDIR
为//code>)
在对问题的评论中,它提到了修补BuildConfig。下面是一个适用于v3.11.0的修补程序:
$cat patch.json
{
"spec": {
"source": {
"secrets": [
{
"secret": {
"name": "secret-npmrc"
},
"destinationDir": "/etc"
}
]
}
}
}
$ oc patch -n your-eng bc/tag-realworld -p "$(<patch.json)"
buildconfig "tag-realworld" patched
$cat patch.json
{
“规格”:{
“来源”:{
“秘密”:[
{
“秘密”:{
“名称”:“秘密npmrc”
},
“destinationDir”:“/等”
}
]
}
}
}
$oc补丁-n您的英文bc/tag realworld-p“$(使用--build secret
时,还应指定要添加的路径。例如oc new buildhttps://github.com/openshift/ruby-hello-world --生成机密npmrc:.npmrc
。如果编辑现有配置,您需要使用destinationDir
。运行oc explain bc.spec.source.secrets
查看字段。@GrahamDumpletonThx,我再次尝试过(请参阅更新的Q),但仍在努力理解如何将输入机密(bc.spec.source.secrets
)添加到现有的构建配置(即w/ooc new build
)。我必须oc edit bc/my_bc
?我下一步会尝试。命令oc set build secret--source bc/my_bc secret:my_secret
是错误的。参数只是secret name。这仅用于提取源代码。如果使用该实际值,则生成pod将永远不会启动,因为它引用了有效的机密。可能投诉无效字符。至于COPY secret/my_secret/my_secret
,该文件不会被称为secret/my_secret
。在secret
目录中,文件将被命名为与密钥中的密钥名称相对应的名称。复制整个secret
目录,然后查看其中的内容。
$cat patch.json
{
"spec": {
"source": {
"secrets": [
{
"secret": {
"name": "secret-npmrc"
},
"destinationDir": "/etc"
}
]
}
}
}
$ oc patch -n your-eng bc/tag-realworld -p "$(<patch.json)"
buildconfig "tag-realworld" patched