管理 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
機群套件 (搶先版)
不適用
管理 Google Cloud 控制台
中的 Google Kubernetes Engine 資訊主頁 連線閘道
kubectl 本機工具
Distributed Cloud 連線軟體升級
不適用
安全性 Cloud Key Management Service 整合
自加密磁碟 (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)。Kubernetes 容器會使用這些 VIP 執行 Google Cloud 服務工作負載。

如果您使用現有叢集,請使用下列指令確認該叢集有足夠的 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 Connected 內部服務的憑證授權單位 (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 Identity Service」。

使用已部署的 Google Cloud 服務

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

移除已部署的 Google Cloud 服務

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

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