管理 Google 服務

Distributed Cloud Connected 支援部署多項 Google Cloud 服務。這些服務工作負載會在 Distributed Cloud 連線叢集上的 Kubernetes 容器中執行。

支援的 Google Cloud 服務

Distributed Cloud Connected 支援部署下列Google Cloud 服務:

服務類型 包含在 GDC connected 費用中 費用另計
運算 僅限軟體的 Google Distributed Cloud
Google Distributed Cloud 的 VM 執行階段
客體作業系統
(您必須自行取得授權)
儲存空間 Container Storage Interface (CSI)
混合式儲存空間
軟體定義儲存空間 (SDS),例如 Symcloud Storage(您必須自行取得授權)

網路 Edge Network API
VLAN 支援
GKE 自訂網路介面 (CNI) 外掛程式
GKE 隨附的 L4 負載平衡器
不適用
AI/機器學習 在容器中部署 AutoML 模型 不適用
資料庫 AlloyDB Omni (預先發布版)
第三方資料庫解決方案,例如 MongoDB
(您必須自行取得授權)
觀測能力 Cloud Logging
Cloud Monitoring
Cloud Logging API GDCc 記錄和指標
Prometheus,適用於中斷連線的觀測功能
應用程式層級的自訂記錄和指標
設定管理 Config Sync
在 Distributed Cloud 連線中使用機群套件
機群套件 (搶先版)
不適用
管理 Google Cloud 控制台
中的 Google Kubernetes Engine 資訊主頁 連線閘道
kubectl 本機工具
Distributed Cloud 連線軟體升級
不適用
安全性 Cloud Key Management Service 整合
Self-Encrypting Disk (SED) 磁碟機
Fleet Workload Identity
稽核記錄
不適用

必要條件

如要在 Distributed Cloud Connected 上部署 Google Cloud 服務,請先完成本節列出的必要條件。

取得叢集憑證

使用下列指令取得存取目標叢集的憑證:

 gcloud container hub memberships get-credentials CLUSTER_ID \
       --project="PROJECT_ID"

更改下列內容:

  • CLUSTER_ID:目標叢集的名稱。
  • PROJECT_ID:目標 Google Cloud 專案的 ID。

建立或選取叢集

如果尚未建立 Distributed Cloud 連線叢集,請按照「建立叢集」一文的說明建立。建立叢集時,請至少指定 8 個虛擬 IP 位址 (VIP)。這些 VIP 會由執行 Google Cloud 服務工作負載的 Kubernetes 容器使用。

如果使用現有叢集,請執行下列指令,確認該叢集有足夠的 VIP:

 kubectl get cluster --all-namespaces -o jsonpath="{.items[0].spec.loadBalancer.addressPools}"

指令會傳回類似以下內容的輸出結果:

[
  {
    "addresses": [
      "10.200.11.188-10.200.11.196"
    ],
    "name": "loadBalancerAddressPool-1"
  }
]

如果叢集佈建的 VIP 不足,系統會顯示下列錯誤,其中 n 是所需的 VIP 數量,m 則是叢集上發現的 VIP 數量:

Cluster has less than n external IPs, got m.

如果收到這則錯誤訊息,請刪除叢集並重新建立,確保有足夠的 VIP 數量。

設定 Google Cloud 服務子網域

在 Distributed Cloud 連線區域中部署第一個 Google Cloud 服務之前,您可以自訂子網域,該區域中部署的所有 Google Cloud 服務都會監聽連線。在該 Distributed Cloud 區域部署至少一項服務後,就無法修改這個子網域。

使用下列指令查看子網域設定:

kubectl -n dns-system get celldns cell-dns -o yaml

指令會傳回類似以下內容的輸出結果:

apiVersion: system.private.gdc.goog/v1alpha1
kind: CellDNS
metadata:
  name: cell-dns
  namespace: dns-system
spec:
  delegatedSubdomain: private.goog

使用下列指令修改子網域設定:

kubectl -n dns-system edit celldns cell-dns

在 Distributed Cloud connected 上部署服務 Google Cloud

如要在 Distributed Cloud 連線叢集上部署 Google Cloud 服務,請按照該服務說明文件中的部署步驟操作。

設定已部署的 Google Cloud 服務

本節說明部署後可選擇完成的設定步驟,具體取決於您的業務需求。

將內部 DNS 的 DNS 查詢轉送至叢集的 DNS

在 Distributed Cloud 連線叢集上部署 Google Cloud 服務時,系統會在叢集上部署該服務專用的 DNS 伺服器。建議您將服務子網域的 DNS 查詢轉送至叢集上新建立的 DNS 伺服器。

  1. 使用下列指令取得叢集子網域:

    CLUSTER_SUBDOMAIN=$(kubectl get configmap -n \
        $(kubectl get clusters -A -o jsonpath="{.items[0].metadata.namespace}") \
        dns-prefix -o jsonpath="{.data.dnsPrefix}")
    DELEGATED_SUBDOMAIN=$(kubectl get celldns -n dns-system cell-dns -o \
      jsonpath="{.spec.delegatedSubdomain}")
    CLUSTER_FQDN="${CLUSTER_SUBDOMAIN?}.${DELEGATED_SUBDOMAIN?}"
    echo "${CLUSTER_FQDN?}"
    

    最後一個指令會傳回類似以下的輸出內容:

    my-zone.google.private.goog
    
  2. 使用下列指令取得叢集內 DNS 伺服器的 VIP:

    DNS_EXT_IP=$(k -n dns-system get service gpc-coredns-external-tcp -o "jsonpath={.status.loadBalancer.ingress[0].ip}")
    
  3. 設定內部 DNS 伺服器,將已部署 Google Cloud 服務的 DNS 查詢轉送至上一步驟取得的 VIP。例如:

    • 如果是 dnsmasq,請在 /etc/dnsmasq.conf 中新增下列項目:

      server=/${CLUSTER_FQDN?}/${DNS_EXT_IP?}
      
    • 如果是 CoreDNS,請將下列內容新增至 Corefile

      ${CLUSTER_FQDN?}:53 {
        errors
        cache 30
        forward . ${DNS_EXT_IP?} {
          max_concurrent 1000
        }
      }
      

測試 DNS 解析

使用下列 dig 指令測試網域是否能正確解析。請特別留意 ANSWER SECTION

 dig "ais-core.${CLUSTER_FQDN?}"

指令會傳回類似以下內容的輸出結果:

...
;; ANSWER SECTION:
ais-core.my-zone.google.private.goog. 300 IN A 10.200.0.0
...

擷取已部署 Google Cloud 服務的自行簽署憑證

在 Distributed Cloud 連線叢集上部署 Google Cloud 服務時,Distributed Cloud 連線會核發自行簽署的憑證,然後使用該憑證加密該服務的網路流量。建議您擷取這項憑證,並設定您的業務環境來信任該憑證。

如要取得 PEM 編碼格式的憑證,請使用下列指令:

 kubectl get secret -n cert-manager-cluster-resources web-ca-cert -o jsonpath="{.data.ca\.crt}" | base64 -d

Distributed Cloud connected 會在叢集內產生多個信任組合。這些信任組合會以 ConfigMap 形式儲存在叢集的每個命名空間中。特色如下:

  • trust-store-internal-only。包含 Distributed Cloud 連結內部服務的憑證授權單位 (CA)。
  • trust-store-root-ext。包含 trust-store-root-ext 中的所有 CA,以及簽署目標Google Cloud 服務自行簽署憑證的 CA。如要讓 Pod 存取目標 Google Cloud 服務,請在 Pod 中掛接這個信任組合。
  • trust-store-user-ext。包含 trust-store-root-ext 中的所有 CA,以及您手動新增的任何 CA。如果 Pod 需要存取目標 Google Cloud 服務,以及使用您手動新增的 CA 簽署憑證的任何內部資源,請在 Pod 中掛接這個套件。

使用下列指令查看目標 ConfigMap:

 kubectl -n default get configmap trust-store-user-root-ext -o yaml

以下輸出範例顯示典型的 trust-store-user-root-ext ConfigMap 資源:

apiVersion: v1
binaryData:
  ca.jks: WW91IGFyZSBhd2Vzb21lIQo=
data:
  ca.crt: |-
    -----BEGIN CERTIFICATE-----
    WW91IGFyZSBncmVhdCEK
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    WW91IGFyZSBmYW50YXN0aWMhCg==
    -----END CERTIFICATE-----
kind: ConfigMap
metadata:
  labels:
    trust.cert-manager.io/bundle: trust-store-user-root-ext
  name: trust-store-user-root-ext
  namespace: default

設定已部署的 Google Cloud 服務,信任您自己的憑證

您可以在 Distributed Cloud 連線叢集中建立 TLS 密鑰,並在 cert-manager-cluster-resources 命名空間中以 security.private.gdc.goog/bundles=trust-store-user-root-ext 註解進行註解。這樣一來,已部署的 Google Cloud服務就能信任內部第三方服務,方便兩者交換資料。

將這個密鑰套用至叢集後,部署的 Google Cloud 服務會信任密鑰參照的 ca.crt 檔案中儲存的 CA 憑證。例如:

apiVersion: v1
data:
  ca.crt: base64EncodedCaCert
  tls.crt: base64EncodedCert
  tls.key: base64EncodedKey
kind: Secret
metadata:
  annotations:
    security.private.gdc.goog/bundles: trust-store-user-root-ext
  name: my-corporate-cert
  namespace: cert-manager-cluster-resources
type: kubernetes.io/tls

設定驗證提供者

您可以設定驗證供應商,透過已部署的Google Cloud 服務使用者介面登入。以下範例顯示 OpenID Connect 提供者的設定:

apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
  name: default
  namespace: kube-public
spec:
  authentication:
  - name: "google-oidc"
    oidc:
      clientID: "my-supersecret-client-id.apps.googleusercontent.com"
      clientSecret: "my-supersecret-secret"
      issuerURI: "https://accounts.google.com"
      scopes: "email"
      userClaim: "email"
  name: "default"

詳情請參閱「為個別叢集設定 GKE 身分認證服務」。

使用已部署的 Google Cloud 服務

如要瞭解如何設定已部署的 Google Cloud 服務,以滿足業務需求,請參閱該服務的說明文件。

移除已部署的 Google Cloud 服務

如要從 Distributed Cloud 連線叢集移除已部署的 Google Cloud 服務,請按照該服務說明文件中的步驟操作。如果您已完成本頁面所述的任何選用部署後步驟,請一併執行下列操作:

  • 在內部 DNS 中,停用轉送至服務子網域的 DNS。
  • 在建立信任關係的位置,停用對服務自行簽署憑證的信任。