다른 Kubernetes 배포판에 설치

이 페이지에서는 Google Cloud에서 Google Kubernetes Engine(GKE)이 아닌 Kubernetes 배포에 Config Connector를 설치하는 방법을 보여줍니다. 예를 들면 Anthos clusters on AWS(GKE on AWS)가 있습니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

구성 커넥터 설치

다른 Kubernetes 환경에 Config Connector를 설치하려면 Kubernetes 클러스터를 만들거나 확인한 후 ID 및 액세스 관리(IAM) 서비스 계정을 만든 후 클러스터에 Config Connector 구성요소를 설치합니다.

ClusterRoleBinding 만들기

Config Connector는 리소스를 만들려면 먼저 Kubernetes 역할을 만들 수 있는 권한이 필요합니다.

다음 명령어를 실행하여 역할을 만들 수 있는지 확인합니다.

kubectl auth can-i create roles

출력이 yes이면 ID 만들기 섹션으로 이동합니다.

출력이 no이면 클러스터에 ClusterRoleBinding을 만들어 역할을 만들 수 있습니다.

kubectl create clusterrolebinding cluster-admin-binding \
    --clusterrole cluster-admin \
    --user ACCOUNT_EMAIL

ACCOUNT_EMAIL을 Cloud Billing 계정에 로그인하는 데 사용하는 이메일로 바꿉니다.

출력에는 cluster-admin-binding created 구문이 포함되어야 합니다. 이 문구가 표시되지 않으면 Cloud Billing 계정 또는 GKE 클러스터 관리자에게 권한에 대해 문의하세요.

ID 만들기

Config Connector는 다른 리소스와 통신하기 위해 Cloud ID가 필요합니다. ID를 설정하려면 IAM 서비스 계정서비스 계정 키를 만듭니다. 그런 다음 Config Connector를 실행하는 각 클러스터에서 키의 사용자 인증 정보를 보안 비밀로 가져옵니다.

서비스 계정 만들기

서비스 계정을 만들려면 다음 단계를 완료하세요.

  1. IAM 서비스 계정을 만듭니다. 기존 서비스 계정이 있는 경우 새 서비스 계정을 만드는 대신 해당 계정을 사용할 수 있습니다.

    다음 명령어를 실행하여 gcloud 도구를 사용하여 서비스 계정을 만듭니다.

     gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
    

    SERVICE_ACCOUNT_NAME을 서비스 계정의 이름으로 바꿉니다.

    서비스 계정 만들기에 대한 자세한 내용은 서비스 계정 만들기 및 관리를 참조하세요.

  2. 프로젝트에 대해 높은 권한을 IAM 서비스 계정에 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/owner"
    

    다음을 바꿉니다.

    • PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.
    • SERVICE_ACCOUNT_NAME을 서비스 계정의 이름으로 바꿉니다.
  3. 서비스 계정 키를 만들고 사용자 인증 정보를 key.json이라는 파일로 내보냅니다.

    gcloud iam service-accounts keys create --iam-account \
        SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com key.json
    

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_NAME을 서비스 계정의 이름으로 바꿉니다.
    • PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

클러스터에 사용자 인증 정보 적용

Config Connector를 실행할 클러스터에 사용자 인증 정보를 적용하려면 다음 단계를 완료합니다.

  1. cnrm-system 네임스페이스를 만듭니다.

    kubectl create namespace cnrm-system
    
  2. 키의 사용자 인증 정보를 보안 비밀로 가져옵니다.

    kubectl create secret generic SECRET_NAME \
        --from-file key.json \
        --namespace cnrm-system
    

    SECRET_NAME을 보안 비밀에 지정하려는 이름으로 바꿉니다.

  3. 시스템에서 사용자 인증 정보를 제거합니다.

    rm key.json
    

Config Connector 연산자 설치

Config Connector 연산자를 설치하려면 다음 단계를 완료하세요.

  1. 최신 Config Connector 연산자 tar 파일을 다운로드합니다.

    gsutil cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
    
  2. tar 파일의 압축을 풉니다.

    tar zxvf release-bundle.tar.gz
    
  3. 클러스터에 Config Connector 연산자를 설치합니다.

    kubectl apply -f operator-system/configconnector-operator.yaml
    

Config Connector 구성

연산자를 사용하여 Config Connector를 구성하려면 ConfigConnector CustomResource의 구성 파일을 만든 후 kubectl apply 명령어를 사용하여 적용합니다.

연산자를 사용하여 Config Connector를 구성하려면 다음 안내를 따르세요.

  1. 다음 YAML을 configconnector.yaml이라는 파일에 복사합니다.

    apiVersion: core.cnrm.cloud.google.com/v1beta1
    kind: ConfigConnector
    metadata:
      # the name is restricted to ensure that there is only ConfigConnector
      # instance installed in your cluster
      name: configconnector.core.cnrm.cloud.google.com
    spec:
     mode: cluster
     credentialSecretName: SECRET_NAME
    

    SECRET_NAME을 앞에서 만든 보안 비밀의 이름으로 바꿉니다.

  2. kubectl apply로 클러스터에 구성을 적용합니다.

    kubectl apply -f configconnector.yaml
    

리소스를 만들 위치 지정

Config Connector는 프로젝트, 폴더 또는 조직별로 리소스를 정리할 수 있으며 이는 Google Cloud에서 리소스를 정리하는 방법과 동일합니다.

Config Connector를 사용하여 리소스를 생성하기 전에 리소스를 생성할 위치를 구성해야 합니다. 리소스를 생성할 위치를 결정하기 위해 Config Connector는 리소스 구성 또는 기존 네임스페이스에 주석을 사용합니다. 자세한 정보는 리소스 구성을 참조하세요.

이 목적을 위한 네임스페이스가 없는 경우 kubectl을 사용하여 네임스페이스를 만듭니다.
kubectl create namespace NAMESPACE

NAMESPACE를 네임스페이스 이름으로 바꿉니다. 예를 들면 config-connector입니다.

탭을 선택하여 Config Connector로 리소스를 만들 위치를 선택합니다.

프로젝트

특정 프로젝트에서 리소스를 만들려면 다음 명령어를 실행하세요.

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/project-id=PROJECT_ID

다음을 바꿉니다.

  • NAMESPACE를 네임스페이스 이름으로 바꿉니다.
  • PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

폴더

특정 폴더에 리소스를 만들려면 다음 명령어를 실행합니다.

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/folder-id=FOLDER_ID

다음을 바꿉니다.

  • NAMESPACE를 네임스페이스 이름으로 바꿉니다.
  • FOLDER_ID를 Google Cloud 폴더 ID로 바꿉니다.

조직

특정 조직의 리소스를 만들려면 다음 명령어를 실행합니다.

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/organization-id=ORGANIZATION_ID

다음을 바꿉니다.

  • NAMESPACE를 네임스페이스 이름으로 바꿉니다.
  • ORGANIZATION_ID를 Google Cloud 조직 ID로 바꿉니다.

네임스페이스에 주석을 달면 Config Connector는 해당 프로젝트, 폴더 또는 조직에 리소스를 만듭니다. Config Connector가 Kubernetes 네임스페이스를 사용하는 방법에 대한 자세한 내용은 Kubernetes 네임스페이스 및 Google Cloud 프로젝트를 참조하세요.

설치 확인

Config Connector는 cnrm-system이라는 네임스페이스에서 모든 구성요소를 실행합니다. 다음 명령어를 실행하여 pod가 준비되었는지 확인할 수 있습니다.

kubectl wait -n cnrm-system \
      --for=condition=Ready pod --all

Config Connector가 올바르게 설치된 경우 출력은 다음과 유사합니다.

pod/cnrm-controller-manager-0 condition met

Config Connector 업그레이드

Config Connector를 업그레이드하려면 Config Connector 연산자의 최신 버전을 다운로드하여 설치합니다.

gsutil cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
tar zxvf release-bundle.tar.gz
kubectl apply -f operator-system/configconnector-operator.yaml

구성 커넥터 제거

kubectl delete를 사용하여 컨트롤러 구성요소와 함께 Config Connector CRD를 삭제합니다.

kubectl delete ConfigConnector configconnector.core.cnrm.cloud.google.com \
    --wait=true

Config Connector 연산자를 제거하려면 다음 명령어를 실행합니다.

kubectl delete -f operator-system/configconnector-operator.yaml  --wait=true

문제해결

다음 섹션에서는 Config Connector 설치에 대한 문제 해결 팁을 제공합니다.

리소스 조정 권한 문제 해결

Config Connector가 리소스를 조정할 수 없고 로그에 오류 메시지(The caller does not have permission, forbidden.)가 포함된 경우 GKE 클러스터 또는 노드 풀에서 워크로드 아이덴티티가 사용 설정되지 않았을 수 있습니다.

문제를 조사하려면 다음 단계를 완료하세요.

  1. 다음 Pod 구성을 wi-test.yaml로 저장합니다.
    apiVersion: v1
    kind: Pod
    metadata:
      name: workload-identity-test
      namespace: cnrm-system
    spec:
      containers:
      - image: google/cloud-sdk:slim
        name: workload-identity-test
        command: ["sleep","infinity"]
      serviceAccountName: cnrm-controller-manager
    
  2. GKE 클러스터에 Pod를 만듭니다.
    kubectl apply -f wi-test.yaml
    
  3. Pod에서 대화형 세션을 엽니다.
    kubectl exec -it workload-identity-test \
      --namespace cnrm-system \
      -- /bin/bash
    
  4. ID를 나열합니다.
    gcloud auth list
    
  5. 나열된 ID가 리소스에 결합된 Google 서비스 계정과 일치하는지 확인합니다.

    Compute Engine 기본 서비스 계정이 표시되면 워크로드 아이덴티티가 GKE 클러스터 또는 노드 풀에서 사용 설정되지 않은 것입니다.

  6. 대화형 세션을 종료한 후 GKE 클러스터에서 Pod를 삭제합니다.
    kubectl delete pod workload-identity-test \
    --namespace cnrm-system
    

다음 단계