이 페이지에서는 Binary Authorization이 사용 설정된 GKE 클러스터(Google Cloud 또는 Google Distributed Cloud)에 컨테이너 이미지를 배포하는 방법을 설명합니다.
이미지 배포를 위해 사용하는 kubectl
명령어는 Binary Authorization을 사용하지 않는 클러스터에 이미지를 배포하기 위해 사용하는 명령어와 동일합니다.
시작하기 전에
프로젝트에 Binary Authorization API가 사용 설정되었고 GKE 클러스터에 Binary Authorization이 사용 설정되었는지 확인하세요. Google Kubernetes Engine 설정 또는 Distributed Cloud 설정을 참조하세요.
GKE와의 상호작용을 위해 kubectl
을 설치합니다.
kubectl
구성
kubectl
설치를 위해 로컬 kubeconfig
파일을 업데이트해야 합니다.
이 파일은 GKE 또는 Distributed Cloud에서 클러스터에 액세스하는 데 필요한 사용자 인증 정보와 엔드포인트 정보를 제공합니다.
kubectl
을 구성하려면 다음 gcloud
명령어를 실행합니다.
GKE
gcloud container clusters get-credentials \ --zone ZONE \ CLUSTER_NAME
다음을 바꿉니다.
- ZONE: 클러스터가 실행되는 GKE 영역의 이름(예:
us-central1-a
) - CLUSTER_NAME: 클러스터의 이름
분산 클라우드
gcloud container fleet memberships get-credentials \ --location LOCATION \ MEMBERSHIP_NAME
다음을 바꿉니다.
- LOCATION: GKE 클러스터의 Fleet 멤버십 위치입니다(예:
global
). - MEMBERSHIP_NAME: GKE 클러스터의 Fleet 멤버십 이름입니다.
컨테이너 이미지 배포
다음과 같이 컨테이너 이미지를 배포합니다.
환경 변수를 구성합니다.
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의 이미지에 대해서는 이미지 버전 나열을 참조하세요.
- Artifact Registry:
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}
다음 단계
- 테스트 실행 모드 알아보기
- CV 사용 방법 알아보기
- 기존 지속적 검증 사용(지원 중단됨) 방법 알아보기
- Kubernetes 매니페스트에서 이미지 다이제스트를 사용하는 방법 알아보기