컨테이너 배포(GKE, GKE 클러스터)

이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터 또는 Binary Authorization이 사용 설정된 GKE 클러스터에 컨테이너 이미지를 배포하는 방법을 설명합니다. 이미지 배포를 위해 사용하는 kubectl 명령어는 Binary Authorization을 사용하지 않는 클러스터에 이미지를 배포하기 위해 사용하는 것과 동일합니다.

시작하기 전에

프로젝트에 Binary Authorization API가 사용 설정되었고 GKE 클러스터에 Binary Authorization이 사용 설정되었는지 확인하세요. Google Kubernetes Engine에서 설정 또는 GKE 클러스터에서 설정을 참조하세요.

GKE와의 상호작용을 위해 kubectl을 설치합니다.

kubectl 구성

kubectl 설치를 위해 로컬 kubeconfig 파일을 업데이트해야 합니다. 이 파일은 GKE 또는 GKE 클러스터에서 클러스터에 액세스하는 데 필요한 사용자 인증 정보와 엔드포인트 정보를 제공합니다.

kubectl을 구성하려면 다음 gcloud 명령어를 실행합니다.

GKE

gcloud container clusters get-credentials \
    --zone ZONE \
    CLUSTER_NAME

다음을 바꿉니다.

  • ZONE: 클러스터가 실행되는 GKE 영역의 이름(예: us-central1-a)
  • CLUSTER_NAME: 클러스터의 이름입니다.

GKE 클러스터

gcloud container fleet memberships get-credentials \
    --location LOCATION \
    MEMBERSHIP_NAME

다음을 바꿉니다.

  • LOCATION: GKE 클러스터의 Fleet 멤버십 위치입니다(예: global).
  • MEMBERSHIP_NAME: GKE 클러스터의 Fleet 멤버십 이름입니다.

컨테이너 이미지 배포

다음과 같이 컨테이너 이미지를 배포합니다.

  1. 환경 변수를 구성합니다.

    POD_NAME=POD_NAME
    IMAGE_PATH=IMAGE_PATH
    IMAGE_DIGEST=IMAGE_DIGEST
    

    다음을 바꿉니다.

    • POD_NAME: GKE 워크로드에 사용할 이름
    • IMAGE_PATH: Artifact Registry, Container Registry, 다른 레지스트리의 이미지 경로
    • IMAGE_DIGEST: 이미지 매니페스트의 다이제스트. 예시는 다음과 같습니다.

      • Artifact Registry:
        • 경로: us-docker.pkg.dev/google-samples/containers/gke/hello-app
        • 다이제스트: sha256:37e5287945774f27b418ce567cd77f4bbc9ef44a1bcd1a2312369f31f9cce567
      • Container Registry:
        • 경로: gcr.io/google-samples/hello-app
        • 다이제스트: sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4

      Artifact Registry에서 이미지의 다이제스트를 가져오는 방법은 이미지 관리를 참조하고, Container Registry의 이미지에 대해서는 이미지 버전 나열을 참조하세요.

  2. kubectl run 명령어를 사용하여 이미지를 배포합니다.

    Binary Authorization에서 다이제스트를 사용하여 증명을 조회하므로 1.0 또는 latest와 같은 태그가 아닌 다이제스트를 사용하여 이미지를 배포해야 합니다.

    이미지를 배포하려면 다음 kubectl 명령어를 실행합니다.

    kubectl run ${POD_NAME} \
        --image ${IMAGE_PATH}@${IMAGE_DIGEST}
    

    이제 Binary Authorization에서 배포를 차단했는지 확인합니다.

    kubectl get pods
    

    pod가 나열됩니다.

오류 시 허용

GKE가 어떤 이유로든 Binary Authorization 서버에 연결할 수 없거나 서버가 오류를 반환하는 경우 GKE는 Binary Authorization이 이미지를 허용 또는 거부할지 결정할 수 없습니다. 이 경우, GKE 오류 시 열림: 기본적으로 이미지 배포를 허용하지만 이미지가 허용된 이유를 기록하기 위해 Cloud 감사 로그에 로그 항목이 생성됩니다.

안정성과 보안이 서로 상충하므로 GKE 시행이 오류 시 열림으로 처리됩니다. GKE는 포드가 생성되거나 업데이트될 때마다 Binary Authorization에 요청을 보냅니다. 여기에는 ReplicaSets 및 StatefulSets와 같은 상위 수준 Kubernetes 워크로드 컨트롤러에서 포드를 자동으로 생성하거나 업데이트하는 시나리오가 포함됩니다. GKE가 오류 시 열리지 않고 닫히면 Binary Authorization 중단 시 이러한 포드 실행이 중지됩니다. 또한 포드가 거부되면 리디렉션된 트래픽이 아직 실행 중인 포드에 과부하를 발생시키므로 장애 조치로 인해 연쇄적 장애가 발생할 수 있습니다. Binary Authorization이 중단되면 새 이미지를 배포하지 않고도 클러스터가 완전히 중단될 수 있습니다.

정책을 위반하는 이미지 배포

Binary Authorization은 정책을 위반하더라도 이미지를 배포할 수 있는 breakglass라는 기능을 지원합니다.

자세한 내용은 breakglass 사용을 참조하세요.

삭제

삭제하려면 다음 명령어를 실행하여 포드를 삭제합니다.

  kubectl delete pod ${POD_NAME}
  

다음 단계