分布式云互联支持部署多种 Google Cloud 服务。这些服务工作负载在 Distributed Cloud 连接集群上的 Kubernetes 容器中运行。
支持的 Google Cloud 服务
Distributed Cloud Connected 支持部署以下Google Cloud 服务:
| 服务类型 | 包含在互联 GDC 费用中 | 单独计费 |
|---|---|---|
| 计算 | 纯软件 Google Distributed Cloud VM Runtime on Google Distributed Cloud |
客机操作系统 (您必须自行获取许可) |
| 存储 | 原始(永久性卷)存储 容器存储接口 (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 信息中心 Connect Gateway kubectl 本地工具分布式云连接软件升级 |
不适用 |
| 安全性 | 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。
创建或选择集群
如果您尚未创建分布式云连接集群,请按照创建集群中所述进行创建。创建集群时,请至少指定 8 个虚拟 IP 地址 (VIP)。运行 Google Cloud 服务工作负载的 Kubernetes 容器将使用这些 VIP。
如果您使用的是现有集群,请使用以下命令验证该集群上是否有足够的 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 服务子网域
在分布式云连接区域中部署第一个 Google Cloud 服务之前,您可以选择自定义该区域中部署的所有 Google 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 服务
如需在已连接的分布式云集群上部署 Google Cloud 服务,请按照相应服务文档中所述的部署步骤操作。
配置已部署的 Google Cloud 服务
本部分介绍了您可以根据业务需求选择完成的部署后配置步骤。
将内部 DNS 的 DNS 查询转发到集群的 DNS
在已连接的分布式云集群上部署 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 Connected 集群上部署 Google Cloud 服务时,Distributed Cloud Connected 会签发一个自签名证书,然后使用该证书加密相应服务的网络流量。建议您检索此证书,并配置您的业务环境以信任该证书。
如需以 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 Secret,并在 cert-manager-cluster-resources 命名空间中使用 security.private.gdc.goog/bundles=trust-store-user-root-ext 注解对其进行注解。这样,您部署的 Google Cloud服务就可以信任您的内部第三方服务,从而促进它们之间的数据交换。
当您将此 Secret 应用于集群时,部署的 Google Cloud 服务会信任 Secret 中引用的 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 Connected 集群中移除已部署的 Google Cloud 服务,请按照相应服务的文档中的步骤操作。如果您已完成本页面中介绍的任何可选部署后步骤,还需执行以下操作:
- 在内部 DNS 中停用向服务子网域的 DNS 转发。
- 在已建立信任关系的任何位置,停用对服务的自签名证书的信任。