관리 서비스 설치

관리 서비스는 GKE on AWS 클러스터를 생성, 업데이트, 삭제합니다. 이 주제에서는 전용 AWS Virtual Private Cloud(VPC) 내에서 관리 서비스를 만드는 방법을 설명합니다. 기존 VPC가 있는 경우 기존 인프라 통합을 참조하세요.

시작하기 전에

GKE on AWS를 사용하기 전에 다음 작업을 수행했는지 확인합니다.

  • 기본 요건을 완료합니다.
  • Google Cloud CLI로 인증합니다.
    gcloud auth login && \
        gcloud auth application-default login

필요한 값

이 주제를 완료하려면 기본 요건에서 다음 항목이 필요합니다.

  • KMS 키 ARN 또는 별칭
  • Google Cloud 서비스 계정 키
  • Google Cloud 프로젝트
  • aws, terraform, anthos-gke 명령줄 도구가 설치되고 구성되어 있습니다.
  • GKE on AWS에서 관리 클러스터를 만드는 AWS 리전 및 가용성 영역

관리 서비스 구성

YAML 파일을 사용하여 GKE on AWS 관리 서비스를 구성합니다. 이 파일은 Kubernetes 커스텀 리소스 구성과 유사하지만 리소스를 나타내지는 않습니다.

  1. aws, terraform, anthos-gke 명령줄 도구를 설치하고 구성한 컴퓨터에서 터미널을 엽니다.

  2. GKE on AWS 구성에 대해 빈 디렉터리를 만들고 이 디렉터리로 변경합니다. GKE on AWS 문서는 anthos-aws를 구성 디렉터리 예시로 사용합니다.

    mkdir anthos-aws
    cd anthos-aws
    
  3. 텍스트 편집기에서 anthos-gke.yaml이라는 파일을 만듭니다. 다음 콘텐츠를 이 파일에 붙여넣습니다.

     apiVersion: multicloud.cluster.gke.io/v1
     kind: AWSManagementService
     metadata:
       name: management
     spec:
       version: aws-1.14.1-gke.0
       region: AWS_REGION
       authentication:
         awsIAM:
           adminIdentityARNs:
           - ADMIN_AWS_IAM_ARN
       kmsKeyARN: KMS_KEY_ARN
       databaseEncryption:
         kmsKeyARN: DATABASE_KMS_KEY_ARN
       googleCloud:
         projectID: GCP_PROJECT_ID
         serviceAccountKeys:
           managementService: MANAGEMENT_KEY_PATH
           connectAgent: HUB_KEY_PATH
           node: NODE_KEY_PATH
       dedicatedVPC:
         vpcCIDRBlock: VPC_CIDR_BLOCK
         availabilityZones:
         - ZONE_1
         - ZONE_2
         - ZONE_3
         privateSubnetCIDRBlocks:
         - PRIVATE_CIDR_BLOCK_1
         - PRIVATE_CIDR_BLOCK_2
         - PRIVATE_CIDR_BLOCK_3
         publicSubnetCIDRBlocks:
         - PUBLIC_CIDR_BLOCK_1
         - PUBLIC_CIDR_BLOCK_2
         - PUBLIC_CIDR_BLOCK_3
       # Optional
       bastionHost:
         allowedSSHCIDRBlocks:
         - SSH_CIDR_BLOCK
       proxy: PROXY_JSON_FILE # optional
    

    다음 값을 바꿉니다.

    • AWS_REGION을 클러스터를 실행할 AWS 리전으로 바꿉니다.

    • ADMIN_AWS_IAM_ARN을 관리 서비스를 만들 수 있는 AWS IAM 권한을 가진 사용자의 Amazon 리소스 이름으로 바꿉니다. aws 도구에서 인증된 사용자의 ARN을 가져오려면 aws sts get-caller-identity를 실행합니다.

    • KMS_KEY_ARN을 관리 서비스가 생성될 때 관리 서비스 데이터를 보호하는 AWS KMS 키 또는 KMS 키 별칭으로 바꿉니다. 예를 들면 arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab입니다. ARN이 없는 경우 aws kms list-keys를 실행하여 ARN 목록을 가져옵니다.

    • DATABASE_KMS_KEY_ARN을 관리 서비스의 etcd 데이터베이스를 보호하는 AWS KMS 키 또는 키 별칭의 Amazon 리소스 이름으로 바꿉니다. 예를 들면 다음과 같습니다. arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

    • GCP_PROJECT_ID를 GKE Enterprise 환경을 호스팅하는 Google Cloud 프로젝트 ID로 바꿉니다.

    • MANAGEMENT_KEY_PATH를 Google Cloud 관리 서비스 계정 키의 위치로 바꿉니다.

    • HUB_KEY_PATH를 Google Cloud Connect 서비스 계정 키의 위치로 바꿉니다.

    • NODE_KEY_PATH를 GKE on AWS 노드 서비스 계정 키의 위치로 바꿉니다.

    • VPC_CIDR_BLOCKanthos-gke가 만드는 AWS VPC의 IP 주소의 총 CIDR 범위로 바꿉니다. 예를 들면 10.0.0.0/16입니다. 자세한 내용은 AWS 문서의 VPC 및 서브넷 기본사항을 참조하세요.

    • ZONE_1, ZONE_2, ZONE_3을 노드와 제어 영역을 만들 AWS EC2 가용성 영역으로 바꿉니다. GKE on AWS는 이러한 영역에 서브넷을 만듭니다. anthos-gke를 사용하여 사용자 클러스터의 구성을 생성하면 GKE on AWS는 이러한 가용성 영역에 제어 영역과 노드 풀을 만듭니다. 예를 들면 다음과 같습니다. us-east-1a
      anthos-gke를 사용하여 한 영역에만 사용자 클러스터를 만들려면 ZONE_2ZONE_3를 삭제하면 됩니다.

    • PRIVATE_CIDR_BLOCK_1, PRIVATE_CIDR_BLOCK_2, PRIVATE_CIDR_BLOCK_3를 비공개 서브넷의 CIDR 블록으로 바꿉니다. 관리 서비스 같은 GKE on AWS 구성요소는 비공개 서브넷에서 실행됩니다. 이 서브넷은 vpcCIDRBlock에 지정된 VPC의 CIDR 범위 내에 있어야 합니다. 가용성 영역당 하나의 서브넷(예: 10.0.1.0/24)이 필요합니다.

    • PUBLIC_CIDR_BLOCK_1, PUBLIC_CIDR_BLOCK_2, PUBLIC_CIDR_BLOCK_3를 공개 서브넷의 CIDR 블록으로 바꿉니다. 가용성 영역당 하나의 서브넷이 필요합니다. 공개 서브넷은 부하 분산기와 같은 클러스터 서비스를 AWS 네트워크 ACL보안 그룹에서 지정된 보안 그룹 및 주소 범위(예: 10.0.100.0/24)에 노출합니다.

    • SSH_CIDR_BLOCK배스천 호스트에 인바운드 SSH를 허용하는 CIDR 블록(예: 203.0.113.0/24)으로 바꿉니다. 모든 IP 주소의 SSH를 허용하려면 0.0.0.0/0을 사용합니다.

    • (선택사항) PROXY_JSON_FILE프록시 구성 파일의 상대 경로로 바꿉니다. 프록시를 사용하지 않는 경우 이 줄을 삭제합니다.

  4. anthos-gke aws management init를 실행하여 추가 구성으로 anthos-gke.status.yaml 파일을 생성합니다. init 명령어는 anthos-gke.yaml 파일에 있는 AWSManagementService 객체의 유효성을 검사합니다.

    anthos-gke aws management init
    
  5. anthos-gke aws management apply를 실행하여 AWS에서 관리 서비스를 만듭니다.

    anthos-gke aws management apply
    

    anthos-gke aws management apply 명령어 실행이 완료되는 데 최대 10분 정도 걸릴 수 있습니다. 명령어가 완료되면 관리 서비스가 AWS에서 실행됩니다.

선택사항 입력란

anthos-gke.yaml 파일은 대부분의 고객들에게 필요한 일반적인 필드 집합을 보여줍니다. anthos-gke.yaml의 구성은 또한 많은 선택적인 필드를 지원합니다. 예를 들면

  • spec.bootstrapS3Bucket: GKE on AWS 구성 데이터의 AWS S3 버킷을 지정합니다.
  • spec.tags: 클러스터 관련 AWS 리소스에 태그를 지정합니다.
  • spec.securityGroupIDs: 관리 클러스터에 추가 보안 그룹 ID를 할당합니다.
  • spec.*Volume 및 하위 필드 volumeType, iops, kmsKeyARN: EBS 볼륨 매개변수를 미세 조정합니다.
  • spec.terraform.stateGCSBucket: Terraform 구성 데이터의 Google Cloud 서비스 버킷을 지정합니다.

anthos-gke.yaml에서 지원되는 모든 필드에 대한 자세한 내용은 AWS 관리 서비스 참조를 확인하세요.

관리 서비스에 연결

다음으로 anthos-gke를 사용해 GKE on AWS 관리 서비스에 연결하고 인증합니다.

기본 설정을 사용하여 관리 서비스를 만들 때 제어 영역에는 AWS VPC 외부에서 액세스할 수 없는 비공개 IP 주소가 포함됩니다. 다음 세 가지 방법 중 하나로 관리 서비스에 액세스할 수 있습니다.

  • Amazon AWS Direct Connect 서비스 사용
  • 인터넷과 GKE on AWS 서브넷 간의 연결을 프록시하는 배스천 호스트 사용
  • VPN을 통해

전용 VPC에서 관리 서비스를 만들면 GKE on AWS가 공개 서브넷에 배스천 호스트를 자동으로 만듭니다. VPN 또는 AWS Direct Connect를 통해 관리 서비스에 연결하는 경우 이 배스천 호스트가 필요하지 않습니다. 그렇지 않으면 배스천 호스트를 통해 관리 서비스에 연결하기 위해 다음 단계를 수행합니다.

  1. terraform 도구를 사용하여 배스천 호스트에 대한 SSH 터널을 여는 스크립트를 생성합니다. Terraform 버전을 선택한 후 다음 명령어를 실행합니다.

    Terraform 0.12, 0.13

    terraform output bastion_tunnel > bastion-tunnel.sh
    chmod 755 bastion-tunnel.sh
    

    Terraform 0.14.3+

    terraform output -raw bastion_tunnel > bastion-tunnel.sh
    chmod 755 bastion-tunnel.sh
    

    Terraform은 ~/.ssh/anthos-gke에서 배스천 호스트의 SSH 키를 참조하는 bastion-tunnel.sh 스크립트를 만듭니다.

  2. bastion-tunnel.sh 스크립트를 실행하여 터널을 엽니다. 터널이 localhost:8118에서 배스천 호스트로 연결됩니다.

    배스천 호스트에 대한 터널을 열려면 다음 명령어를 실행합니다.

    ./bastion-tunnel.sh -N -4
    

    SSH 터널의 메시지가 이 창에 표시됩니다. 연결을 종료할 준비가 되면 Control+C를 사용하거나 창을 닫아 프로세스를 중지합니다.

  3. 새 터미널을 열고 디렉터리를 GKE on AWS 구성이 있는 디렉터리로 변경합니다.

  4. 인증에 사용할 kubeconfig를 생성합니다. anthos-gke를 사용하여 ~/.kube/config에 저장된 구성에 사용자 인증 정보를 추가합니다.

    anthos-gke aws management get-credentials
    
  5. kubectl을 사용하여 관리 서비스에 연결할 수 있는지 확인합니다.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl cluster-info
    

    출력에는 관리 서비스 API 서버의 URL이 포함됩니다.

다음 단계