瞭解如何使用 Workload Identity Federation for GKE 驗證 Knative serving 服務,以存取 Google Cloud API,例如 Compute API、Storage 和 Database API,或 Machine Learning API。
如要驗證 Knative serving 服務,請務必執行下列操作:
- 在叢集中啟用 Workload Identity Federation for GKE
- 設定權限
- 將 Kubernetes 服務帳戶 (KSA) 繫結至 Google 服務帳戶 (GSA)
完成這些步驟後,您就可以部署新的 Knative serving 服務,並使用您建立的身分。
在叢集上啟用 Workload Identity Federation for GKE
如要使用 Knative serving 設定 Workload Identity Federation for GKE,可以設定機群 Workload Identity Federation,而不使用 Google Cloud 服務帳戶 JSON 檔案。
設定權限以啟用所有指標
如要啟用指標 (例如向 Google Cloud Observability 回報要求計數或要求延遲時間),您必須授予 Cloud Monitoring 的寫入權限。舉例來說,您可以將監控指標寫入者角色 (roles/monitoring.metricWriter) 授予與 Knative serving 相關聯的 Google 服務帳戶,因為該角色包含寫入監控資料的必要權限。如要進一步瞭解如何建立 Google 服務帳戶,請參閱「使用服務帳戶」一文。
繫結服務帳戶
您需要設定 Kubernetes 服務帳戶 (KSA) 的關係,才能做為 Google 服務帳戶 (GSA)。您繫結的任何工作負載以 KSA 形式執行時,存取 Google Cloud API 時會自動以 GSA 形式驗證。您繫結的 KSA 必須位於 Knative serving 服務的叢集和命名空間中,您要為該服務使用 Workload Identity Federation for GKE。GSA 可以屬於與叢集所在專案不同的專案。 Google Cloud Google Cloud
如果沒有 GSA,請建立一個;否則請跳到下一個步驟。您可以在機構的任何 Google Cloud 專案中建立 GSA,供 Knative serving 使用,然後在執行 Knative serving 服務的Google Cloud 專案中使用該 GSA。
如要建立新的 GSA,請執行下列指令:
gcloud iam service-accounts create GSA_NAME
將 GSA_NAME 替換為新的 Google 服務帳戶名稱。
如要進一步瞭解如何搭配使用 Google 服務帳戶與 Knative serving 服務,請參閱「使用服務帳戶」。
請確認 GSA 具備您需要的 IAM 角色。您可以使用下列指令授予其他角色:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role "ROLE_NAME"
更改項目:
- PROJECT_ID:您的 Google 服務帳戶所在的專案 ID。 Google Cloud
- GSA_NAME 改為您的 Google 服務帳戶名稱。
- ROLE_NAME,其中包含要指派給 GSA 的 IAM 角色,例如
roles/monitoring.metricWriter。
如果 Kubernetes 服務帳戶不存在,請在與 Knative serving 服務相同的 Kubernetes 命名空間中建立一個帳戶;否則,請跳至下一個步驟:
kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
繫結 Kubernetes 和 Google 服務帳戶來建立身分,然後將其部署至叢集:
建立 KSA 與 GSA 之間的 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
部署新服務,以使用 Workload Identity Federation for GKE
部署新的 Knative serving 服務,使用您建立的 Workload Identity Federation for GKE。
控制台
前往 Google Cloud 控制台的 Knative Serving:
如要設定要部署的新服務,請按一下「Create Service」(建立服務)。如要設定現有服務,請按一下該服務,然後按一下「編輯及部署新的修訂版本」。
在「進階設定」下方,按一下「容器」。
點按「Service account」(服務帳戶) 下拉式選單,然後選取所需服務帳戶。
按一下「下一步」繼續前往下一個部分。
在「設定這項服務的觸發方式」部分,選取要用來叫用服務的連線。
按一下「建立」,將映像檔部署到 Knative serving,然後等待部署作業完成。
指令列
如果是現有服務,請執行
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 serving 服務名稱。
在你的本機檔案中,更新
serviceAccountName:屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: KSA_NAME
取代
- SERVICE 改為 Knative serving 服務的名稱。
- KSA_NAME,並使用您建立 workload identity 時所用的 Kubernetes 服務帳戶。
執行下列指令,將設定部署至 Knative serving 服務:
gcloud run services replace service.yaml
將現有服務遷移至 Workload Identity Federation for GKE
如果您在現有叢集上啟用 Workload Identity Federation for GKE,則必須遷移該叢集上要使用 Workload Identity Federation for GKE 的每項服務。瞭解如何遷移現有服務。
後續步驟
瞭解如何管理服務存取權。