管理 Google 服务

分布式云互联支持部署多种 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 服务器。

  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 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"

如需了解详情,请参阅关于使用第三方身份进行身份验证

使用已部署的 Google Cloud 服务

如需了解如何配置已部署的 Google Cloud 服务以满足您的业务需求,请参阅该服务的文档。

移除已部署的 Google Cloud 服务

如需从 Distributed Cloud Connected 集群中移除已部署的 Google Cloud 服务,请按照相应服务的文档中的步骤操作。如果您已完成本页面中介绍的任何可选部署后步骤,还需执行以下操作:

  • 在内部 DNS 中停用向服务子网域的 DNS 转发。
  • 在已建立信任关系的任何位置,停用对服务的自签名证书的信任。