註冊外部 Kubernetes 叢集 Google Cloud 時,除了完成一般必要條件,還需要執行下列步驟。
確認網路連線
如要順利註冊叢集,請確保 Kubernetes 叢集可以連上下列網域。
cloudresourcemanager.googleapis.com會解析與叢集連線的 Google Cloud 專案相關中繼資料。oauth2.googleapis.com,針對gkeconnect.googleapis.com取得代理程式作業的短期 OAuth 權杖。gkeconnect.googleapis.com,建立接收要求和問題回應的管道。 Google Cloudgkehub.googleapis.com,建立與您要連線的叢集相應的 Google Cloud端機群成員資格資源 Google Cloud。www.googleapis.com,驗證傳入服務要求中的服務權杖。 Google Cloudgcr.io和storage.googleapis.com,即可提取 GKE Connect Agent 映像檔。
如要使用機群 Workload Identity 註冊叢集,也必須能連上下列網域:
securetoken.googleapis.comiamcredentials.googleapis.comsts.googleapis.com
如果 Connect 使用 Proxy,您也必須將相關網域新增至 Proxy 的許可清單。
如果您使用 gcloud 註冊 Kubernetes 叢集,也必須在執行 gcloud 指令的環境中連上這些網域。
使用 VPC Service Controls
如要在應用程式中使用 VPC Service Controls 提升資料安全性,請務必將下列服務納入服務範圍:
- Resource Manager API (
cloudresourcemanager.googleapis.com) - GKE Connect API (
gkeconnect.googleapis.com) - Fleet API (
gkehub.googleapis.com)
如要註冊啟用機群 Workload Identity 的叢集,您還需要下列服務:
- IAM Service Account Credentials API (
iamcredentials.googleapis.com) - Security Token Service API (
sts.googleapis.com)
您也需要設定私人連線,才能存取相關 API。如需詳細步驟,請參閱「設定私人連線」。
設定身分
所有手動叢集註冊選項 (不含 Google Cloud ) 都需要您設定 Google 驗證。可以是下列任一項:
- Fleet Workload Identity (建議使用,如適用)。如要進一步瞭解啟用機群 Workload Identity 的優點,請參閱「使用機群 Workload Identity」。
- Google Cloud 服務帳戶
如果附加叢集符合附加叢集必要條件,即可註冊並啟用機群 Workload Identity,詳情請參閱下文。否則,請使用 Google Cloud 服務帳戶註冊連結的叢集以進行驗證。下一節將說明如何建立服務帳戶。
使用 gcloud建立 Google Cloud 服務帳戶
如要以 Google Cloud 服務帳戶手動註冊叢集,您必須備妥含有服務帳戶憑證的 JSON 檔案。為遵守最低權限原則,建議您為註冊的各個 Kubernetes 叢集建立專屬服務帳戶,並只將相應叢集的 IAM 角色繫結至服務帳戶。
如要建立這個檔案,請執行下列步驟:
gcloud
執行下列指令,建立服務帳戶:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
執行下列指令,列出專案的所有服務帳戶:
gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID
如果您要為註冊的每個 Kubernetes 叢集建立專屬服務帳戶,請使用叢集成員資格名稱的 IAM 條件,將 gkehub.connect IAM 角色繫結至相應叢集的服務帳戶:
MEMBERSHIP_NAME=MEMBERSHIP_NAME
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/gkehub.connect" \
--condition "expression=resource.name == \
'projects/${FLEET_HOST_PROJECT_ID}/locations/global/memberships/${MEMBERSHIP_NAME}',\
title=bind-${SERVICE_ACCOUNT_NAME}-to-${MEMBERSHIP_NAME}"
或者,您也可以不使用條件,將專案中所有叢集的角色繫結至服務帳戶。
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
--member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/gkehub.connect"
下載服務帳戶的私密金鑰 JSON 檔案。您會在註冊叢集時使用這個檔案:
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud iam service-accounts keys create LOCAL_KEY_PATH \
--iam-account=SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com \
--project=${FLEET_HOST_PROJECT_ID}
其中:
附加叢集必要條件
視要註冊為連結叢集的第三方 Kubernetes 叢集類型而定,您可能必須符合一些額外需求,才能安裝 Connect Agent 和/或使用機群 Workload Identity。
設定安全環境限制 (SCC) (OpenShift 叢集)
在 OpenShift OKE 和 OKD 叢集上,管理員可以使用 SCC 控制 Pod 的權限。如要在叢集中安裝 Connect 代理程式,您需要建立自訂 SCC。
下列 SCC 範例指定 Connect Agent 必須符合的一組條件,才能加入叢集:
# Connect Agent SCC apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: gke-connect-scc allowPrivilegeEscalation: false # This is redundant with non-root + disallow privilege escalation, # but we provide it for defense in depth. requiredDropCapabilities: - ALL runAsUser: type: MustRunAsNonRoot seLinuxContext: type: RunAsAny supplementalGroups: type: MustRunAs ranges: - min: 1 max: 65535 fsGroup: type: MustRunAs ranges: - min: 1 max: 65535 volumes: - secret - projected readOnlyRootFilesystem: true seccompProfiles: - docker/default users: groups: # Grants all service accounts in the gke-connect namespace access to this SCC - system:serviceaccounts:gke-connect
假設您已將 SCC 定義儲存為 gke-connect-scc.yaml,請使用 OpenShift oc 指令列工具,為叢集建立 gke-connect-scc SCC,如下所示:
$ oc create -f gke-connect-scc.yaml
如要確認自訂 SCC 是否已建立,請執行下列 oc 指令:
$ oc get scc | grep gke-connect-scc
機群 Workload Identity 規定
如果平台為叢集建立公開 OIDC 端點 (或允許您建立端點),或者叢集已啟用 Kubernetes 服務帳戶簽發者探索功能,您就可以註冊已啟用 Fleet Workload Identity 的連結叢集。如果無法滿足這些需求,就必須使用 Google Cloud 服務帳戶註冊連結的叢集以進行驗證。
如要瞭解特定叢集類型,請參閱下列文章:
- OpenShift 叢集:如要註冊這類叢集,必須先設定自訂 SCC,然後啟用機群 Workload Identity,如上所述。
- kind 叢集:必須啟用服務帳戶簽發者探索,才能使用機群 Workload Identity。從 Kubernetes 1.20 版開始,這項功能預設為啟用。如要啟用這項功能,請按照「服務帳戶符記用量預測」一文中的操作說明進行。啟用服務帳戶權杖量專案後,系統會自動啟用服務帳戶簽發者探索功能。
後續步驟
按照操作說明註冊叢集。