×

构建镜像时,您可能需要在以下情况下定义身份验证

  • 向容器注册表进行身份验证

  • 从 Git 拉取源代码

身份验证通过定义存储所需敏感数据的密钥来完成。

构建密钥注释

您可以向构建密钥添加注释 build.shipwright.io/referenced.secret: "true"。基于此注释,构建控制器会在创建、更新或删除等事件触发构建密钥时采取协调操作。以下示例显示了带注释密钥的使用方法

apiVersion: v1
data:
  .dockerconfigjson: <pull_secret> (1)
kind: Secret
metadata:
  annotations:
    build.shipwright.io/referenced.secret: "true" (2)
  name: secret-docker
type: kubernetes.io/dockerconfigjson
1 Base64 编码的拉取密钥。
2 build.shipwright.io/referenced.secret 注释的值设置为 true

此注释过滤掉构建实例中未引用的密钥。例如,如果密钥没有此注释,即使触发了密钥事件,构建控制器也不会协调。在事件触发时进行协调允许构建控制器重新触发构建配置上的验证,帮助您了解是否缺少依赖项。

Git 仓库身份验证

您可以为 Git 仓库定义以下类型的身份验证

  • 基本身份验证

  • 安全 Shell (SSH) 身份验证

您也可以在 Build CR 中使用这两种身份验证类型配置 Git 密钥。

基本身份验证

使用基本身份验证,您必须配置 Git 仓库的用户名和密码。以下示例显示了 Git 基本身份验证的使用方法

apiVersion: v1
kind: Secret
metadata:
  name: secret-git-basic-auth
  annotations:
    build.shipwright.io/referenced.secret: "true"
type: kubernetes.io/basic-auth (1)
stringData: (2)
  username: <cleartext_username>
  password: <cleartext_password>
1 Kubernetes 密钥的类型。
2 以明文存储用户名和密码的字段。

SSH 身份验证

使用 SSH 身份验证,您必须配置 Tekton 注释以指定要使用的 Git 仓库提供程序的主机名。例如,GitHub 为 github.com,GitLab 为 gitlab.com

以下示例显示了 Git SSH 身份验证的使用方法

apiVersion: v1
kind: Secret
metadata:
  name: secret-git-ssh-auth
  annotations:
    build.shipwright.io/referenced.secret: "true"
type: kubernetes.io/ssh-auth (1)
data:
  ssh-privatekey: |   (2)
    # Insert ssh private key, base64 encoded
1 Kubernetes 密钥的类型。
2 用于向 Git 进行身份验证的 SSH 密钥的 Base64 编码。您可以使用 base64 ~/.ssh/id_rsa.pub 命令生成此密钥,其中 ~/.ssh/id_rsa.pub 表示通常用于向 Git 进行身份验证的密钥的默认位置。

Git 密钥的使用

在相关命名空间中创建密钥后,您可以在 Build 自定义资源 (CR) 中引用它。您可以使用这两种身份验证类型配置 Git 密钥。

以下示例显示了使用 SSH 身份验证类型的 Git 密钥

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-golang-build
spec:
  source:
    git:
      url: git@gitlab.com:userjohn/newtaxi.git
      cloneSecret: secret-git-ssh-auth

以下示例显示了使用基本身份验证类型的 Git 密钥

apiVersion: shipwright.io/v1beta1
kind: Build
metadata:
  name: buildah-golang-build
spec:
  source:
    git:
      url: https://gitlab.com/userjohn/newtaxi.git
      cloneSecret: secret-git-basic-auth

容器注册表身份验证

要将镜像推送到私有容器注册表,您必须在相应的命名空间中定义一个密钥,然后在您的 Build 自定义资源 (CR) 中引用它。

步骤
  1. 运行以下命令以生成密钥

    $ oc --namespace <namespace> create secret docker-registry <container_registry_secret_name> \
      --docker-server=<registry_host> \ (1)
      --docker-username=<username> \ (2)
      --docker-password=<password> \ (3)
      --docker-email=<email_address>
    1 <registry_host> 值表示此格式的 URL:https://<registry_server>/<registry_host>
    2 <username> 值是用户 ID。
    3 <password> 值可以是您的容器注册表密码或访问令牌。
  2. 运行以下命令以注释密钥

    $ oc --namespace <namespace> annotate secrets <container_registry_secret_name> build.shipwright.io/referenced.secret='true'
  3. 在您的 Build CR 中将 spec.output.pushSecret 字段的值设置为密钥名称

    apiVersion: shipwright.io/v1beta1
    kind: Build
    metadata:
      name: buildah-golang-build
      # ...
      output:
        image: <path_to_image>
        pushSecret: <container_registry_secret_name>

基于角色的访问控制

发行版部署 YAML 文件包含两个集群范围的角色,用于使用 Builds 对象。以下角色默认安装

  • shpwright-build-aggregate-view:授予您对 Builds 资源(例如 BuildStrategyClusterBuildStrategyBuildBuildRun)的读取访问权限。此角色聚合到 Kubernetes view 角色。

  • shipwright-build-aggregate-edit:授予您对命名空间级别配置的构建资源的写入权限。构建资源包括BuildStrategyBuildBuildRun。所有ClusterBuildStrategy资源都具有读取权限。此角色会聚合到 Kubernetes 的editadmin角色。

只有集群管理员才能对ClusterBuildStrategy资源进行写入操作。您可以通过创建具有这些权限的单独 Kubernetes ClusterRole角色并将该角色绑定到相应的用户来更改此设置。