레지스트리 미러
레지스트리 미러는 gcr.io
및 docker.io
의 이미지를 미러링하도록 지정됩니다. 예를 들어 gcr.io/kubernetes-e2e-test-images/nautilus:1.0
이미지를 가져오려고 시도할 때 이러한 시도는 172.18.0.20:5000/kubernetes-e2e-test-images/nautilus:1.0
과 같이 레지스트리 서비스의 정확히 동일한 경로에 이미지가 있는 경우에만 작동합니다.
gcr.io
가 아닌 모든 이미지는 정상적으로 작동합니다. 예를 들어 k8s.gcr.io/pause:3.1
을 계속 가져올 수 있습니다.
레지스트리 미러를 사용하면 트래픽을 절약하는 데 도움이 되고, gcr.io
중단 시 클러스터를 보호해야 할 경우를 위해 gcr.io
를 사용하지 않아도 됩니다.
또한 자체적으로 취약점 스캔을 수행할 수도 있습니다.
시작하기 전에
- 네트워크에서 Container Registry 서버가 설정되어 있어야 합니다.
- 레지스트리 서버가 비공개 TLS 인증서를 실행할 경우 인증 기관(CA) 파일이 있어야 합니다.
- 레지스트리 서버에 인증이 필요하면 적절한 로그인 사용자 인증 정보 또는 Docker 구성 파일이 있어야 합니다.
레지스트리 서버에 컨테이너 이미지 업로드
다음을 실행하여 이미지 패키지의 이미지를 레지스트리 서버에 업로드합니다.
actl images push \
--private-registry=PRIVATE_REGISTRY \
--images ~/anthos-baremetal-private-mode
다음을 바꿉니다.
PRIVATE_REGISTRY
를 비공개 레지스트리 주소(및 포트)와172.18.0.20:5000/test-namespace
와 같은 하위 프로젝트로 바꿉니다.메시지가 표시되면 사용자 이름과 비밀번호를 입력하거나 Docker 구성 파일을 선택합니다. 레지스트리 서버에 사용자 인증 정보가 필요하지 않으면
--no-registry-credential
를 지정합니다.
actl images push
명령어에 대해 자세히 알아보려면 다음을 실행합니다.
actl images push --help
사용자 네임스페이스 사용
루트 네임스페이스 대신 레지스트리 서버에서 자체 네임스페이스를 사용하려는 경우 containerd
는 registryMirrors.endpoint
의 비공개 레지스트리에 대해 API 엔드포인트를 제공한 경우 이 서브 네임스페이스에서 가져올 수 있습니다. 엔드포인트는 일반적으로 <REGISTRY_IP:PORT>/v2/<NAMESPACE>
형식입니다. 특정 세부정보는 비공개 레지스트리 사용자 가이드에서 확인하세요.
예를 들어 172.18.0.20:5000/test-namespace/
에 대한 액세스 권한만 있으면 다음 명령어를 사용하여 test-namespace
네임스페이스 아래의 모든 이미지를 업로드할 수 있습니다.
actl images push \
--images= ~/anthos-baremetal-private-mode \
--private-registry=172.18.0.20:5000/test-namespace
그런 후 클러스터 YAML 파일에서 containerd
가 서브 네임스페이스에서 가져오도록 다음 항목을 입력할 수 있습니다.
registryMirrors:
- endpoint: https://172.18.0.20:5000/v2/test-namespace
레지스트리 미러에서 클러스터 만들기
다음은 gcr.io
대신 자체 레지스트리 미러 서버를 사용하는 샘플 클러스터 구성입니다.
레지스트리에 비공개 TLS 인증서가 필요하지 않으면 caCertPath
필드를 비워 둘 수 있습니다.
레지스트리 서버에 인증 Docker 구성 파일이 필요하지 않으면 pullCredentialConfigPath
필드를 비워 둘 수 있습니다.
클러스터 구성에 대한 자세한 내용은 클러스터 구성을 참조하세요.
# Sample cluster config with registry mirror:
---
sshPrivateKeyPath: /root/ssh-key/id_rsa
registryMirrors:
- endpoint: https://172.18.0.20:5000/v2/test-namespace
caCertPath: /root/ca.crt
pullCredentialConfigPath: /root/.docker/config.json
---
apiVersion: v1
kind: Namespace
metadata:
name: cluster-admin
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: admin
namespace: cluster-admin
spec:
nodeConfig:
containerRuntime: containerd
...
이 클러스터의 모든 노드는 gcr.io
(및 docker.io
) 대신 이 레지스트리 미러 172.18.0.20:5000
을 사용합니다.
gcr.io
로 장애 조치
클러스터가 레지스트리 미러에서 가져오기를 실패하면 자동으로 gcr.io
로 장애 조치됩니다. 따라서 클러스터 구성 파일에 privateRegistryConfigPath
값을 제공하는 것이 좋습니다. 값이 제공되지 않았으면 레지스트리 미러가 실패할 때 클러스터가 gcr.io
에서 가져오기를 수행할 수 없습니다.
# Sample cluster config with registry mirror:
---
privateRegistryConfigPath: /root/.docker/config.json
registryMirrors:
- endpoint: https://172.18.0.20:5000
caCertPath: /root/ca.crt
pullCredentialConfigPath: /root/.docker/config.json
가져오기 장애 조치 기능이 필요하지 않으면 privateRegistryConfigPath
를 추가하거나 gcr.io
(및 docker.io
)를 프록시 허용 목록에 추가할 필요가 없습니다.
레지스트리 미러 엔드포인트, 인증서, 가져오기 인증서 업데이트
레지스트리 미러 엔드포인트, 인증서, 가져오기 인증서를 업데이트하려면 다음 안내를 따르세요.
클러스터 구성 파일에서 엔드포인트, CA 인증서 파일, 가져오기 사용자 인증 정보 구성 파일 경로를 업데이트합니다.
다음을 실행하여 변경사항을 적용합니다.
actl clusters baremetal update cluster admin --kubeconfig=ADMIN_KUBECONFIG