Globalen geheimen Schlüssel für Pull-Operationen in Satellite-Clustern aktualisieren

Nachdem Sie einen Satellite-Cluster eingerichtet haben, können Sie das globale Pull-Geheimnis in Ihrem Cluster aktualisieren, um von einer anderen privaten Container-Registry als quay.io oder icr.io zu ziehen. Sie können zum Beispiel Bilder aus der Cloud Pak Entitled Registry (cp.icr.io) oder aus Ihrer eigenen privaten Registry beziehen.

Es gibt zwei Möglichkeiten, den globalen geheimen Pull-Schlüssel in Satellite-Clustern zu aktualisieren.

Globalen geheimen Pull-Schlüssel aktualisieren.
Verwenden Sie diese Methode, wenn Sie einen oder wenige Cluster verwalten müssen. Sie müssen diese Schritte für jeden Cluster wiederholen, auf den der geheime Schlüssel angewendet werden soll.
Globalen geheimen Schlüssel für Pull-Operationen mithilfe der Satellite-Konfiguration aktualisieren.
Verwenden Sie diese Methode, wenn Sie mehrere Satellite-Cluster und Clustergruppen verwalten. Mithilfe der Konfiguration von Satellite können Sie die Änderungen an geheimen Schlüsseln auf Ihre Satellite-Cluster und Clustergruppen anwenden.

Globalen geheimen Schlüssel für Pull-Operationen aktualisieren

Führen Sie die folgenden Schritte aus, um den geheimen Schlüssel für globale Pull-Operationen in Ihrem Satellite-Cluster zu aktualisieren.

  1. Erstellen Sie einen geheimen Schlüssel mit den Berechtigungsnachweisen für die Registry, die Sie verwenden möchten.
    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=USERNAME \
    --docker-password=PASSWORD \
    --namespace kube-system
    
    Beispiel für einen create secret-Befehl zur Verwendung der berechtigten Registry von Cloud Pak.
    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  2. Erstellen Sie ein DaemonSet, um den geheimen Schlüssel auf alle Workerknoten anzuwenden.
    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. Überprüfen Sie, ob die Pods laufen.
    oc get daemonset -n kube-system update-docker-config
    

Globalen geheimen Schlüssel für Pull-Operationen mithilfe der Konfiguration Satellite aktualisieren

Führen Sie die folgenden Schritte aus, um die Konfiguration Satellite zu verwenden, um den globalen geheimen Schlüssel für Pull-Operationen auf Ihre Satellite-Cluster und Clustergruppen anzuwenden.

  1. Stellen Sie sicher, dass Sie Satellite config aktivieren.

  2. Fügen Sie Cluster zu Clustergruppen hinzu.

  3. Erstellen Sie in einem Ihrer Satellite-Cluster einen geheimen Schlüssel. Beachten Sie, dass dieser geheime Schlüssel später gelöscht wird.

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

    Beispiel für einen create secret-Befehl zur Verwendung der berechtigten Registry von Cloud Pak.

    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  4. Informieren Sie sich über die Einzelheiten Ihres Geheimnisses. Kopieren Sie den Abschnitt base64 encoded dockerconfigjson und speichern Sie ihn.

    oc get secret docker-auth-secret -o yaml
    
  5. Löschen Sie den geheimen Schlüssel.

    oc delete secret docker-auth-secret -n kube-system
    
  6. Erstellen Sie eine Konfigurationsdatei mit dem Namen secret.yaml, die Ihre Registry-Berechtigungsnachweise enthält. Fügen Sie den Abschnitt base64 encoded dockerconfigjson ein, den Sie im vorherigen Schritt gespeichert haben.

    kind: Secret
    apiVersion: v1
    metadata:
      name: docker-auth-secret
      namespace: kube-system
    data:
      .dockerconfigjson: >-
        BASE64-ENCODED-SECRET
    type: kubernetes.io/dockerconfigjson
    
  7. Erstellen Sie eine Satellite config. Geben Sie in der Option --data-location die Region Verwaltet von Ihres Standorts an.

    ibmcloud sat config create --data-location wdc --name my-config
    
  8. Fügen Sie Ihrer Konfiguration eine Version hinzu. Geben Sie den Dateipfad zu dem zuvor erstellten secret.yaml an.

    ibmcloud sat config version create --name 1 --config my-config --file-format yaml --read-config /Users/username/Desktop/secret.yaml
    
  9. Erstellen Sie eine Subskription, um das DaemonSet auf eine Clustergruppe anzuwenden.

    ibmcloud sat subscription create --name my-subscription --config my-config --group GROUP
    
  10. Speichern Sie das folgende DaemonSet in einer Datei namens 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. Erstellen Sie eine Satellite config. Geben Sie in der Option --data-location die Region Verwaltet von Ihres Standorts an, z. B. wdc.

    ibmcloud sat config create --data-location wdc --name my-ds
    
  12. Fügen Sie Ihrer Konfiguration eine Version hinzu. Geben Sie den Dateipfad zu dem zuvor erstellten ds.yaml an.

    ibmcloud sat config version create --name 1 --config my-ds --file-format yaml --read-config /Users/username/Desktop/ds.yaml
    
  13. Erstellen Sie eine Subskription, um das DaemonSet auf eine Clustergruppe anzuwenden.

    ibmcloud sat subscription create --name my-subscription --config my-ds --group GROUP
    
  14. Überprüfen Sie, ob der geheime Schlüssel und DaemonSet in Ihren Clustern bereitgestellt werden.

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

Sie können Ihre Konfigurationen und Abonnements auch über die Konsole Satellite einsehen und verwalten.