Google Kubernetes Engine(GKE) 서비스(Knative serving 서비스 포함)가 Eventarc를 사용하여 Pub/Sub 이벤트를 수신할 수 있도록 이벤트 트리거를 마이그레이션할 수 있습니다. 이 가이드에서는 기존 이벤트 트리거를 마이그레이션하고 GKE 서비스가 GKE 클러스터에서 실행된다고 가정합니다. 마이그레이션은 각 클러스터에 대해 실행되어야 합니다.
이 마이그레이션 경로는 중복을 최소화하면서 이벤트 손실을 방지합니다.
마이그레이션하려면 다음 작업을 수행합니다.
- Eventarc가 GKE 클러스터의 리소스를 관리할 수 있도록 하려면 GKE 대상을 사용 설정합니다.
- 필요한 경우 대상 GKE 서비스를 실행하는 GKE 클러스터에 워크로드 아이덴티티를 사용 설정합니다.
- 기존 이벤트 트리거를 식별합니다.
- 기존 트리거와 동일한 GKE 서비스를 가리키는 Eventarc 트리거를 만듭니다.
- Eventarc 트리거가 예상대로 이벤트를 전달하는지 확인합니다.
- 원본 이벤트 트리거를 삭제하고 마이그레이션 후 정리를 실행합니다.
시작하기 전에
이 가이드에서는 다음 작업을 이미 완료했다고 가정합니다.
명령줄 환경 설정
gcloud
및 kubectl
명령줄 도구를 설정하려면 다음 안내를 따르세요.
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
계정을 사용하여 로그인합니다.
gcloud auth login
gcloud CLI의 기본 설정을 구성합니다.
gcloud config set project PROJECT_ID gcloud config set run/cluster CLUSTER_NAME gcloud config set run/cluster_location CLUSTER_LOCATION gcloud config set run/platform gke gcloud config set eventarc/location LOCATION
다음을 바꿉니다.
프로젝트에 다음 API를 사용 설정합니다.
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
kubectl
명령줄 도구를 설치합니다.gcloud components install kubectl
설치된 gcloud CLI 구성요소를 업데이트합니다.
gcloud components update
GKE 대상 사용 설정
Eventarc가 GKE 클러스터의 리소스를 관리할 수 있도록 하려면 GKE 대상을 사용 설정하고 Eventarc 서비스 계정을 필요한 역할과 결합합니다.
Eventarc에 GKE 대상을 사용 설정합니다.
gcloud eventarc gke-destinations init
필요한 역할을 결합하라는 메시지가 표시되면
y
를 입력합니다.다음 역할이 결합됩니다.
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
클러스터에 GKE용 워크로드 아이덴티티 제휴 사용 설정
클러스터에 이미 GKE용 워크로드 아이덴티티 제휴가 사용 설정된 경우 이 단계를 건너뛸 수 있습니다.
GKE용 워크로드 아이덴티티 제휴는 향상된 보안 속성 및 관리 편의성으로 인해 GKE 내에서 실행되는 애플리케이션에서 Google Cloud 서비스에 액세스하는 데 권장되는 방식입니다. 워크로드 아이덴티티를 사용하려면 Eventarc를 사용하여 GKE 이벤트도 전달해야 합니다.
기존 클러스터에 GKE용 워크로드 아이덴티티 제휴를 사용 설정하려면 워크로드 아이덴티티 사용을 참조하세요.
기존 이벤트 트리거 식별
기존 이벤트 트리거를 마이그레이션하기 전에 트리거 세부정보를 검색해야 합니다.
GKE 클러스터의 기존 이벤트 트리거를 나열합니다.
gcloud beta events triggers list --namespace EVENTS_NAMESPACE
EVENTS_NAMESPACE
를 이벤트 브로커의 네임스페이스로 바꿉니다.출력은 다음과 비슷합니다.
TRIGGER EVENT TYPE TARGET ✔ trigger-id google.cloud.pubsub.topic.v1.messagePublished cloud-run-service-name
Eventarc 트리거를 만들려면 주제 ID가 필요합니다. 기존 이벤트 트리거의 주제 ID를 검색합니다.
gcloud beta events triggers describe TRIGGER_ID \ --platform gke --namespace EVENTS_NAMESPACE \ --format="flattened(serialized_source.spec.topic,serialized_trigger.spec.filter.attributes.type,serialized_trigger.spec.subscriber.ref.name,serialized_trigger.spec.subscriber.ref.namespace)"
TRIGGER_ID
를 기존 이벤트 트리거의 ID나 정규화된 식별자로 바꿉니다.출력은 다음과 비슷합니다.
topic: topic-id type: google.cloud.pubsub.topic.v1.messagePublished name: cloud-run-service-name namespace: events
기존 트리거를 대체할 Eventarc 트리거 만들기
Eventarc 트리거를 만들기 전에 Eventarc에서 GKE 대상에 대한 이벤트를 관리할 수 있도록 사용자 관리 서비스 계정을 설정하고 특정 역할을 부여합니다.
Google Cloud 서비스 계정(GSA)를 만듭니다.
TRIGGER_GSA=SERVICE_ACCOUNT_NAME gcloud iam service-accounts create $TRIGGER_GSA
SERVICE_ACCOUNT_NAME
을 6~30자(영문 기준) 사이의 이름으로 바꿉니다. 소문자 영숫자 문자와 대시를 포함할 수 있습니다.서비스 계정에
pubsub.subscriber
및monitoring.metricWriter
역할을 부여합니다.PROJECT_ID=$(gcloud config get-value project) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
기존 이벤트 트리거 구성에 따라 새 Eventarc 트리거를 만듭니다. 대상 서비스, 클러스터, 주제 ID를 포함한 모든 인수는 기존 이벤트 트리거의 인수와 일치해야 합니다.
gcloud eventarc triggers create EVENTARC_TRIGGER_NAME \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location LOCATION \ --destination-gke-service=DESTINATION_SERVICE \ --destination-gke-cluster=CLUSTER_NAME \ --destination-gke-location=CLUSTER_LOCATION \ --destination-gke-namespace=EVENTS_NAMESPACE \ --destination-gke-path=/ \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
EVENTARC_TRIGGER_NAME
을 새 Eventarc 트리거의 이름으로 바꾸고 TOPIC_ID를 이전에 검색한 Pub/Sub 주제 ID로 바꿉니다.이렇게 하면 Pub/Sub 주제 ID에 대한 Eventarc 트리거가 생성됩니다.
트리거가 성공적으로 생성되었는지 확인하세요.
gcloud eventarc triggers list
출력은 다음과 비슷합니다.
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE eventarc-trigger-name google.cloud.pubsub.topic.v1.messagePublished Yes
마이그레이션 테스트 및 출력 확인
마이그레이션을 테스트하려면 Pub/Sub 주제에 게시하여 테스트 이벤트를 트리거한 후 각각의 기존 이벤트 트리거와 Eventarc 트리거에 이벤트가 최소 하나 이상 전달되는지 확인합니다.
예를 들어 테스트 이벤트를 트리거한 후의 출력은 중복되며 다음과 유사합니다.
Hello, World! ID: 2896291125947199 Hello, World! ID: 2896291125947199
또한 안내 제공을 위해 다음과 같이 이벤트 수신자가 이벤트 데이터를 표시할 수 있는 시나리오를 사용할 수 있습니다.
메시지를 Pub/Sub 주제에 게시합니다.
gcloud pubsub topics publish TOPIC_ID \ --message "Hello, World!"
이벤트와 이벤트의 성공적인 전달 여부를 확인합니다. 예를 들어 수신 GKE 서비스 로그를 확인합니다.
kubectl logs \ --selector serving.knative.dev/service=DESTINATION_SERVICE \ -c user-container \ -n EVENTS_NAMESPACE \ --tail=100
두 트리거의 출력은 다음과 유사하며
Context Attributes
및Extensions
에서만 차이가 있습니다. Eventarc로 마이그레이션한 후 이벤트 수신자 변경이 필요하지 않도록 하려면subscription
데이터를 제외하고 실제 메시지 데이터가 동일해야 합니다.Eventarc 이벤트:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z datacontenttype: application/json Data, { "subscription": "projects/project-id/subscriptions/eventarc-us-central1-eventarc-trigger-name-sub-567", "message": { "data": "V29ybGQ=", "messageId": "2759155988927083", "publishTime": "2021-07-22T17:47:19.964Z" } }
Knative serving 이벤트:
☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: google.cloud.pubsub.topic.v1.messagePublished source: //pubsub.googleapis.com/projects/project-id/topics/topic-name id: 2759155988927083 time: 2021-07-22T17:47:19.964Z dataschema: https://raw.githubusercontent.com/googleapis/google-cloudevents/master/proto/google/events/cloud/pubsub/v1/data.proto datacontenttype: application/json Extensions, knativearrivaltime: 2021-07-22T17:47:20.723302362Z knsourcetrigger: link0.09767362059083662 traceparent: 00-f3cc6d754d361a0e49e83e5973fa3565-b4a20ef4ecffe96b-00 Data, { "subscription": "cre-src_events_source-for-trigger-name_5ffa9638-8cab-4010-900a-2edb275d9eaf", "message": { "messageId": "2759155988927083", "data": "V29ybGQ=", "publishTime": "2021-07-22T17:47:19.964Z" } }
마이그레이션 후 정리
트리거를 Eventarc로 마이그레이션하는 작업을 테스트하고 확인한 후에는 원본 이벤트 트리거를 삭제할 수 있습니다.
원본 이벤트 트리거를 삭제합니다.
gcloud beta events triggers delete TRIGGER_NAME \ --platform gke \ --namespace EVENTS_NAMESPACE \ --quiet
기존 Knative serving 트리거를 Eventarc로 마이그레이션했습니다.