将输入密码安装到OpenShift构建配置中

将输入密码安装到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: ...

我有一个OpenShift 3.9构建配置
my_bc
和一个类型为
kubernetes.io/ssh auth
的secret
my_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}'
    reports
    map[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:”
    reports
    Source Secret:my_Secret
    (无路径)和
    oc descripe bc/my_bc|grep“Build Secrets:
    reports
    Build 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/o
    oc 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