IBM Cloud Docs
在 Satellite 集群中更新全局拉取私钥

在 Satellite 集群中更新全局拉取私钥

设置 Satellite 集群后,您可以更新集群中的全局拉取私钥以从除 quay.ioicr.io 以外的专用容器注册表拉取。 例如,您可能希望从 Cloud Pak Entitled Registry (cp.icr.io) 或您自己的专用注册表中提取映像。

有两种方法可更新 Satellite 集群中的全局拉取私钥。

更新全局拉取私钥
如果要维护一个或多个集群,请使用此方法。 必须对要应用私钥的每个集群重复这些步骤。
使用 Satellite 配置更新全局拉取私钥
如果您维护多个 Satellite 集群和集群组,请使用此方法。 通过使用 Satellite 配置,可以在 Satellite 集群和集群组中应用私钥更改。

更新全局拉动秘钥

完成以下步骤以更新 Satellite 集群中的全局拉取私钥。

  1. 创建包含要使用的注册表凭证的私钥。
    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=USERNAME \
    --docker-password=PASSWORD \
    --namespace kube-system
    
    用于使用 Cloud Pak 授权注册表的示例 create secret 命令。
    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  2. 创建 DaemonSet 以在所有工作程序节点上应用私钥。
    cat << EOF | oc create -f -
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: update-docker-config
      namespace: kube-system
      labels:
        app: update-docker-config
    spec:
      selector:
        matchLabels:
          name: update-docker-config
      template:
        metadata:
          labels:
            name: update-docker-config
        spec:
          initContainers:
            - command: ["/bin/sh", "-c"]
              args:
                - >
                  echo "Checking if RHEL or RHCOS host";
                  [[ -s /docker-config/.docker/config.json  ]] && CONFIG_PATH=/docker-config/.docker || CONFIG_PATH=/docker-config/root/.docker;
                  echo "Backing up or restoring config.json";
                  [[ -s \$CONFIG_PATH/config.json ]] && cp \$CONFIG_PATH/config.json \$CONFIG_PATH/config.json.bak || cp \$CONFIG_PATH/config.json.bak \$CONFIG_PATH/config.json;
                  echo "Merging secret with config.json";
                  /host/usr/bin/jq -s '.[0] * .[1]' \$CONFIG_PATH/config.json /auth/.dockerconfigjson > \$CONFIG_PATH/config.tmp;
                  mv \$CONFIG_PATH/config.tmp \$CONFIG_PATH/config.json;
                  echo "Sending signal to reload crio config";
                  pidof crio;
                  kill -1 \$(pidof crio)
              image: icr.io/ibm/alpine:latest
              imagePullPolicy: IfNotPresent
              name: updater
              resources: {}
              securityContext:
                privileged: true
              volumeMounts:
                - name: docker-auth-secret
                  mountPath: /auth
                - name: docker
                  mountPath: /docker-config
                - name: bin
                  mountPath: /host/usr/bin
                - name: lib64
                  mountPath: /lib64
          containers:
            - resources:
                requests:
                  cpu: 0.01
              image: icr.io/ibm/alpine:latest
              name: sleepforever
              command: ["/bin/sh", "-c"]
              args:
                - >
                  while true; do
                    sleep 100000;
                  done
          hostPID: true
          volumes:
            - name: docker-auth-secret
              secret:
                secretName: docker-auth-secret
            - name: docker
              hostPath:
                path: /
            - name: bin
              hostPath:
                path: /usr/bin
            - name: lib64
              hostPath:
                path: /lib64
                hostPathType: Directory
    EOF
    
  3. 验证 pod 是否正在运行。
    oc get daemonset -n kube-system update-docker-config
    

使用 Satellite 配置更新全局拉取私钥

完成以下步骤以使用 Satellite 配置在 Satellite 集群和集群组中应用全局拉取私钥。

  1. 确保启用 Satellite 配置

  2. 将集群添加到集群组

  3. 在其中一个 Satellite 集群中创建私钥。 请注意,稍后将删除此私钥。

    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=USERNAME \
    --docker-password=PASSWORD \
    --namespace kube-system
    

    用于使用 Cloud Pak 授权注册表的示例 create secret 命令。

    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  4. 获取私钥的详细信息。 复制并保存 base64 编码的 dockerconfigjson 部分。

    oc get secret docker-auth-secret -o yaml
    
  5. 删除私钥。

    oc delete secret docker-auth-secret -n kube-system
    
  6. 创建具有注册表凭证的名为 secret.yaml 的配置文件。 粘贴在先前步骤中保存的 base64 编码 dockerconfigjson 部分。

    kind: Secret
    apiVersion: v1
    metadata:
      name: docker-auth-secret
      namespace: kube-system
    data:
      .dockerconfigjson: >-
        BASE64-ENCODED-SECRET
    type: kubernetes.io/dockerconfigjson
    
  7. 创建Satellite配置。 在 --data-location 选项中,指定位置的 受管源 区域。

    ibmcloud sat config create --data-location wdc --name my-config
    
  8. 向配置添加版本。 指定先前创建的 secret.yaml 的文件路径。

    ibmcloud sat config version create --name 1 --config my-config --file-format yaml --read-config /Users/username/Desktop/secret.yaml
    
  9. 创建预订以将 DaemonSet 应用于集群组。

    ibmcloud sat subscription create --name my-subscription --config my-config --group GROUP
    
  10. 将以下 DaemonSet 保存到名为 ds.yaml 的文件中。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: update-docker-config
      namespace: kube-system
      labels:
        app: update-docker-config
    spec:
      selector:
        matchLabels:
          name: update-docker-config
      template:
        metadata:
          labels:
            name: update-docker-config
        spec:
          initContainers:
            - command: ["/bin/sh", "-c"]
              args:
                - >
                  echo "Checking if RHEL or RHCOS host";
                  [[ -s /docker-config/.docker/config.json  ]] && CONFIG_PATH=/docker-config/.docker || CONFIG_PATH=/docker-config/root/.docker;
                  echo "Backing up or restoring config.json";
                  [[ -s \$CONFIG_PATH/config.json ]] && cp \$CONFIG_PATH/config.json \$CONFIG_PATH/config.json.bak || cp \$CONFIG_PATH/config.json.bak \$CONFIG_PATH/config.json;
                  echo "Merging secret with config.json";
                  /host/usr/bin/jq -s '.[0] * .[1]' \$CONFIG_PATH/config.json /auth/.dockerconfigjson > \$CONFIG_PATH/config.tmp;
                  mv \$CONFIG_PATH/config.tmp \$CONFIG_PATH/config.json;
                  echo "Sending signal to reload crio config";
                  pidof crio;
                  kill -1 \$(pidof crio)
              image: icr.io/ibm/alpine:latest
              imagePullPolicy: IfNotPresent
              name: updater
              resources: {}
              securityContext:
                privileged: true
              volumeMounts:
                - name: docker-auth-secret
                  mountPath: /auth
                - name: docker
                  mountPath: /docker-config
                - name: bin
                  mountPath: /host/usr/bin
                - name: lib64
                  mountPath: /lib64
          containers:
            - resources:
                requests:
                  cpu: 0.01
              image: icr.io/ibm/alpine:latest
              name: sleepforever
              command: ["/bin/sh", "-c"]
              args:
                - >
                  while true; do
                    sleep 100000;
                  done
          hostPID: true
          volumes:
            - name: docker-auth-secret
              secret:
                secretName: docker-auth-secret
            - name: docker
              hostPath:
                path: /
            - name: bin
              hostPath:
                path: /usr/bin
            - name: lib64
              hostPath:
                path: /lib64
                hostPathType: Directory
    
  11. 创建Satellite配置。 在 --data-location 选项中,指定位置的 Managed from 区域,例如 wdc

    ibmcloud sat config create --data-location wdc --name my-ds
    
  12. 向配置添加版本。 指定先前创建的 ds.yaml 的文件路径。

    ibmcloud sat config version create --name 1 --config my-ds --file-format yaml --read-config /Users/username/Desktop/ds.yaml
    
  13. 创建预订以将 DaemonSet 应用于集群组。

    ibmcloud sat subscription create --name my-subscription --config my-ds --group GROUP
    
  14. 验证是否在集群中部署了私钥和 DaemonSet。

    oc get secret docker-auth-secret -n kube-system
    
    oc get ds update-docker-config -n kube-system
    

您还可以从 Satellite 控制台查看和管理配置和预订。