레지스트리 미러를 사용하여 Anthos clusters on bare metal 설치

이 페이지에서는 gcr.io를 사용하는 대신 레지스트리 미러를 사용하여 Anthos clusters on bare metal을 설치하는 방법을 보여줍니다. 레지스트리 미러를 사용하려면 컨테이너 런타임을 containerd로 설정해야 합니다.

레지스트리 미러는 Anthos clusters on bare metal 이미지가 일반적으로 저장되는 장소인 gcr.io/anthos-baremetal-release/뿐만 아니라 gcr.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 구성 파일이 있어야 합니다.

Anthos clusters on bare metal에 필요한 모든 이미지 다운로드

bmctl 도구 및 이미지 패키지의 최신 버전을 다운로드 페이지에서 다운로드합니다.

레지스트리 서버에 컨테이너 이미지 업로드

다음을 실행하여 이미지 패키지의 이미지를 레지스트리 서버에 업로드합니다.

[HTTPS_PROXY=http://PROXY_IP:PORT] ./bmctl push images \
    --source=./bmpackages_1.8.0.tar.xz \
    --private-registry=REGISTRY_IP:PORT \
    [--cacert=CERT_PATH] \
    [--need-credential=false]

다음을 바꿉니다.

  • 워크스테이션에서 레지스트리 서버로 이미지를 업로드하기 위해 프록시가 필요한 경우 PROXY_IP:PORT를 프록시의 IP 주소 및 포트로 바꿉니다.
  • REGISTRY_IP:PORT를 비공개 레지스트리 서버의 IP 주소 및 포트로 바꿉니다.
  • 레지스트리 서버에 비공개 TLS 인증서가 사용되는 경우 CERT_PATH를 CA 인증서 파일의 경로로 바꿉니다.

메시지가 표시되면 사용자 이름과 비밀번호를 입력하거나 Docker 구성 파일을 선택합니다. 레지스트리 서버에 사용자 인증 정보가 필요하지 않으면 --need-credential=false를 지정합니다.

bmctl push images 명령어에 대해 자세히 알아보려면 다음을 실행합니다.

bmctl push images --help

자체 네임스페이스 사용

루트 네임스페이스 대신 레지스트리 서버에서 자체 네임스페이스를 사용하려는 경우 containerdregistryMirrors.endpoint의 비공개 레지스트리에 대해 API 엔드포인트를 제공한 경우 이 서브 네임스페이스에서 가져올 수 있습니다. 엔드포인트는 일반적으로 <REGISTRY_IP:PORT>/v2/<NAMESPACE> 형식입니다. 특정 세부정보는 비공개 레지스트리 사용자 가이드에서 확인하세요.

예를 들어 172.18.0.20:5000/test-namespace/에 대한 액세스 권한만 있으면 다음 명령어를 사용하여 test-namespace 네임스페이스 아래의 모든 이미지를 업로드할 수 있습니다.

./bmctl push images \
    --source=./bmpackages_1.8.0.tar.xz \
    --private-registry=172.18.0.20:5000/test-namespace
    --username=<USERNAME>
    --password=<PASSWORD>
    --cacert <path/to/cert.crt>

그런 후 클러스터 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:
---
gcrKeyPath: /bmctl/bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
sshPrivateKeyPath: /root/ssh-key/id_rsa
registryMirrors:
  - endpoint: https://172.18.0.20:5000
    caCertPath: /root/ca.crt
    pullCredentialConfigPath: /root/.docker/config.json
---
apiVersion: v1
kind: Namespace
metadata:
  name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: admin1
  namespace: cluster-admin1
spec:
  nodeConfig:
    containerRuntime: containerd
...

이 클러스터의 모든 노드는 gcr.io 대신 이 레지스트리 미러 172.18.0.20:5000을 사용합니다.

gcr.io로 장애 조치

클러스터가 레지스트리 미러에서 가져오기를 실패하면 자동으로 gcr.io로 장애 조치됩니다. 따라서 클러스터 구성 파일에 gcrKeyPath 값을 제공하는 것이 좋습니다. 값이 제공되지 않았으면 레지스트리 미러가 실패할 때 클러스터가 gcr.io에서 가져오기를 수행할 수 없습니다.

가져오기 장애 조치 기능이 필요하지 않으면 gcrKeyPath를 추가하거나 gcr.io를 프록시 허용 목록에 추가할 필요가 없습니다.

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

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

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

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

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    다음을 바꿉니다.

    • CLUSTER_NAME을 업데이트하려는 클러스터 이름을 바꿉니다.
    • ADMIN_KUBECONFIG를 관리자 클러스터의 구성 파일 경로로 바꿉니다.