구성 커넥터, 정책 컨트롤러, 구성 동기화가 사전 설치되는 구성 컨트롤러 인스턴스를 만드는 방법을 알아봅니다. 이제 다음 태스크를 완료하여 인스턴스 사용 방법을 알아봅니다.
- 구성 커넥터를 사용하여 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.
-
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
구성 컨트롤러 인스턴스 만들기
터미널에서 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.
구성 컨트롤러 엔드포인트와 통신하도록
kubectl
을 구성하려면 필요한 인증 사용자 인증 정보 및 엔드포인트 정보를 가져옵니다.gcloud anthos config controller get-credentials cc-example \ --location us-central1
구성 컨트롤러 인스턴스 목록을 확인하여 인스턴스가 생성되었는지 확인합니다.
gcloud anthos config controller list --location=us-central1
출력은 다음과 같습니다.
NAME LOCATION STATE cc-example us-central1 RUNNING
구성 컨트롤러에 필요한 권한 부여
이 섹션에서는 구성 컨트롤러에 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
구성 컨트롤러 인스턴스 사용
다음 섹션에서는 구성 컨트롤러 인스턴스를 사용할 수 있는 방법을 소개합니다.
구성 커넥터로 Google Cloud 리소스 만들기
구성 컨트롤러 인스턴스를 사용하면 구성 커넥터를 활용해서 Kubernetes 도구 및 API를 사용하여 여러 Google Cloud 서비스 및 리소스를 관리할 수 있습니다. 이 섹션에서는 구성 컨트롤러를 사용하여 PubSubTopic
리소스를 만듭니다.
구성 커넥터를 사용하여 Pub/Sub 주제를 만들려면 다음 단계를 완료하세요.
구성 커넥터를 사용하여 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
정책 컨트롤러로 정책 적용
구성 컨트롤러 인스턴스를 사용하면 정책 컨트롤러 및 정책 컨트롤러 제약조건을 사용할 수 있습니다. 정책 컨트롤러를 설치한 동안 구성 컨트롤러가 제약조건 템플릿 라이브러리를 자동으로 설치합니다. 이 라이브러리의 템플릿을 사용하여 구성 컨트롤러 인스턴스에 다양한 일반 보안 및 규정준수 제어를 적용할 수 있습니다.
이 섹션에서는 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`
구성 커넥터를 사용하여
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"]
구성 동기화로 GitOps 설정
구성 동기화는 Git 저장소, OCI 이미지, Helm 저장소에 저장된 구성, 정책, Google Cloud 리소스로 구성 컨트롤러 인스턴스를 동기화할 수 있게 해주는 GitOps 서비스입니다. 구성 동기화는 소스의 구성으로 구성 컨트롤러 상태를 지속적으로 조정하기 때문에 인스턴스에 일관적인 구성이 사용되도록 보장할 수 있습니다.
이 섹션에서는 구성 컨트롤러 인스턴스를 공개 GitHub 저장소로 동기화합니다. 이 저장소에는 다른 PubSubTopic
리소스가 포함됩니다. 이 저장소에서 인스턴스를 동기화하면 리소스가 자동으로 생성되고 인스턴스에 적용됩니다. GitOps 워크플로를 사용하려면 리소스를 직접 적용하는 대신 구성 동기화를 사용하여 리소스를 만들도록 선택할 수 있습니다.
GitHub에서 동기화하려면 Cloud NAT를 설정합니다. 구성 컨트롤러 인스턴스가 비공개 Google Kubernetes Engine(GKE) Enterprise 버전 클러스터로 지원되고 비공개 클러스터 노드에 아웃바운드 인터넷 액세스가 없기 때문에 이를 수행해야 합니다.
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 저장소에 인스턴스를 동기화하여 생성된 항목을 볼 수 있습니다.
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
개별 리소스 삭제
구성 커넥터
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
를 누릅니다.