了解如何创建预装有 Config Connector、Policy Controller 和 Config Sync 的 Config Controller 实例。接下来,通过完成以下任务来了解如何使用实例:
- 使用 Config Connector 创建和管理 Google Cloud 资源。
- 创建 Policy Controller 限制条件以强制执行政策,并在部署之前检测是否存在违反政策的情况。
- 通过将 Config Sync 配置为从包含 Google Cloud 资源的示例代码库进行同步来设置 GitOps。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:
gcloud services enable krmapihosting.googleapis.com
container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:
gcloud services enable krmapihosting.googleapis.com
container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
创建 Config Controller 实例
在终端中,创建 Autopilot Config Controller 实例:
gcloud anthos config controller create cc-example \ --location=us-central1 \ --full-management
此操作最多可能需要 15 分钟才能完成。
输出如下所示:
Created instance [cc-example]. Fetching cluster endpoint and auth data. kubeconfig entry generated for krmapihost-cc-example.
如需配置
kubectl
以与 Config Controller 端点通信,请获取所需的身份验证凭据和端点信息:gcloud anthos config controller get-credentials cc-example \ --location us-central1
通过查看 Config Controller 实例列表来验证您的实例是否已创建:
gcloud anthos config controller list --location=us-central1
输出如下所示:
NAME LOCATION STATE cc-example us-central1 RUNNING
授予 Config Controller 所需的权限
在本部分中,您将向 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 "roles/owner" \ --project PROJECT_ID
将
PROJECT_ID
替换为您的项目 ID。输出内容类似如下:
Updated IAM policy for project [PROJECT_ID]. auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: gkehub.googleapis.com # Remainder of output omitted
使用 Config Controller 实例
以下部分介绍 Config Controller 实例的几种使用方式。
使用 Config Connector 创建 Google Cloud 资源
借助 Config Controller 实例,您可以利用 Config Connector 通过 Kubernetes 工具和 API 来管理许多 Google Cloud 服务和资源。在本部分中,您将使用 Config Controller 创建 PubSubTopic
资源。
要使用 Config Connector 创建 Pub/Sub 主题,请完成以下步骤:
使用 Config Connector 启用 Pub/Sub API:
使用首选文本编辑器创建名为
enable-pubsub.yaml
的文件,并将以下 YAML 复制到其中:# enable-pubsub.yaml apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: pubsub.googleapis.com namespace: config-control spec: projectRef: external: projects/PROJECT_ID
将
PROJECT_ID
替换为您的项目 ID。如需启用 Pub/Sub API,请将清单应用到集群:
kubectl apply -f enable-pubsub.yaml
启用此 API 可能需要几分钟时间。
使用 Config Connector 创建 Pub/Sub 主题:
创建名为
pubsub-topic.yaml
的文件并将以下 YAML 复制到其中:# pubsub-topic.yaml apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID labels: label-one: "value-one" name: example-topic namespace: config-control
创建 Pub/Sub 主题:
kubectl apply -f pubsub-topic.yaml
通过查看 Pub/Sub 主题列表,验证 Config Controller 是否已在 Google Cloud 中创建资源:
gcloud pubsub topics list
输出内容类似如下:
--- name: projects/PROJECT_ID/topics/start-instance-event --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
使用 Policy Controller 强制执行政策
借助 Config Controller 实例,您可以使用 Policy Controller 和 Policy Controller 限制条件。在安装 Policy Controller 时,Policy Controller 会自动安装限制条件模板库。您可以使用此库中的模板对 Config Controller 实例强制执行各种常见的安全和合规控制措施。
在本部分中,您将使用 GCPStorageLocationConstraintV1
限制条件模板创建限制条件。您可以通过此模板限制可创建 Cloud Storage 存储分区的位置。使用此模板创建的限制条件会将位置限制为 us-central1
。建议使用此限制条件来确保在最具性价比的区域创建存储桶。
如需创建限制条件,请执行以下操作:
创建名为
bucket-constraint.yaml
的文件并将以下 YAML 复制到其中:# bucket-constraint.yaml apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GCPStorageLocationConstraintV1 metadata: name: storage-only-in-us-central1 spec: match: kinds: - apiGroups: - storage.cnrm.cloud.google.com kinds: - StorageBucket parameters: locations: - us-central1
创建限制条件:
kubectl apply -f bucket-constraint.yaml
输出如下所示:
gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
通过尝试使用 Config Connector 在
asia-southeast1
中创建 StorageBucket 资源,来演示限制条件是否有效:创建名为
asia-storage-bucket.yaml
的文件并将以下 YAML 复制到其中:# asia-storage-bucket.yaml apiVersion: storage.cnrm.cloud.google.com/v1beta1 kind: StorageBucket metadata: name: bucket-in-disallowed-location namespace: config-control spec: location: asia-southeast1
尝试创建 Cloud Storage 存储桶:
kubectl apply -f asia-storage-bucket.yaml
输出如下所示:
Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
使用 Config Sync 设置 GitOps
Config Sync 是一项 GitOps 服务,可让您将 Config Controller 实例同步到 Git 代码库、OCI 映像或 Helm 代码库中存储的配置、政策和 Google Cloud 资源。由于 Config Sync 持续将 Config Controller 的状态与来源中的配置进行协调,因此您可以帮助确保您的实例具有一致的配置。
在本部分中,您将 Config Controller 实例同步到公共 GitHub 代码库。此代码库包含另一个 PubSubTopic
资源。从此代码库同步实例后,系统会自动创建资源并将其应用于您的实例。如果您想使用 GitOps 工作流,可以选择使用 Config Sync 来创建资源(而不是直接应用资源)。
如需从 GitHub 同步,请设置 Cloud NAT。这是因为 Config Controller 实例由专用 Google Kubernetes Engine (GKE) 企业版集群提供支持,并且专用集群节点没有出站互联网访问权限:
创建 Cloud NAT 路由器。您需要使用此路由器来设置 NAT 网关。
gcloud compute routers create cc-nat-router \ --network default \ --region us-central1
输出内容类似如下:
Creating router [cc-nat-router]...done. NAME REGION NETWORK cc-nat-router us-central1 default
在您在上一步中创建的路由器上设置 NAT 网关:
gcloud compute routers nats create cc-nat-config \ --router-region us-central1 \ --router cc-nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
输出如下所示:
Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
如需将 Config Controller 实例配置为从示例代码库同步,请创建一个名为
cc-rootsync.yaml
的文件,并将以下 YAML 复制到其中:# cc-rootsync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples branch: main dir: config-controller-quickstart auth: none
应用配置:
kubectl apply -f cc-rootsync.yaml
您的实例从代码库同步后,Config Sync 会创建 Pub/Sub 主题,并将其应用于您的 Config Controller 实例。
验证 Config Sync 是否正在将 Git 代码库同步到 Config Controller 实例:
nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
输出内容类似如下:
*gke_PROJECT_ID_us-central1_krmapihost-cc-example -------------------- <root>:root-sync https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main SYNCED @ 2023-01-10 18:31:02 +0000 UTC 715b4295d3eac07b057cce2543275c1ee104cad8 Managed resources: NAMESPACE NAME STATUS SOURCEHASH config-control pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync Current 715b429 config-control service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com Current 715b429
如果您没有看到此输出,请等待几分钟,然后重试。
验证 Policy Controller 是否已创建资源:
gcloud pubsub topics list
输出内容类似如下:
name: projects/PROJECT_ID/topics/start-instance-event --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/sample-topic --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
在此输出中,您可以看到您在创建 Config Controller 实例部分中创建的 Pub/Sub,以及通过将实例同步到 GitHub 代码库而创建的 Pub/Sub。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
逐个删除资源
删除 Config Connector
PubSubTopic
资源:kubectl delete -f pubsub-topic.yaml
删除 Policy Controller 限制条件:
kubectl delete -f bucket-constraint.yaml
删除 NAT 路由器:
gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1
在看到系统提示时按
y
。删除由 Config Sync 创建的 Pub/Sub 资源:
kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
删除 RootSync 资源:
kubectl delete rootsync root-sync -n config-management-system
使用您的首选文本编辑器删除您创建的所有 YAML 文件:
enable-pubsub.yaml
pubsub-topic.yaml
bucket-constraint.yaml
asia-storage-bucket.yaml
cc-rootsync.yaml
删除 Config Controller 实例:
gcloud anthos config controller delete --location=us-central1 cc-example
在看到系统提示时按
y
。
后续步骤
- 了解如何设置 Policy Controller。
- 详细了解 Policy Controller。