设置 Config Controller

本页面介绍如何设置 Config Controller。

Config Controller 提供了一个基于 Kubernetes 的代管式控制层面。此外,Config Controller 实例还预安装了 Policy Controller、Config Sync 和 Config Connector。通过这些组件,您可以利用 Kubernetes 的工具和工作流来管理 Google Cloud 资源,并使用 GitOps 工作流实现一致性。如需了解详情,请参阅 Config Controller 概览

如果您是首次创建 Config Controller 实例,请参阅快速入门:使用 Config Controller 管理资源

限制

  • 由于 Config Controller 实例是全代管式实例,因此您无法向舰队注册这些实例。

准备工作

在设置 Config Controller 之前,请完成以下步骤:

  1. 安装并初始化 Google Cloud CLI,它提供了以下说明中使用的 Google Cloud CLI。如果您使用 Cloud Shell,则 Google Cloud CLI 已安装。
  2. 由于 Google Cloud CLI 默认不安装 kubectl,因此请安装:

    gcloud components install kubectl
    
  3. 设置要在其中托管 Config Controller 的 Google Cloud 项目:

    gcloud config set project PROJECT_ID
    

    PROJECT_ID 替换为将要托管 Config Controller 的 Google Cloud 项目。

  4. 启用所需的 API:

    gcloud services enable krmapihosting.googleapis.com \
        anthos.googleapis.com  \
        cloudresourcemanager.googleapis.com \
        serviceusage.googleapis.com
    

创建 Config Controller 实例

您可以创建由标准集群Autopilot 集群支持的 Config Controller 实例。这两种类型的集群都是专用集群。

如果您需要更多自定义选项,请选择标准集群。如果您需要更快的安装、横向和纵向 Pod 自动扩缩以及增强的安全功能(例如 Container-Optimized OS安全强化型 GKE 节点Workload Identity安全启动),请选择 Autopilot 集群。

  1. 创建 Config Controller 实例:

    标准

    创建由专用标准 GKE 集群支持的 Config Controller 实例:

    gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
        --location=LOCATION
    

    替换以下内容:

    • CONFIG_CONTROLLER_NAME:您要为 Config Controller 实例指定的名称。
    • LOCATION:添加以下某个区域:

      • us-central1
      • us-east1
      • us-east4
      • us-east5
      • us-west2
      • northamerica-northeast1
      • northamerica-northeast2
      • europe-north1
      • europe-west1
      • europe-west3
      • europe-west6
      • australia-southeast1
      • australia-southeast2
      • asia-northeast1
      • asia-northeast2
      • asia-southeast1

      这是创建 Config Controller 实例的区域。不支持其他区域。

    您可以在创建标准 Config Controller 实例时设置多个可选参数。如需查看选项的完整列表,请参阅 gcloud anthos config controller create 文档。

    Autopilot

    如需创建由专用 Autopilot GKE 集群支持的 Config Controller 实例,请运行以下命令:

    gcloud anthos config controller create CONFIG_CONTROLLER_NAME \
        --location=LOCATION \
        --full-management
    

    替换以下内容:

    • CONFIG_CONTROLLER_NAME 替换为您要为控制器指定的名称。
    • LOCATION:添加以下某个区域:

      • us-central1
      • us-east1
      • us-east4
      • us-east5
      • us-west2
      • northamerica-northeast1
      • northamerica-northeast2
      • europe-north1
      • europe-west1
      • europe-west3
      • europe-west6
      • australia-southeast1
      • australia-southeast2
      • asia-northeast1
      • asia-northeast2
      • asia-southeast1

      不支持其他区域。

    此操作最多可能需要 15 分钟才能完成。如果您希望观察创建期间发生的情况,则可以在 Google Cloud 控制台中查看日志浏览器。

    前往日志浏览器

    如果您在创建过程中遇到错误,请参阅排查 Config Controller 问题,以获取解决常见问题的指导。

  2. 如需验证 Config Controller 实例是否已创建,请查看 Config Controller 实例列表:

    gcloud anthos config controller list --location=LOCATION
    

    您应该会在状态列中看到值 RUNNING。如果状态为 CREATING,则表示您的 Config Controller 实例仍在创建中,您应继续等待。如果您看到 ERROR,则遇到了无法自行解决的问题。请与 Google Cloud 支持团队联系以寻求帮助。

  3. 要与 Config Controller 端点通信,请获取适当的凭据和端点信息:

    gcloud anthos config controller get-credentials CONFIG_CONTROLLER_NAME \
        --location LOCATION
    

使用 Config Controller 实例

现在您已创建了 Config Controller 实例,接下来可以开始使用已安装的组件并完成以下任务:

  • 使用 Config Connector 创建 Google Cloud 资源。如果您有要用于 Config Controller 的现有 Google Cloud 资源,请了解如何获取现有资源

  • 使用 Policy Controller 来应用限制条件,以强制执行监管合规和 Kubernetes 标准。

  • 配置 Config Sync 后,在以下部分中,请将您的 Config Controller 实例同步到可信来源中存储的配置(包括 Policy Controller 限制条件和 Config Connector 资源)。

如需查看展示如何使用 Config Controller 完成这些任务的指导示例,请参阅快速入门:使用 Config Controller 管理资源

配置 Config Controller 实例

以下部分介绍了如何配置 Config Controller 实例的组件。

配置 Config Connector

您无需管理 Config Connector 安装相关的任何设置。但是,您需要授予 Config Controller 管理 Google Cloud 资源的权限:

  1. 为您的服务账号电子邮件设置环境变量:

    export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
        -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
    
  2. 创建政策绑定:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:${SA_EMAIL}" \
        --role "ROLE" \
        --project PROJECT_ID
    

    替换以下内容:

    如果上述操作失败,请检查控制器是否准备就绪:

    kubectl wait pod --all --all-namespaces --for=condition=Ready
    

授予这些权限后,您可以开始创建 Google Cloud 资源。

配置 Policy Controller

配置 Policy Controller 是可选操作,但您可以根据需要更改默认安装。

如需配置 Policy Controller,请修改名为 config-managementConfigManagement 对象的 spec.policyController 字段。Config Controller 在安装期间会自动创建此 ConfigManagement 对象。修改 ConfigManagement 对象时,请勿将 spec.policyController.enabled 设置为 false。 Config Controller 会自动覆盖此更改。对于监控,您还需要允许 Policy Controller 发送指标。

通过运行以下命令,允许 Policy Controller 发送指标:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[gatekeeper-system/gatekeeper-admin]" \
  --role=roles/monitoring.metricWriter

PROJECT_ID 替换为集群的 Google Cloud 项目 ID。

配置 Config Sync

如果您希望 Config Controller 实例从存储在可信来源中的配置进行同步,则需要配置 Config Sync。

如果您要使用 Config Sync 创建 Config Connector 资源,请确保您已授予 Config Controller 管理资源的权限

如需配置 Config Sync,请创建和修改 RootSync 对象

  1. 如需从外部代码库(例如 GitHub)同步,请使用 GKE 设置 Cloud NAT。这是因为专用集群节点没有出站互联网访问权限。

  2. 将以下清单之一保存为 root-sync.yaml。请使用与配置的来源类型对应的清单版本。

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。 这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_REPOSITORY:添加要用作根代码库的 Git 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • ROOT_REVISION:添加要与其同步的 Git 修订版本(标记或哈希)。此字段是可选字段,默认值为 HEAD。从 Config Sync 1.17.0 版开始,您还可以在 revision 字段中指定分支名称。在 1.17.0 或更高版本中使用哈希时,它必须是完整的哈希,而不是缩写形式。
    • ROOT_BRANCH:添加要从中同步的代码库分支。此字段是可选字段,默认值为 master。从 Config Sync 1.17.0 版开始,为简单起见,建议使用 revision 字段指定分支名称。如果同时指定了 revision 字段和 branch 字段,则 revision 优先于 branch
    • ROOT_DIRECTORY:添加 Git 代码库中指向您要同步的配置所在的根目录的路径。此字段是可选字段,默认值为代码库的根目录 (/)。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • ssh:使用 SSH 密钥对
      • cookiefile:使用 cookiefile
      • token:使用令牌
      • gcpserviceaccount:使用 Google 服务账号访问 Cloud Source Repositories。
      • gcenode:使用 Google 服务账号访问 Cloud Source Repositories。请仅在集群中未启用 Workload Identity 时选择此选项。

      如需详细了解这些身份验证类型,请参阅授予 Config Sync 对 Git 的只读权限

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您必须将 Secret 的公钥添加到 Git 提供商。此字段是可选字段。

    • ROOT_NO_SSL_VERIFY:如需停用 SSL 证书验证,请将此字段设置为 true。默认值为 false

    • ROOT_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Git 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 Git 作为来源的 RootSync 对象。

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_IMAGE:要用作根代码库的 OCI 映像的网址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。默认情况下,映像是从 latest 标记中拉取的,但您也可以通过 TAGDIGEST 拉取映像。在 PACKAGE_NAME 中指定 TAGDIGEST
      • 如需通过 TAG 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如需通过 DIGEST 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY:添加代码库中指向您要同步的配置所在的根目录的路径。此字段是可选字段,默认值为代码库的根目录 (/)。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 OCI 映像作为来源的 RootSync 对象。

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_HELM_REPOSITORY:要用作根代码库的 Helm 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • HELM_CHART_NAME:添加 Helm 图表的名称。此字段为必填字段。
    • HELM_CHART_VERSION:您的图表的版本。此字段是可选字段。如果未指定任何值,则使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本的名称。此字段是可选字段。
    • HELM_RELEASE_NAMESPACE:版本的目标命名空间。它只会为模板中包含 namespace: {{ .Release.Namespace }} 的资源设置命名空间。此字段是可选字段。如果未指定任何值,则使用默认命名空间 config-management-system
    • HELM_INCLUDE_CRDS:如果您希望 Helm 模板同时也生成 CustomResourceDefinition,则设置为 true。此字段是可选字段。如果未指定任何值,则默认为 false,并且不会生成 CRD。
    • VALUE:用于替换 Helm 图表随附的默认值的值。 设置此字段的格式方式与 helm 图表的 values.yaml 文件相同。此字段是可选字段。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • token:使用用户名和密码访问私有 Helm 代码库。
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:添加 Secret 名称(如果 tokenROOT_AUTH_TYPE)。此字段是可选字段。

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 Helm 作为来源的 RootSync 对象。

  3. 如需创建 Config Sync 配置,请通过应用清单来创建 RootSync 对象:

    kubectl apply -f root-sync.yaml
    
  4. 如需验证您的更改是否已应用,请查看 RootSync 对象:

    kubectl describe rootsync ROOT_SYNC_NAME -n config-management-system
    

升级 Config Controller

由于 Config Controller 是一项代管式服务,因此 Google 会自动对其进行升级。如需详细了解新功能,以及 Config Controller 使用 Config Sync、Policy Controller 和 Config Connector 版本,请参阅 Config Controller 版本说明

删除 Config Controller 实例

如果您决定停止使用 Config Controller 实例,请先清理创建的所有 Config Controller 资源,然后再删除 Config Controller 集群本身。

如果不先删除预配的资源就直接删除 Config Controller 实例,资源就会处于被放弃状态。这些资源仍然存在于 Google Cloud 中(并产生结算费用),但不通过声明式配置管理。

删除所有资源后,删除 Config Controller 集群:

gcloud anthos config controller delete \
    --location=LOCATION CONFIG_CONTROLLER_NAME

生产注意事项

投入生产环境后,您应该首先查看 Config Controller 的高可用性注意事项

后续步骤