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 Entitled Registry 的 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 Entitled Registry 的 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 選項中,指定「位置」的 受管理來源 區域,例如 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 主控台檢視及管理您的配置和訂閱。