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 伺服器。
使用下列指令取得叢集子網域:
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使用下列指令取得叢集內 DNS 伺服器的 VIP:
DNS_EXT_IP=$(k -n dns-system get service gpc-coredns-external-tcp -o "jsonpath={.status.loadBalancer.ingress[0].ip}")設定內部 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"
詳情請參閱「關於使用第三方身分驗證」。
使用已部署的 Google Cloud 服務
如要瞭解如何設定已部署的 Google Cloud 服務,以滿足業務需求,請參閱該服務的說明文件。
移除已部署的 Google Cloud 服務
如要從 Distributed Cloud 連線叢集中移除已部署的 Google Cloud 服務,請按照該服務說明文件中的步驟操作。如果您已完成本頁面所述的任何選用部署後步驟,請一併執行下列操作:
- 在內部 DNS 中,停用轉送至服務子網域的 DNS。
- 在建立信任關係的位置,停用服務自行簽署憑證的信任關係。