本页面介绍如何设置 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 之前,请完成以下步骤:
- 安装并初始化 Google Cloud CLI,它提供了以下说明中使用的 Google Cloud CLI。如果您使用 Cloud Shell,则 Google Cloud CLI 已安装。
由于 Google Cloud CLI 默认不安装
kubectl
,因此请安装:gcloud components install kubectl
设置要在其中托管 Config Controller 的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID
替换为将要托管 Config Controller 的 Google Cloud 项目。启用所需的 API:
gcloud services enable krmapihosting.googleapis.com \ anthos.googleapis.com \ cloudresourcemanager.googleapis.com \ serviceusage.googleapis.com
创建 Config Controller 实例
您可以创建由 Standard 集群或 Autopilot 集群提供支持的 Config Controller 实例。这两种类型的集群都是专用集群。
如果您需要更多自定义选项,请选择标准集群。如果您需要更快的安装、横向和纵向 Pod 自动扩缩以及增强的安全功能(例如 Container-Optimized OS、安全强化型 GKE 节点、Workload Identity和安全启动),请选择 Autopilot 集群。
创建 Config Controller 实例:
标准
创建由专用 Standard 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-west1
us-west2
us-west3
us-west4
us-south1
northamerica-northeast1
northamerica-northeast2
southamerica-west1
southamerica-east1
europe-north1
europe-west1
europe-west3
europe-west4
europe-west6
europe-west9
europe-west10
europe-west-12
europe-central2
europe-southwest1
australia-southeast1
australia-southeast2
asia-east1
asia-east2
asia-northeast1
asia-northeast2
asia-northeast3
asia-southeast1
asia-southeast2
asia-south1
asia-south2
africa-south1
me-west1
me-central1
这是创建 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 问题,以获取解决常见问题的指导。
如需验证 Config Controller 实例是否已创建,请查看 Config Controller 实例列表:
gcloud anthos config controller list --location=LOCATION
您应该会在状态列中看到值
RUNNING
。如果状态为CREATING
,则表示您的 Config Controller 实例仍在创建中,您应继续等待。如果您看到ERROR
,则遇到了无法自行解决的问题。请与 Google Cloud 支持团队联系以寻求帮助。要与 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 资源的权限:
为您的服务账号电子邮件设置环境变量:
export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
创建政策绑定:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SA_EMAIL}" \ --role "ROLE" \ --project PROJECT_ID
请替换以下内容:
PROJECT_ID
:您的项目 IDROLE
:一组可满足您需求的预定义角色或自定义角色。或者,您可以在非生产环境中使用roles/owner
。如需详细了解 Config Controller IAM 权限,请参阅 Config Controller 的 IAM 权限。
如果上述操作失败,请检查控制器是否准备就绪:
kubectl wait pod --all --all-namespaces --for=condition=Ready
授予这些权限后,您可以开始创建 Google Cloud 资源。
配置 Policy Controller
配置 Policy Controller 是可选操作,但您可以根据需要更改默认安装。
如需配置 Policy Controller,请修改名为 config-management
的 ConfigManagement 对象的 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 对象:
如需从外部代码库(例如 GitHub)同步,请使用 GKE 设置 Cloud NAT。这是因为专用集群节点没有出站互联网访问权限。
将以下清单之一保存为
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 对象,请参阅为证书授权机构配置 ConfigManagement 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 caCertSecretRef: name: ROOT_CA_CERT_SECRET_NAME
替换以下内容:
ROOT_SYNC_NAME
:添加 RootSync 对象的名称。ROOT_FORMAT
:添加unstructured
以使用非结构化代码库,或添加hierarchy
以使用分层代码库。这些值区分大小写。此字段是可选字段,默认值为hierarchy
。我们建议您添加unstructured
,因为您可以采用这种格式以最适合您的方式整理配置。ROOT_IMAGE
:要用作根代码库的 OCI 映像的网址,例如LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME
。默认情况下,映像是从latest
标记中拉取的,但您也可以通过TAG
或DIGEST
拉取映像。在PACKAGE_NAME
中指定TAG
或DIGEST
:- 如需通过
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
。ROOT_CA_CERT_SECRET_NAME
:添加 Secret 的名称。如果设置了此字段,您的 OCI 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为cert
的密钥下提供 CA 证书。此字段是可选字段。
如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 ConfigManagement Operator
如需了解字段的说明以及可添加到
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 caCertSecretRef: name: ROOT_CA_CERT_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 名称(如果token
为ROOT_AUTH_TYPE
)。此字段是可选字段。ROOT_CA_CERT_SECRET_NAME
:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为cert
的密钥下提供 CA 证书。此字段是可选字段。
如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 ConfigManagement Operator
如需了解字段的说明以及可添加到
spec
字段的字段的完整列表,请参阅 RootSync 字段。此清单会创建一个使用 Helm 作为来源的
RootSync
对象。如需创建 Config Sync 配置,请通过应用清单来创建 RootSync 对象:
kubectl apply -f root-sync.yaml
如需验证您的更改是否已应用,请查看 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 的高可用性注意事项。
后续步骤
- 了解有关 Config Controller 可伸缩性的最佳实践
- 排查 Config Controller 问题。
- 获取支持。
- 详细了解如何使用 Config Sync 同步配置和政策。
- 详细了解如何通过 Policy Controller 强制执行政策。
- 详细了解 Config Connector 资源。