註冊外部 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.com
iamcredentials.googleapis.com
sts.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 Agent,您必須建立自訂 SCC。
下列 SCC 定義範例指定 Connect 代理程式必須符合的一組條件,才能獲叢集接受:
# 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
Fleet Workload Identity 需求
如果平台為叢集建立公開 OIDC 端點 (或允許您建立端點),或者叢集已啟用 Kubernetes 服務帳戶簽發者探索功能,您就可以註冊已啟用 Fleet Workload Identity 的連結叢集。如果無法滿足這些需求,就必須使用 Google Cloud 服務帳戶註冊連結的叢集以進行驗證。
如要瞭解特定叢集類型,請參閱下列文章:
- OpenShift 叢集:如要註冊這類叢集,必須先設定自訂 SCC,然後啟用機群 Workload Identity,如上所述。
- kind 叢集:必須啟用服務帳戶簽發者探索,才能使用機群 Workload Identity。從 Kubernetes 1.20 版開始,這項功能預設為啟用。如要啟用這項功能,請按照「服務帳戶符記用量預測」一文中的操作說明進行。啟用服務帳戶權杖量專案時,系統會自動啟用服務帳戶簽發者探索功能。
後續步驟
按照操作說明註冊叢集。