修改系统制品

系统制品支持 Google Distributed Cloud (GDC) 经过网闸隔离的设备系统,并管理 GDC 部署。GDC 私有 Artifact Registry 存储系统制品。系统制品有多种格式,包括但不限于:

  • 适用于 Anthos、KubeVirt 和 GDC 受管理服务的容器映像
  • 操作系统 (OS) 映像
  • 固件格式
  • 黄金虚拟机 (VM) 模板
  • Helm 图表

Artifact Registry 以安全、可伸缩且防篡改的方式参与各种 GDC 系统操作,例如安装、升级和资源生命周期。

准备工作

如需修改系统制品,您必须获得诊断访问权限。诊断访问权限是一种特权访问模式,用于在客户遇到问题时安全地为其提供支持。您必须创建支持请求,才能获得此访问权限。

上传 Docker 映像

如需修改系统制品,您必须上传新的 Docker 映像。上传方法取决于您将容器映像推送到以下哪个注册表:

以下部分展示了这两种注册表的上传说明。

引导机器中的 Artifact Registry

如需在引导机器中将容器映像上传到 Artifact Registry,请完成以下步骤:

  1. 确保您拥有已修正重大问题的修改版 Docker 映像。

  2. 将新映像转移到隔网环境中的引导节点。

  3. 登录引导节点。

  4. 在引导时在引导机器中找到 Artifact Registry 的地址,并将其设置为 REGISTRY_IP 环境变量:

    REGISTRY=$(kubectl get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}')
    
    REGISTRY_IP=${REGISTRY#https://}
    
  5. 检索用于访问 Artifact Registry 的凭据。使用以下命令检索管理员账号和密码:

    ADMIN_PASS=$(kubectl -n harbor-system get secret harbor-admin \
        -o jsonpath="{.data.secret}" | base64 -d)
    
  6. 登录 Artifact Registry:

    docker login $REGISTRY_IP -u admin -p $ADMIN_PASS
    

    系统会输出 Login Succeeded 消息,以验证是否已成功登录 Artifact Registry。

  7. 标记新映像:

    docker image tag CONTAINER_IMAGE_URL \
        $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

    替换以下内容:

    • CONTAINER_IMAGE_URL:本地容器映像网址,例如 gcr.io/repository/image:tag
    • PROJECT_NAME:Artifact Registry 项目名称。
    • IMAGE_NAME:容器映像名称。
    • TAG:容器映像标记。
  8. 将新映像推送到 Artifact Registry:

    docker image push $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

管理员集群中的 Artifact Registry

如需将容器映像上传到管理员集群上的 Artifact Registry,请完成以下步骤。

  1. 确保您拥有已修正重大问题的修改版 Docker 映像。

  2. 将新映像转移到具有 root 访问权限且包含 root kubeconfig 文件的节点,然后转移到隔离环境中的管理员集群。

  3. 将管理员集群 kubeconfig 文件路径导出为环境变量:

    export ADMIN_CLUSTER_KUBECONFIG=KUBECONFIG_FILE_PATH
    

    KUBECONFIG_FILE_PATH 替换为 kubeconfig 文件的路径。

  4. 找到集群内 Artifact Registry 地址,并将其设置为 REGISTRY_IP 环境变量:

    REGISTRY=$(kubectl --kubeconfig $ADMIN_CLUSTER_KUBECONFIG get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}')
    
    REGISTRY_IP=${REGISTRY#https://}
    
  5. 确保 REGISTRY_IP 包含有效的网址,例如 10.200.0.36:10443

    echo ${REGISTRY_IP}
    
  6. 检查证书授权机构 (CA) 证书是否存在:

    ls -al /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    

    如果证书不存在,请创建并配置它:

    mkdir -p /etc/docker/certs.d/${REGISTRY_IP}/
    
    chmod 755  /etc/docker/certs.d/${REGISTRY_IP}/
    
    echo $(kubectl get secret harbor-cert-secret -n istio-system -o jsonpath='{.data.ca\.crt}' --kubeconfig $ADMIN_CLUSTER_KUBECONFIG) | openssl base64 -A -d >  /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    
    chmod 755  /etc/docker/certs.d/${REGISTRY_IP}/ca.crt
    
  7. 检索用于访问 Artifact Registry 的凭据。使用以下命令检索管理员账号和密码:

    ADMIN_PASS=$(kubectl --kubeconfig $ADMIN_CLUSTER_KUBECONFIG \
        -n harbor-system get secret harbor-admin \
        -o jsonpath="{.data.secret}" | base64 -d)
    
  8. 登录 Artifact Registry:

    docker login $REGISTRY_IP -u admin -p $ADMIN_PASS
    

    系统会输出 Login Succeeded 消息,以验证是否已成功登录 Artifact Registry。

  9. 标记新映像:

    docker image tag CONTAINER_IMAGE_URL \
        $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG
    

    替换以下内容:

    • CONTAINER_IMAGE_URL:本地容器映像网址,例如 gcr.io/repository/image:tag
    • PROJECT_NAME:Artifact Registry 项目名称。
    • IMAGE_NAME:容器映像名称。
    • TAG:容器映像标记。
  10. 将新映像推送到 Artifact Registry:

    docker image push $REGISTRY_IP/PROJECT_NAME/IMAGE_NAME:TAG