GKE용 워크로드 아이덴티티 제휴로 Knative serving 서비스를 인증하여 Compute API, Storage & Database API, Machine Learning API와 같은 Google Cloud API에 액세스하는 방법을 알아봅니다.
Knative serving 서비스를 인증하려면 다음을 수행해야 합니다.
- 클러스터에 GKE용 워크로드 아이덴티티 제휴 사용 설정
- Kubernetes 서비스 계정을 만들고 필요한 IAM 역할을 부여합니다.
이 단계를 따르면 앞에서 만든 ID를 사용하는 새로운 Knative serving 서비스를 배포할 수 있습니다.
클러스터에 GKE용 워크로드 아이덴티티 제휴 사용 설정
Knative serving에서 GKE용 워크로드 아이덴티티 제휴를 설정하려면 Google Cloud 서비스 계정 JSON 파일을 사용하는 대신 Fleet 워크로드 아이덴티티 제휴를 설정할 수 있습니다.
모든 측정항목을 사용 설정하도록 권한 구성
요청 수 또는 요청 지연 시간 같은 측정항목을 Google Cloud Observability에 사용 설정하려면 Cloud Monitoring에 대한 쓰기 권한을 부여해야 합니다. 예를 들어 모니터링 데이터를 작성하는 데 필요한 권한이 있으므로 Knative serving과 연결된 Kubernetes 서비스 계정에 모니터링 측정항목 작성자 역할(roles/monitoring.metricWriter)을 부여할 수 있습니다.
Kubernetes 서비스 계정에 IAM 역할 부여
구성한 Kubernetes 서비스 계정으로 실행되는 모든 Knative serving 서비스는 Google Cloud API에 액세스할 때 제휴 ID로 자동 인증됩니다. Kubernetes 서비스 계정은 GKE용 워크로드 아이덴티티 제휴를 사용하려는 Knative serving 서비스의 클러스터 및 네임스페이스 내에 있어야 합니다.
Kubernetes 서비스 계정이 없으면 Knative serving 서비스와 동일한 Kubernetes 네임스페이스에 계정을 만듭니다. 그렇지 않으면 다음 단계로 건너뜁니다.
kubectl create serviceaccount --namespace K8S_NAMESPACE KUBERNETES_SERVICEACCOUNT
필요한 IAM 역할을 Kubernetes 서비스 계정에 직접 부여합니다.
gcloud projects add-iam-policy-binding RESOURCE_PROJECT_ID \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/K8S_NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \ --role "ROLE_NAME" \ --condition=None
다음과 같이 바꿉니다.
- RESOURCE_PROJECT_ID를 대상 Google Cloud 리소스가 있는 Google Cloud 프로젝트 ID로 바꿉니다.
- PROJECT_NUMBER를 Kubernetes 서비스 계정 및 Knative serving 서비스가 있는 클러스터에 대한Google Cloud 프로젝트의 프로젝트 번호로 바꿉니다.
- PROJECT_ID를 Kubernetes Service Account 및 Knative serving 서비스가 있는 클러스터에 대한 Google Cloud 프로젝트의 ID로 바꿉니다.
- K8S_NAMESPACE 및 KUBERNETES_SERVICEACCOUNT을 Kubernetes 서비스 계정의 네임스페이스 및 이름으로 바꿉니다.
- ROLE_NAME을 Kubernetes 서비스 계정에 할당할 IAM 역할로 바꿉니다(예:
roles/monitoring.metricWriter).
GKE용 워크로드 아이덴티티 제휴를 사용하도록 새 서비스 배포
생성한 GKE용 워크로드 아이덴티티 제휴를 사용하는 새 Knatie serving 서비스를 배포합니다.
콘솔
Google Cloud 콘솔에서 Knative serving으로 이동합니다.
배포할 새 서비스를 구성하려면 서비스 만들기를 클릭합니다. 기존 서비스를 구성하려면 해당 서비스를 클릭한 다음 새 버전 수정 및 배포를 클릭합니다.
고급 설정에서 컨테이너를 클릭합니다.
서비스 계정 드롭다운을 클릭하고 원하는 서비스 계정을 선택합니다.
다음을 클릭하여 다음 섹션으로 진행합니다.
이 서비스가 트리거되는 방식 구성 섹션에서 서비스를 호출하는 데 사용할 연결을 선택합니다.
만들기를 클릭하여 Knative serving에 이미지를 배포하고 배포가 완료될 때까지 기다립니다.
명령줄
기존 서비스의 경우 다음 매개변수로
gcloud run services update명령어를 실행하여 Kubernetes 서비스 계정을 설정합니다.gcloud run services update SERVICE --service-account KUBERNETES_SERVICEACCOUNT
다음과 같이 바꿉니다.
- SERVICE를 Knative serving 서비스의 이름으로 바꿉니다.
- KUBERNETES_SERVICEACCOUNT을 워크로드 아이덴티티를 만드는 데 사용한 Kubernetes 서비스 계정으로 바꿉니다.
새 서비스의 경우
--service-account매개변수로gcloud run deploy명령어를 실행하여 Kubernetes 서비스 계정을 설정합니다.gcloud run deploy --image IMAGE_URL --service-account KUBERNETES_SERVICEACCOUNT
다음과 같이 바꿉니다.
- IMAGE_URL을 컨테이너 이미지에 대한 참조(예:
gcr.io/cloudrun/hello)로 바꿉니다. - KUBERNETES_SERVICEACCOUNT을 워크로드 아이덴티티를 만드는 데 사용한 Kubernetes 서비스 계정으로 바꿉니다.
- IMAGE_URL을 컨테이너 이미지에 대한 참조(예:
YAML
--format=export 플래그를 사용하여 gcloud run services describe 명령어로 YAML 파일에 기존 서비스 구성을 다운로드할 수 있습니다.
그런 다음 gcloud run services replace 명령어로 YAML 파일을 수정하고 변경사항을 배포할 수 있습니다.
지정된 속성만 수정해야 합니다.
서비스 구성을 로컬 작업공간의
service.yaml파일에 다운로드합니다.gcloud run services describe SERVICE --format export > service.yaml
SERVICE를 Knative serving 서비스의 이름으로 바꿉니다.
로컬 파일에서
serviceAccountName:속성을 업데이트합니다.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: KUBERNETES_SERVICEACCOUNT
다음과 같이 바꿉니다.
- SERVICE를 Knative serving 서비스의 이름으로 바꿉니다.
- KUBERNETES_SERVICEACCOUNT을 워크로드 아이덴티티를 만드는 데 사용한 Kubernetes 서비스 계정으로 바꿉니다.
다음 명령어를 실행하여 Knative serving 서비스에 구성을 배포합니다.
gcloud run services replace service.yaml
GKE용 워크로드 아이덴티티 제휴를 사용하도록 기존 서비스 마이그레이션
기존 클러스터에서 GKE용 워크로드 아이덴티티 제휴를 사용 설정한 경우 해당 클러스터에서 GKE용 워크로드 아이덴티티 제휴를 사용하려는 각 서비스를 마이그레이션해야 합니다. 기존 서비스 마이그레이션 방법 알아보기
다음 단계
서비스에 대한 액세스를 관리하는 방법 알아보기