瞭解如何透過 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 服務帳戶,並授予必要的 IAM 角色
完成這些步驟後,您就能部署新的 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 服務相關聯的 Kubernetes 服務帳戶,因為該角色包含寫入監控資料的必要權限。
將 IAM 角色授予 Kubernetes 服務帳戶
以您設定的 Kubernetes 服務帳戶執行的任何 Knative serving 服務,在存取 Google Cloud API 時,都會自動使用其聯合身分進行驗證。Kubernetes 服務帳戶必須位於 Knative serving 服務的叢集和命名空間中,您才能為該服務使用 Workload Identity Federation for GKE。
如果沒有 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 專案 ID 替換為目標 Google Cloud 資源所在的專案 ID。
- PROJECT_NUMBER,其中Google Cloud 是 Kubernetes 服務帳戶和 Knative serving 服務所在的叢集專案編號。
- PROJECT_ID,其中包含 Kubernetes 服務帳戶和 Knative serving 服務所在的叢集專案 ID。 Google Cloud
- 將 K8S_NAMESPACE 和 KUBERNETES_SERVICEACCOUNT 替換成 Kubernetes 服務帳戶的命名空間和名稱。
- ROLE_NAME,例如
roles/monitoring.metricWriter。
部署新服務,以使用 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 KUBERNETES_SERVICEACCOUNT
更改項目:
- 將 SERVICE 替換成 Knative serving 服務的名稱。
- KUBERNETES_SERVICEACCOUNT,並使用您建立 workload identity 時使用的 Kubernetes 服務帳戶。
如為新服務,請使用
gcloud run deploy指令搭配--service-account參數,設定 Kubernetes 服務帳戶:gcloud run deploy --image IMAGE_URL --service-account KUBERNETES_SERVICEACCOUNT
更改項目:
- IMAGE_URL,並參照容器映像檔,例如
gcr.io/cloudrun/hello。 - KUBERNETES_SERVICEACCOUNT,並使用您建立 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: KUBERNETES_SERVICEACCOUNT
取代
- SERVICE,並將其替換為 Knative serving 服務的名稱。
- KUBERNETES_SERVICEACCOUNT,並使用您建立工作負載身分時使用的 Kubernetes 服務帳戶。
執行下列指令,將設定部署至 Knative serving 服務:
gcloud run services replace service.yaml
將現有服務遷移至 Workload Identity Federation for GKE
如果您在現有叢集上啟用 Workload Identity Federation for GKE,則必須遷移該叢集上要使用 Workload Identity Federation for GKE 的每項服務。瞭解如何遷移現有服務。
後續步驟
瞭解如何管理服務存取權。