이 페이지에서는 VMware용 Google Distributed Cloud(소프트웨어 전용)에 기존 컨테이너 레지스트리 서버를 구성하는 방법을 설명합니다.
이 페이지는 기술 인프라를 설정, 모니터링, 관리하는 관리자, 설계자, 운영자를 대상으로 합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE Enterprise 사용자 역할 및 태스크를 참조하세요.
개요
기본적으로 클러스터를 만들거나 업그레이드하는 중에 Google Distributed Cloud는 구성요소 액세스 서비스 계정을 사용하여 gcr.io/gke-on-prem-release
에서 시스템 이미지를 가져옵니다.
원하는 경우 자체 컨테이너 레지스트리 서버를 제공하여 대신 비공개 레지스트리 서버에서 시스템 이미지를 가져오도록 할 수 있습니다.
Google Distributed Cloud는 안전하지 않은 컨테이너 레지스트리를 지원하지 않습니다. 컨테이너 레지스트리 서버를 시작할 때 인증서와 키를 제공해야 합니다. 인증서는 공개 인증 기관(CA)에서 서명하거나 자체 서명할 수 있습니다.
컨테이너 레지스트리 서버 만들기
컨테이너 레지스트리 서버를 만드는 방법은 Docker 문서의 외부에서 액세스할 수 있는 레지스트리 실행을 참조하세요.
레지스트리 구성
비공개 Container Registry를 사용하려면 gkectl
명령줄 도구 또는 Terraform을 사용하면 됩니다.
gkectl
클러스터를 만들기 전에 관리자 클러스터 구성 파일에 privateRegistry
섹션을 추가합니다.
이 섹션을 작성하면 다음을 수행합니다.
클러스터를 만들거나 업그레이드하기 전에
gkectl prepare
명령어를 실행하면 이 명령어는 관리자 클러스터 구성 파일의bundlePath
필드에 지정된 tar 파일에서 이미지를 추출하고 비공개 레지스트리 서버로 내보냅니다.클러스터를 만들거나 업그레이드하는 중에 비공개 레지스트리 서버에서 시스템 이미지를 가져옵니다.
Terraform
관리자 클러스터 만들기의 Terraform 탭에 있는 단계에 따라 관리자 클러스터 구성 파일을 작성합니다.
관리자 클러스터 구성 파일에 다음을 추가합니다.
private_registry_config { address = "ADDRESS" ca_cert = "CA_CERT" }
다음을 바꿉니다.
"ADDRESS"
: 비공개 레지스트리를 실행하는 머신의 IP 주소 또는 FQDN (정규화된 도메인 이름)입니다."CA_CERT"
: 비공개 레지스트리의 CA 인증서 공개 키입니다.
관리자 클러스터 만들기의 Terraform 탭에 있는 단계에 따라 Terraform 구성 파일과 계획을 확인한 다음 부트스트랩 클러스터를 만듭니다.
gkectl register bootstrap
명령어를 실행하면gkectl
에서 사용자 이름을 입력하라는 메시지가 표시된 후 비공개 레지스트리의 비밀번호를 입력하라는 메시지가 표시됩니다.
클러스터를 만드는 중에 비공개 레지스트리 서버에서 시스템 이미지를 가져옵니다.
고급 클러스터 및 전체 번들 제한사항
Google Distributed Cloud 번들은 전체 버전과 일반 버전 등 2가지 버전으로 제공됩니다. 관리자 워크스테이션에 있는 번들을 확인하려면 관리자 클러스터 구성 파일에서 bundlePath
필드를 확인합니다. 파일 이름이 -full
로 끝나면 전체 번들이 관리자 워크스테이션에 있는 것입니다. 파일 이름이 -full
로 끝나지 않으면 일반 번들이 관리자 워크스테이션에 있는 것입니다.
gkeadm
명령어를 사용하여 관리자 워크스테이션을 만든 경우 이 명령어는 전체 번들이 포함된 관리자 워크스테이션 VM을 만들고 관리자 클러스터 구성 파일에서 bundlePath
필드를 구성합니다.
고급 클러스터가 사용 설정된 경우 비공개 레지스트리에서 전체 번들을 사용하면 다음과 같은 제한사항이 적용됩니다.
버전 1.31: 비공개 레지스트리에서는 전체 번들이 지원되지 않습니다. 고급 클러스터에서 비공개 레지스트리를 사용하려면 다음 안내를 따르세요.
- 일반 크기 번들을 관리자 워크스테이션으로 다운로드합니다.
- 관리자 클러스터 구성 파일의
bundlePath
필드에서 파일 이름을 업데이트합니다.
버전 1.32: 전체 번들을 사용할 수 있지만
gkectl prepare
명령어는 tar 파일 대신gcr.io/gke-on-prem-release
에서 이미지를 가져옵니다. 그러나 이 명령어는 클러스터를 만들거나 업그레이드하는 중에 비공개 레지스트리에서 시스템 이미지를 가져오도록 이미지를 비공개 레지스트리에 내보냅니다.
레지스트리 서버에서 이미지를 가져왔는지 확인
이미지를 레지스트리 서버에서 가져오는지 확인하는 방법은 고급 클러스터 사용 설정 여부에 따라 다릅니다.
고급 클러스터가 사용 설정되어 있지 않으면 다음 명령어를 실행합니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \ --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}"
ADMIN_CLUSTER_KUBECONFIG
를 관리자 클러스터의 kubeconfig 파일 경로로 바꿉니다.이 명령어 출력에는 클러스터의 모든 이미지가 표시됩니다. 모든 Google Distributed Cloud 이미지를 자체 레지스트리 서버에서 가져온 것인지 확인할 수 있습니다.
고급 클러스터가 사용 설정된 경우 다음 단계를 수행합니다.
다음 단계를 수행하여
config.toml
파일 콘텐츠를 검사하여containerd
가 로컬 레지스트리에서 이미지를 가져오는지 여부를 확인할 수 있습니다.- 노드에 로그인하고
/etc/containerd/config.toml
파일 콘텐츠를 검사합니다. config.toml
파일의plugins."io.containerd.grpc.v1.cri".registry.mirrors
필드를 검사하여 레지스트리 서버가endpoint
필드에 표시되어 있는지 확인합니다.다음은
config.toml
파일 예시에서 발췌한 부분입니다.version = 2 root = "/var/lib/containerd" state = "/run/containerd" ... [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"] [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls] ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt' [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"] endpoint = ["http://privateregistry.io", "http://privateregistry2.io"] ...
레지스트리 미러가
endpoint
필드에 표시되면 노드가 Artifact Registry가 아닌 레지스트리 미러에서 이미지를 가져옵니다.
- 노드에 로그인하고