事前準備

註冊外部 Kubernetes 叢集 Google Cloud 時,除了完成一般必要條件,還需要執行下列步驟。

確認網路連線

如要順利註冊叢集,請確保 Kubernetes 叢集可以連上下列網域。

  • cloudresourcemanager.googleapis.com 會解析與叢集連線的 Google Cloud 專案相關中繼資料。
  • oauth2.googleapis.com,取得針對 gkeconnect.googleapis.com 執行的代理程式作業短期 OAuth 權杖。
  • gkeconnect.googleapis.com,建立接收要求和問題回應的管道。 Google Cloud
  • gkehub.googleapis.com,建立與您要連線的叢集相應的 Google Cloud端機群成員資格資源 Google Cloud。
  • www.googleapis.com,驗證傳入服務要求的服務權杖。 Google Cloud
  • gcr.iostorage.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 驗證。可以是下列任一項:

如果附加叢集符合附加叢集必要條件,即可註冊啟用機群 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}

其中:

  • FLEET_HOST_PROJECT_ID 是您要在當中註冊叢集的 Google Cloud 專案 ID。瞭解如何找到這個值
  • SERVICE_ACCOUNT_NAME 是您為 [服務帳戶]選擇的顯示名稱。
  • MEMBERSHIP_NAME 是您在註冊叢集時,為叢集選用的專屬成員名稱。
  • LOCAL_KEY_PATH 是要用來儲存服務帳戶私密金鑰 (JSON 檔案) 的本機檔案路徑。建議您以服務帳戶名稱和專案 ID 為檔案命名,例如 /tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json

附加叢集必要條件

視您要註冊為連結叢集的第三方 Kubernetes 叢集類型而定,您可能必須符合一些額外需求,才能安裝 Connect Agent 和/或使用機群 Workload Identity。

設定安全環境限制 (SCC) (OpenShift 叢集)

OpenShift OKEOKD 叢集上,管理員可以使用 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 版開始,這項功能預設為啟用。如要啟用這項功能,請按照「服務帳戶符記用量預測」一文中的操作說明進行。啟用服務帳戶權杖量專案時,系統會自動啟用服務帳戶簽發者探索功能。

後續步驟

按照操作說明註冊叢集