瞭解如何使用 Workload Identity Federation for GKE 驗證 Knative 服務服務,存取 Google Cloud API,例如 Compute API、Storage 和 Database API,或是 Machine Learning API。
如要驗證 Knative serving 服務,請完成下列步驟:
- 在叢集中啟用 Workload Identity Federation for GKE
- 設定權限
- 將 Kubernetes 服務帳戶 (KSA) 繫結至 Google 服務帳戶 (GSA)
完成這些步驟後,您就可以部署新的 Knative 服務,並使用您建立的身分。
在叢集上啟用 Workload Identity Federation for GKE
如要使用 Knative Serving 設定 GKE 適用的工作負載身分聯盟,可以設定車隊工作負載身分聯盟,而不必使用 Google Cloud 服務帳戶 JSON 檔案。
設定權限以啟用所有指標
如要啟用指標 (例如向 Google Cloud Observability 傳送報表要求計數或要求延遲時間),您必須授予 Cloud Monitoring 的寫入權限。舉例來說,您可以將監控指標寫入者角色 (roles/monitoring.metricWriter
) 授予與 Knative 服務相關聯的 Google 服務帳戶,因為該角色包含寫入監控資料的必要權限。如要進一步瞭解如何建立 Google 服務帳戶,請參閱「使用服務帳戶」一文。
繫結服務帳戶
您必須設定 Kubernetes 服務帳戶 (KSA) 的關係,才能讓該帳戶做為 Google 服務帳戶 (GSA)。您繫結的任何工作負載以 KSA 身分執行時,存取 Google Cloud API 時會自動以 GSA 身分驗證。您繫結的 KSA 必須位於 Knative 服務服務的叢集和命名空間中,您要為該服務使用 Workload Identity Federation for GKE。GSA 可以屬於與叢集所在專案不同的專案。 Google Cloud Google Cloud
如果沒有 GSA,請建立一個;否則請跳到下一個步驟。您可以在機構的任何 Google Cloud 專案中建立 GSA,供 Knative 服務使用,然後在 Knative 服務執行的Google Cloud 專案中使用該 GSA。
如要建立新的 GSA,請執行下列指令:
gcloud iam service-accounts create GSA_NAME
將 GSA_NAME 替換為新的 Google 服務帳戶名稱。
如要進一步瞭解如何搭配使用 Google 服務帳戶與 Knative 服務,請參閱「使用服務帳戶」。
請確認 GSA 具有您需要的身分與存取權管理角色。您可以使用下列指令授予其他角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role "ROLE_NAME"
取代:
- PROJECT_ID:Google 服務帳戶所在的 Google Cloud 專案 ID。
- GSA_NAME 改為您的 Google 服務帳戶名稱。
- ROLE_NAME,例如
roles/monitoring.metricWriter
。
如果 Kubernetes 服務帳戶不存在,請在與 Knative 服務服務相同的 Kubernetes 命名空間中建立一個帳戶;否則,請跳至下一個步驟:
kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
繫結 Kubernetes 和 Google 服務帳戶,建立身分並部署至叢集:
建立兩個服務帳戶之間的 IAM 政策繫結,允許 KSA 模擬 GSA。
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \ GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com
取代:
使用 GSA 的電子郵件地址,將
iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID
註解新增至 KSA。kubectl annotate serviceaccount \ --namespace K8S_NAMESPACE KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com
取代:
- K8S_NAMESPACE/KSA_NAME,並提供您建立繫結的 Kubernetes 服務帳戶命名空間和名稱。
- GSA_NAME@GSA_PROJECT_ID,並提供 Google 服務帳戶名稱和您建立繫結的專案 ID。 Google Cloud
部署新服務,以使用 GKE 適用的工作負載身分聯盟
部署新的 Knative 服務服務,使用您建立的 Workload Identity Federation for GKE。
控制台
前往 Google Cloud 控制台的 Knative Serving:
如要設定部署的新服務,請按一下「建立服務」。如要設定現有服務,請按一下該服務,然後按一下「Edit & Deploy New Revision」(編輯及部署新的修訂版本)。
在「進階設定」下方,按一下「容器」。
按一下「服務帳戶」下拉式選單,然後選取所需服務帳戶。
按一下「下一步」繼續前往下一個部分。
在「設定這項服務的觸發方式」部分,選取要用來叫用服務的連線。
按一下「建立」,將映像檔部署到 Knative 服務,然後等待部署作業完成。
指令列
如果是現有服務,請執行
gcloud run services update
指令,並使用下列參數設定 Kubernetes 服務帳戶:gcloud run services update SERVICE --service-account KSA_NAME
取代:
- SERVICE 改為 Knative serving 服務的名稱。
- KSA_NAME,並使用您建立 workload identity 時所用的 Kubernetes 服務帳戶。
如果是新服務,請執行
gcloud run deploy
指令並搭配--service-account
參數,設定 Kubernetes 服務帳戶:gcloud run deploy --image IMAGE_URL --service-account KSA_NAME
取代:
- IMAGE_URL,並參照容器映像檔,例如
gcr.io/cloudrun/hello
。 - KSA_NAME,並使用您建立 workload identity 時所用的 Kubernetes 服務帳戶。
- IMAGE_URL,並參照容器映像檔,例如
YAML
您可以使用 gcloud run services describe
指令和 --format=export
標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace
指令部署這些變更。請務必只修改指定的屬性。
將服務設定下載到本機工作區中名為
service.yaml
的檔案:gcloud run services describe SERVICE --format export > service.yaml
將 SERVICE 替換為 Knative 服務服務名稱。
在你的本機檔案中,更新
serviceAccountName:
屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: KSA_NAME
取代
- SERVICE 改為 Knative serving 服務的名稱。
- KSA_NAME,您用來建立工作負載身分的 Kubernetes 服務帳戶。
執行下列指令,將設定部署至 Knative 服務服務:
gcloud run services replace service.yaml
將現有服務遷移至 Workload Identity Federation for GKE
如果您在現有叢集上啟用 Workload Identity Federation for GKE,則必須遷移該叢集上要使用 Workload Identity Federation for GKE 的每項服務。瞭解如何遷移現有服務。
後續步驟
瞭解如何管理服務存取權。