레지스트리 미러 구성

레지스트리 미러

레지스트리 미러는 gcr.iodocker.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

사용자 네임스페이스 사용

루트 네임스페이스 대신 레지스트리 서버에서 자체 네임스페이스를 사용하려는 경우 containerdregistryMirrors.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)를 프록시 허용 목록에 추가할 필요가 없습니다.

레지스트리 미러 엔드포인트, 인증서, 가져오기 인증서 업데이트

레지스트리 미러 엔드포인트, 인증서, 가져오기 인증서를 업데이트하려면 다음 안내를 따르세요.

  1. 클러스터 구성 파일에서 엔드포인트, CA 인증서 파일, 가져오기 사용자 인증 정보 구성 파일 경로를 업데이트합니다.

  2. 다음을 실행하여 변경사항을 적용합니다.

    actl clusters baremetal update cluster admin --kubeconfig=ADMIN_KUBECONFIG
    

다음 단계