Satellite 클러스터에서 글로벌 풀 시크릿 업데이트

Satellite 클러스터를 설정한 후, quay.io 또는 icr.io 이외의 프라이빗 컨테이너 레지스트리에서 가져오도록 클러스터의 글로벌 풀 시크릿을 업데이트할 수 있습니다. 예를 들어 Cloud Pak 제목이 지정된 레지스트리(cp.icr.io) 또는 자체 비공개 레지스트리에서 이미지를 가져올 수 있습니다.

Satellite 클러스터에서 글로벌 풀 시크릿을 업데이트하는 두 가지 방법이 있습니다.

글로벌 가져오기 시크릿 업데이트.
유지보수할 클러스터가 하나 이상 있는 경우 이 방법을 사용하십시오. 시크릿을 적용할 각 클러스터에 대해 이러한 단계를 반복해야 합니다.
Satellite config 를 사용하여 글로벌 풀 시크릿 업데이트
여러 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. 파드가 실행 중인지 확인합니다.
    oc get daemonset -n kube-system update-docker-config
    

Satellite 구성을 사용하여 글로벌 풀 시크릿 업데이트

Satellite 구성을 사용하여 Satellite 클러스터 및 클러스터 그룹에 글로벌 풀 시크릿을 적용하려면 다음 단계를 완료하십시오.

  1. Satellite config를 활성화해야 합니다.

  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 콘솔에서 구성 및 구독을 보고 관리할 수도 있습니다.