구성 커넥터, 정책 컨트롤러, 구성 동기화가 사전 설치되는 구성 컨트롤러 인스턴스를 만드는 방법을 알아봅니다. 이제 다음 태스크를 완료하여 인스턴스 사용 방법을 알아봅니다.
- 구성 커넥터를 사용하여 Google Cloud 리소스를 만들고 관리합니다.
- 정책을 적용하고 배포되기 전 정책 위반 사항을 감지하는 정책 컨트롤러 제약조건을 만듭니다.
- Google Cloud 리소스를 포함하는 샘플 저장소로부터 동기화하도록 구성 동기화를 구성하여 GitOps를 설정합니다.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the KRM, GKE, Resource Manager, and Service Usage APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable krmapihosting.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com -
Install the Google Cloud CLI.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the KRM, GKE, Resource Manager, and Service Usage APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable krmapihosting.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com 터미널에서 Autopilot 구성 컨트롤러 인스턴스를 만듭니다.
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.
구성 컨트롤러 인스턴스 목록을 확인하여 인스턴스가 생성되었는지 확인합니다.
gcloud anthos config controller list --location=us-central1
출력은 다음과 같습니다.
NAME LOCATION STATE cc-example us-central1 RUNNING
서비스 계정 이메일에 대한 환경 변수를 설정합니다.
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
구성 커넥터를 사용하여 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를 사용 설정하려면 몇 분 정도 걸릴 수 있습니다.
구성 커넥터를 사용하여 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 주제 목록을 확인하여 구성 컨트롤러로 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
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`
구성 커넥터를 사용하여
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"]
GitHub에서 동기화하려면 Cloud NAT를 설정합니다. 구성 컨트롤러 인스턴스가 비공개 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.
샘플 저장소에서 동기화하도록 구성 컨트롤러 인스턴스를 구성하려면
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
인스턴스가 저장소로부터 동기화된 후 구성 동기화가 Pub/Sub 주제를 만들고 이를 구성 컨트롤러 인스턴스에 적용합니다.
구성 동기화가 Git 저장소를 구성 컨트롤러 인스턴스에 동기화하는지 확인합니다.
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
이 출력이 표시되지 않으면 몇 분 정도 기다린 후 다시 시도합니다.
구성 컨트롤러로 리소스가 생성되었는지 확인합니다.
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
이 출력에서는 구성 컨트롤러 인스턴스 만들기 섹션에서 만든 Pub/Sub와 GitHub 저장소에 인스턴스를 동기화하여 생성된 항목을 볼 수 있습니다.
구성 커넥터
PubSubTopic
리소스를 삭제합니다.kubectl delete -f pubsub-topic.yaml
정책 컨트롤러 제약조건을 삭제합니다.
kubectl delete -f bucket-constraint.yaml
NAT 라우터를 삭제합니다.
gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1
메시지가 표시되면
y
를 누릅니다.구성 동기화로 생성된 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
구성 컨트롤러 인스턴스를 삭제합니다.
gcloud anthos config controller delete --location=us-central1 cc-example
메시지가 표시되면
y
를 누릅니다.
구성 컨트롤러 인스턴스 만들기
구성 컨트롤러에 필요한 권한 부여
이 섹션에서는 구성 컨트롤러에 Google Cloud리소스를 관리하기 위한 권한을 부여합니다.
구성 컨트롤러 인스턴스 사용
다음 섹션에서는 구성 컨트롤러 인스턴스를 사용할 수 있는 방법을 소개합니다.
구성 커넥터로 Google Cloud 리소스 만들기
구성 컨트롤러 인스턴스를 사용하면 구성 커넥터를 활용하여 Kubernetes 도구 및 API를 사용하여 여러 Google Cloud 서비스 및 리소스를 관리할 수 있습니다. 이 섹션에서는 구성 컨트롤러를 사용하여 PubSubTopic
리소스를 만듭니다.
구성 커넥터를 사용하여 Pub/Sub 주제를 만들려면 다음 단계를 완료하세요.
정책 컨트롤러로 정책 적용
구성 컨트롤러 인스턴스를 사용하면 정책 컨트롤러 및 정책 컨트롤러 제약조건을 사용할 수 있습니다. 정책 컨트롤러를 설치한 동안 구성 컨트롤러가 제약조건 템플릿 라이브러리를 자동으로 설치합니다. 이 라이브러리의 템플릿을 사용하여 구성 컨트롤러 인스턴스에 다양한 일반 보안 및 규정준수 제어를 적용할 수 있습니다.
이 섹션에서는 GCPStorageLocationConstraintV1
제약조건 템플릿을 사용하여 제약조건을 만듭니다. 이 템플릿을 사용하면 Cloud Storage 버킷을 만들 수 있는 위치를 제한할 수 있습니다. 이 템플릿을 사용하여 만드는 제약조건은 위치를 us-central1
로 제한합니다. 최고의 가격 및 성능을 제공하는 리전에서 버킷이 생성되도록 하려면 이 제약조건을 사용해야 할 수 있습니다.
제약조건을 만들려면 다음 안내를 따르세요.
구성 동기화로 GitOps 설정
구성 동기화는 Git 저장소, OCI 이미지, Helm 저장소에 저장된 구성, 정책,Google Cloud 리소스로 구성 컨트롤러 인스턴스를 동기화할 수 있게 해주는 GitOps 서비스입니다. 구성 동기화는 소스의 구성으로 구성 컨트롤러 상태를 지속적으로 조정하기 때문에 인스턴스에 일관적인 구성이 사용되도록 보장할 수 있습니다.
이 섹션에서는 구성 컨트롤러 인스턴스를 공개 GitHub 저장소로 동기화합니다. 이 저장소에는 다른 PubSubTopic
리소스가 포함됩니다. 이 저장소에서 인스턴스를 동기화하면 리소스가 자동으로 생성되고 인스턴스에 적용됩니다. GitOps 워크플로를 사용하려면 리소스를 직접 적용하는 대신 구성 동기화를 사용하여 리소스를 만들도록 선택할 수 있습니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트는 유지하되 개별 리소스를 삭제하세요.
프로젝트 삭제
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID