워커 노드가 비공개 레지스트리를 사용할 수 있도록 Google Distributed Cloud 클러스터를 구성할 수 있습니다. 노드 수준 비공개 레지스트리는 이미지 가져오기 및 관련 보안에 대한 제어 수준을 높이기 위해 워크로드에 사용하도록 의도되었습니다. 이 문서에 설명된 대로 비공개 레지스트리를 사용하여 클러스터를 구성하면 Google Distributed Cloud가 그에 따라 컨테이너 구성을 업데이트합니다. 클러스터가 구성되면 포드 사양에서 imagePullSecrets
를 지정하지 않고도 적격 노드의 모든 포드에서 레지스트리를 사용할 수 있습니다.
이 기능은 클러스터 수명 주기 중 언제든지 사용 설정하거나 중지할 수 있습니다.
기본 요건
이 미리보기 기능을 사용하려면 클러스터가 다음 요구사항을 충족해야 합니다.
- 클러스터 버전이 1.29 이상이어야 합니다.
- 노드 풀 버전은 1.29여야 합니다. 모든 노드 풀이 1.29 버전일 필요는 없지만, 이 기능은 1.29 버전의 노드 풀에서만 작동합니다.
- 클러스터에
preview.baremetal.cluster.gke.io/private-registry: "enable"
미리보기 기능 주석이 있어야 합니다. 이 기능은 다음 표와 같이 사용자 클러스터 및 워커 노드 풀이 있는 자체 관리형(하이브리드 및 독립형) 클러스터를 위한 기능입니다.
배포 모델 지원되는 클러스터 유형 관리자 및 사용자 클러스터 배포 관리자 클러스터
사용자 클러스터 1
사용자 클러스터 2
하이브리드 클러스터 배포 하이브리드 클러스터
사용자 클러스터 1
사용자 클러스터 2
독립형 클러스터 배포 독립형 클러스터
비공개 레지스트리의 자체 관리형 클러스터 구성
노드 수준 비공개 레지스트리를 사용하도록 독립형 또는 하이브리드 클러스터를 구성하려면 다음 안내를 따르세요.
클러스터 구성 파일을 수정하여 사용자 인증 정보 섹션에
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" ... spec: type: hybrid ...
다음을 바꿉니다.
REGISTRY_HOST
: 비공개 레지스트리 및 포트의 도메인 이름 또는 IP 주소. 예를 들면10.200.0.2:5007
입니다.CA_CERT_PATH
: CA 인증서 파일(서버 루트 CA)의 경로. 예를 들면/root/cert.pem
입니다. 비공개 레지스트리에 비공개 TLS 인증서가 필요하지 않으면 이 필드를 생략할 수 있습니다.CREDENTIALS_FILE_PATH
: 비공개 레지스트리에 액세스하기 위한 사용자 인증 정보가 포함된 파일 경로입니다. 예를 들면/root/.docker/config.json
입니다. 비공개 레지스트리 서버에 인증에 대한 사용자 인증 정보가 필요하지 않으면 이 필드를 생략할 수 있습니다.
변경사항을 클러스터에 적용합니다.
bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
다음을 바꿉니다.
CLUSTER_NAME
: 업데이트하려는 클러스터의 이름CLUSTER_KUBECONFIG
: 자체 관리형(하이브리드 또는 독립형) 클러스터 kubeconfig 파일의 경로
비공개 레지스트리의 사용자 클러스터 구성
사용자 클러스터에서 비공개 레지스트리 구성은 클러스터 리소스 사양에 지정됩니다. 또한 사용자 클러스터의 경우 비공개 레지스트리 사용자 인증 정보를 보안 비밀에 저장해야 합니다.
레지스트리 사용자 인증 정보를 위한
kubernetes.io/dockerconfigjson
유형의 Kubernetes 보안 비밀을 생성합니다.보안 비밀의 범위를 특정 네임스페이스로 지정하려면 다음 명령어에
--namespace
플래그를 추가하여 네임스페이스 이름을 지정합니다.kubectl create secret docker-registry CREDS_SECRET_NAME \ --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \ --kubeconfig=ADMIN_KUBECONFIG
다음을 바꿉니다.
CREDS_SECRET_NAME
: 보안 비밀의 이름CREDENTIALS_FILE_PATH
: Docker 구성 파일의 경로. 예를 들면/root/.docker/config.json
입니다.
보안 비밀은 다음 예시와 비슷하게 표시됩니다.
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
보안 비밀이 클러스터와 동일한 네임스페이스에 있지 않으면 이전 예시에 표시된 대로
baremetal.cluster.gke.io/mark-source: "true"
주석을 추가합니다.해당하는 경우 레지스트리의 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== ```
사용자 클러스터 구성 파일을 수정하여 비공개 레지스트리를 사용 설정하고 구성합니다.
preview.baremetal.cluster.gke.io/private-registry: "enable"
주석을 추가하여 미리보기 상태에서 비공개 레지스트리를 사용 설정합니다.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" ...
사용자 클러스터 구성 파일의
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
: 레지스트리 사용자 인증 정보 보안 비밀의 네임스페이스 이름
변경사항을 클러스터에 적용합니다.
bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
다음을 바꿉니다.
USER_CLUSTER_NAME
: 업데이트할 클러스터의 이름ADMIN_KUBECONFIG
: 관리자 클러스터 kubeconfig 파일의 경로