비공개 레지스트리에 인증하도록 노드 구성

워커 노드가 Artifact Registry를 비롯한 비공개 레지스트리를 사용할 수 있도록 Google Distributed Cloud 클러스터를 구성할 수 있습니다. 노드 수준 비공개 레지스트리는 이미지 가져오기 및 관련 보안에 대한 제어 수준을 높이기 위해 워크로드에 사용하도록 의도되었습니다. 이 문서에 설명된 대로 비공개 레지스트리를 사용하여 클러스터를 구성하면 Google Distributed Cloud가 그에 따라 컨테이너 구성을 업데이트합니다. 클러스터가 구성되면 포드 사양에서 imagePullSecrets를 지정하지 않고도 적격 노드의 모든 포드에서 레지스트리를 사용할 수 있습니다.

이 기능은 클러스터 수명 주기 중 언제든지 사용 설정하거나 중지할 수 있습니다.

다음 목록에는 버전별로 이 기능의 출시 단계가 나와 있습니다.

기본 요건

1.30 이상

이 GA 기능을 사용하려면 클러스터가 다음 요구사항을 충족해야 합니다.

  • 클러스터 버전이 1.30 이상이어야 합니다.
  • 노드 풀 버전은 1.29 이상이어야 합니다(1.30 클러스터는 1.28 버전의 노드 풀을 가질 수 있지만, 이 기능은 1.29 이상의 노드 풀에서만 작동합니다).
  • 이 기능은 다음 표와 같이 사용자 클러스터 및 워커 노드 풀이 있는 자체 관리형(하이브리드 및 독립형) 클러스터를 위한 기능입니다.

    배포 모델 지원되는 클러스터 유형
    관리자 및 사용자 클러스터 배포

    관리자 클러스터

    사용자 클러스터 1

    사용자 클러스터 2

    하이브리드 클러스터 배포

    하이브리드 클러스터

    사용자 클러스터 1

    사용자 클러스터 2

    독립형 클러스터 배포

    독립형 클러스터

1.29

미리보기 기능을 사용하려면 클러스터가 다음 요구사항을 충족해야 합니다.

  • 클러스터 버전이 1.29 이상이어야 합니다.
  • 노드 풀 버전은 1.29여야 합니다. 모든 노드 풀이 1.29 버전일 필요는 없지만, 이 기능은 1.29 버전의 노드 풀에서만 작동합니다.
  • 클러스터에 preview.baremetal.cluster.gke.io/private-registry: "enable" 미리보기 기능 주석이 있어야 합니다.
  • 이 기능은 다음 표와 같이 사용자 클러스터 및 워커 노드 풀이 있는 자체 관리형(하이브리드 및 독립형) 클러스터를 위한 기능입니다.

    배포 모델 지원되는 클러스터 유형
    관리자 및 사용자 클러스터 배포

    관리자 클러스터

    사용자 클러스터 1

    사용자 클러스터 2

    하이브리드 클러스터 배포

    하이브리드 클러스터

    사용자 클러스터 1

    사용자 클러스터 2

    독립형 클러스터 배포

    독립형 클러스터

비공개 레지스트리의 자체 관리형 클러스터 구성

노드 수준 비공개 레지스트리를 사용하도록 독립형 또는 하이브리드 클러스터를 구성하려면 다음 단계를 따르세요.

  1. 클러스터 구성 파일을 수정하여 사용자 인증 정보 섹션에 privateRegistries 블록을 추가합니다.

    ---
    gcrKeyPath: baremetal/gcr.json
    sshPrivateKeyPath: .ssh/id_rsa
    ...
    privateRegistries:
      - host: REGISTRY_HOST
        caCertPath: CA_CERT_PATH
        pullCredentialConfigPath: CREDENTIALS_FILE_PATH
    ...
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-hybrid-basic
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: hybrid-basic
      namespace: cluster-hybrid-basic
      annotations:
        preview.baremetal.cluster.gke.io/private-registry: "enable" # Version 1.29 clusters only
        ...
    spec:
      type: hybrid
      ...
    

    다음을 바꿉니다.

    • REGISTRY_HOST: 비공개 레지스트리 및 포트의 도메인 이름 또는 IP 주소. 예를 들면 10.200.0.2:5007입니다.

    • CA_CERT_PATH: CA 인증서 파일(서버 루트 CA)의 경로. 예를 들면 /root/cert.pem입니다. 비공개 레지스트리에 비공개 TLS 인증서가 필요하지 않으면 이 필드를 생략할 수 있습니다.

    • CREDENTIALS_FILE_PATH: 구성 파일 config.json의 경로입니다 (예: $HOME/.docker/config.json). 비공개 레지스트리에 액세스하도록 containerd를 인증하려면 config.json에 파일의 auths 섹션에 사용자 인증 정보의 base64 인코딩 버전이 포함되어야 합니다.

      Artifact Registry의 경우 다음 값을 사용하여 서비스 계정 JSON 키를 통해 인증합니다.

      • username: _json_key
      • password: 서비스 계정 JSON 키 파일의 전체 콘텐츠입니다. 파싱 오류를 방지하려면 붙여넣은 JSON 키 콘텐츠를 작은따옴표 (')로 묶습니다.

      이 파일을 생성하는 방법에 대한 자세한 내용은 Artifact Registry 문서의 Docker용 Artifact Registry에 대한 인증 구성을 참고하세요.

      기타 비공개 레지스트리의 경우 base64로 인코딩된 auth 문자열은 일반적으로 특정 레지스트리 사용자 인증 정보를 사용하여 USERNAME:PASSWORD에서 형성됩니다. 비공개 레지스트리 서버에 인증을 위한 사용자 인증 정보가 필요하지 않으면 pullCredentialConfigPath 필드를 생략할 수 있습니다.

      민감한 정보를 보호하려면 chownchmod을 사용하여 구성 파일에 대한 액세스를 제한하세요.

  2. 변경사항을 클러스터에 적용합니다.

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 업데이트하려는 클러스터의 이름

    • CLUSTER_KUBECONFIG: 자체 관리형(하이브리드 또는 독립형) 클러스터 kubeconfig 파일의 경로

비공개 레지스트리의 사용자 클러스터 구성

사용자 클러스터의 경우 비공개 레지스트리 구성이 관리자 클러스터에 있는 사용자 클러스터 리소스 사양에 지정됩니다. 또한 비공개 레지스트리 사용자 인증 정보를 보안 비밀에 저장해야 합니다. 보안 비밀도 관리자 클러스터에 있습니다.

  1. 레지스트리 사용자 인증 정보를 위한 kubernetes.io/dockerconfigjson 유형의 Kubernetes 보안 비밀을 생성합니다.

    보안 비밀을 특정 네임스페이스로 범위 지정하려면 다음 명령어에 --namespace 플래그를 추가하여 네임스페이스 이름을 지정합니다. 보안 비밀이 클러스터와 동일한 네임스페이스에 있지 않으면 이 단계의 끝에 있는 예시에 표시된 대로 baremetal.cluster.gke.io/mark-source: "true" 주석을 추가합니다.

    kubectl create secret docker-registry CREDS_SECRET_NAME \
        --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \
        --kubeconfig=ADMIN_KUBECONFIG
    

    다음을 바꿉니다.

    • CREDS_SECRET_NAME: 보안 비밀의 이름

    • CREDENTIALS_FILE_PATH: 구성 파일 config.json의 경로입니다 (예: $HOME/.docker/config.json). 비공개 레지스트리에 액세스하도록 containerd를 인증하려면 config.json에 파일의 auths 섹션에 사용자 인증 정보의 base64 인코딩 버전이 포함되어야 합니다.

      Artifact Registry의 경우 다음 값을 사용하여 서비스 계정 JSON 키를 통해 인증합니다.

      • username: _json_key
      • password: 서비스 계정 JSON 키 파일의 전체 콘텐츠입니다. 파싱 오류를 방지하려면 붙여넣은 JSON 키 콘텐츠를 작은따옴표 (')로 묶습니다.

      이 파일을 생성하는 방법에 대한 자세한 내용은 Artifact Registry 문서의 Docker용 Artifact Registry에 대한 인증 구성을 참고하세요.

      기타 비공개 레지스트리의 경우 base64로 인코딩된 auth 문자열은 일반적으로 특정 레지스트리 사용자 인증 정보를 사용하여 USERNAME:PASSWORD에서 형성됩니다. 비공개 레지스트리 서버에 인증을 위한 사용자 인증 정보가 필요하지 않으면 pullCredentialSecretRef 필드를 생략할 수 있습니다.

      민감한 정보를 보호하려면 chownchmod을 사용하여 구성 파일에 대한 액세스를 제한하세요.

    보안 비밀은 다음 예시와 비슷하게 표시됩니다.

    apiVersion: v1
    data:
      .dockerconfigjson: ewoJImF1dGhzIjogewoJ...clpYSXdNak14IgoJCX0KCX0KfQ==
    kind: Secret
    metadata:
      creationTimestamp: "2024-04-28T22:06:06Z"
      name: private-registry-secret
      namespace: default
      resourceVersion: "5055821"
      ...
      annotations:
        ...
        baremetal.cluster.gke.io/mark-source: "true"
    type: kubernetes.io/dockerconfigjson
    
  2. 해당하는 경우 레지스트리의 CA 인증서를 보안 비밀에 저장합니다.

    보안 비밀은 다음과 유사합니다.

    apiVersion: v1
    kind: Secret
    metadata:
      annotations:
        baremetal.cluster.gke.io/mark-source: "true"
      name: ca-9dd74fd308bac6df562c7a7b220590b5
      namespace: some-namespace
    type: Opaque
    data:
      ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXFTZ0F3SUJBZ0lVQi
      3UGxjUzVFVk8vS0xuYjZiMHRhRFVleXJvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZqRUxNQWtHQ
      ...
      QnpPTkxTRFZJVk5LMm9YV1JvNEpJY0ZoNFZ4MWRMRHpqMldEaHhrUEljWEhLdGR3dk5iS2tocU
      LUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
      ```
    
  3. 사용자 클러스터 구성 파일을 수정하여 비공개 레지스트리를 사용 설정하고 구성합니다.

    1. 버전 1.29 클러스터의 경우에만 미리보기 기능 주석 preview.baremetal.cluster.gke.io/private-registry: "enable"을 추가하여 이 기능을 사용 설정합니다. 버전 1.30 이상 클러스터의 경우 버전 클러스터의 경우 비공개 저장소 기능이 기본적으로 사용 설정됩니다.

      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: user-basic
        namespace: cluster-user-basic
        resourceVersion: "766027"
        annotations:
          ...
          preview.baremetal.cluster.gke.io/private-registry: "enable"
      ...
      
    2. 사용자 클러스터 구성 파일의 nodeConfig 섹션에서 privateRegistries 블록을 추가합니다.

      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: user-basic
      ...
      spec:
        bypassPreflightCheck: false
      ...
        nodeConfig:
          containerRuntime: containerd
          podDensity:
            maxPodsPerNode: 250
          privateRegistries:
          - caCertSecretRef:
              name: CA_CERT_SECRET_NAME
              namespace: CA_CERT_SECRET_NAMESPACE
            host: REGISTRY_HOST
            pullCredentialSecretRef:
              name: CREDS_SECRET_NAME
              namespace: CREDS_SECRET_NAMESPACE
      

    다음을 바꿉니다.

    • CA_CERT_SECRET_NAME: CA 인증서를 저장하기 위해 만든 보안 비밀의 이름. 이 보안 비밀을 만들지 않은 경우 caCertSecretRef 블록을 삭제하세요.

    • CA_CERT_SECRET_NAMESPACE: CA 인증서 보안 비밀의 네임스페이스 이름(생성한 경우)

    • REGISTRY_HOST: 비공개 레지스트리 및 포트의 도메인 이름 또는 IP 주소. 예를 들면 10.200.0.2:5007입니다.

    • CREDS_SECRET_NAME: 레지스트리 사용자 인증 정보의 kubernetes.io/dockerconfigjson 유형 보안 비밀의 이름

    • CREDS_SECRET_NAMESPACE: 레지스트리 사용자 인증 정보 보안 비밀의 네임스페이스 이름

  4. 변경사항을 클러스터에 적용합니다.

    bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    다음을 바꿉니다.

    • USER_CLUSTER_NAME: 업데이트할 클러스터의 이름

    • ADMIN_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로