기존 인프라와 통합

이 주제에서는 공개 및 비공개 서브넷으로 기존 AWS Virtual Private Cloud(VPC)를 구성하고 anthos-gke를 실행하여 관리 서비스의 설치를 완료합니다.

시작하기 전에

이어지는 단계를 완료하려면 다음이 필요합니다.

  • 요구사항에 설명된 AWS IAM 권한

  • 다음이 포함된 기존 AWS VPC:

    • 공개 서브넷 최소 한 개 이상
    • 비공개 서브넷 최소 한 개 이상
    • 공개 서브넷 경로가 있는 인터넷 게이트웨이
    • 비공개 서브넷 경로가 있는 NAT 게이트웨이
    • 사용 설정된 DNS 호스트 이름
    • DHCP 옵션 세트에 domain-name의 커스텀 값 없음. 자세한 내용은 문제 해결을 참조하세요. AWS용 GKE는 기본 EC2 도메인 이름 이외의 값을 지원하지 않습니다.

    AWS VPC 구성에 대한 자세한 내용은 공개 및 비공개 서브넷이 있는 VPC를 참조하세요.

  • 기존 VPC의 공개 및 비공개 서브넷 ID입니다. 예를 들면 subnet-1234567890abcdefg입니다.

  • 클러스터 버전 1.20 이하에서는 AWS용 GKE 설치를 관리할 보안 그룹 또는 IP 범위의 인바운드 SSH(포트 22)를 허용하는 AWS 보안 그룹입니다.

  • 클러스터 버전 1.21 이상의 경우 AWS용 GKE 노드 풀이 있는 VPC IP 범위에서 아웃바운드 Konnectivity(포트 8132) 연결을 허용하는 AWS 보안 그룹입니다.

작업공간 만들기

  1. 텍스트 편집기에서 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
       securityGroupIDs:
       - SECURITY_GROUP_IDS
       googleCloud:
         projectID: GCP_PROJECT_ID
         serviceAccountKeys:
           managementService: MANAGEMENT_KEY_PATH
           connectAgent: HUB_KEY_PATH
           node: NODE_KEY_PATH
       existingVPC:
         subnetID: VPC_SUBNET_ID
         allowedSSHSecurityGroupIDs:
         - SSH_SECURITY_GROUP
       # Optional fields
       rootVolume:
         sizeGiB: ROOT_VOLUME_SIZE
         volumeType: ROOT_VOLUME_TYPE
         iops: ROOT_VOLUME_IOPS
         kmsKeyARN: ROOT_VOLUME_KEY
       bastionHost:
         subnetID: BASTION_HOST_SUBNET_ID
         allowedSSHCIDRBlocks:
         - SSH_CIDR_BLOCK
         rootVolume: # Optional
           kmsKeyARN: BASTION_VOLUME_KEY
       proxy: PROXY_JSON_FILE
    

    다음 값을 바꿉니다.

    • AWS_REGION을 클러스터를 실행할 AWS 리전으로 바꿉니다.
    • ADMIN_AWS_IAM_ARN을 관리자 AWS IAM 키의 Amazon 리소스 이름으로 바꿉니다.
    • KMS_KEY_ARN을 관리 서비스가 생성될 때 관리 서비스 데이터를 보호하는 AWS KMS 키의 Amazon 리소스 이름으로 바꿉니다.
    • DATABASE_KMS_KEY_ARNetcd 데이터베이스를 보호하는 AWS KMS 키의 Amazon 리소스 이름으로 바꿉니다.
    • SECURITY_GROUP_IDS를 관리 서비스 VM에 액세스할 수 있도록 허용된 추가 보안 그룹 ID로 바꿉니다.
    • GCP_PROJECT_ID를 GKE Enterprise 환경을 호스팅하는 Google Cloud 프로젝트로 바꿉니다.
    • MANAGEMENT_KEY_PATH를 Google Cloud 관리 서비스 계정 키의 위치로 바꿉니다.
    • HUB_KEY_PATH를 Google Cloud Connect 서비스 계정 키의 위치로 바꿉니다.
    • NODE_KEY_PATH를 GKE on AWS 노드 서비스 계정 키의 위치로 바꿉니다.
    • VPC_SUBNET_ID를 관리 서비스가 실행되는 서브넷 ID로 바꿉니다.
    • SSH_SECURITY_GROUP을 관리 서비스 인스턴스 내에서 SSH 액세스가 허용된 보안 그룹 ID 목록으로 바꿉니다.

    선택사항: 관리 서비스 볼륨을 암호화하려면 다음 값을 바꿉니다.

    • ROOT_VOLUME_SIZE를 관리 서비스의 볼륨 크기(GB)로 바꿉니다. 예를 들면 10입니다.
    • EBS 볼륨 유형이 있는 ROOT_VOLUME_TYPE입니다. 예를 들면 gp3입니다.
    • 볼륨에 대해 초당 프로비저닝된 IO 작업량(IOPS)이 있는 ROOT_VOLUME_IOPS입니다. volumeTypeGP3일 때만 유효합니다. 자세한 내용은 범용 SSD 볼륨(gp3)을 참조하세요.
    • ROOT_VOLUME_KEY를 관리형 서비스 인스턴스 루트 볼륨을 암호화하는 AWS KMS 키의 Amazon 리소스 이름으로 바꿉니다. 자세한 내용은 고객 관리 CMK를 사용하여 볼륨 암호화를 참조하세요.

    선택사항: SSH 터널로 GKE on AWS 환경에 액세스하기 위해 배스천 호스트를 만들려면 다음 값을 바꿉니다.

    • BASTION_HOST_SUBNET_ID를 배스천 호스트가 실행되는 서브넷 ID로 바꿉니다. VPC_SUBNET_IDBASTION_HOST_SUBNET_ID의 인바운드 연결을 허용하는지 확인합니다.
    • SSH_CIDR_BLOCK배스천 호스트가 인바운드 SSH 연결을 허용하는 CIDR 블록으로 바꿉니다. 예를 들면 203.0.113.0/24입니다. 모든 IP 주소의 SSH를 허용하려면 0.0.0.0/0를 사용합니다.
    • BASTION_VOLUME_KEY를 배스천 루트 볼륨을 보호하는 AWS KMS 키의 Amazon 리소스 이름으로 바꿉니다.

    선택사항: HTTP 프록시를 통한 직접 트래픽을 하려면 다음 값을 바꿉니다.

    • PROXY_JSON_FILE프록시 구성 파일의 상대 경로로 바꿉니다. 프록시를 사용하지 않는 경우 이 줄을 삭제합니다.
  2. anthos-gke aws management init를 실행하여 구성 파일을 만듭니다.

    anthos-gke aws management init
    
  3. anthos-gke aws management apply를 실행하여 클러스터를 만듭니다.

    anthos-gke aws management apply
    

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

클러스터 이름으로 서브넷에 태그 지정

GKE on AWS와 함께 기존 AWS 서브넷을 사용하여 부하 분산기를 만들려면 VPC 및 서브넷에 관리 서비스의 이름으로 태그를 지정해야 합니다. anthos-gke로 VPC를 만들었거나 이미 서브넷에 태그를 지정한 경우 이 단계를 건너뜁니다.

서브넷에 태그를 지정하려면 다음 단계를 수행하세요.

  1. GKE on AWS 구성이 있는 디렉터리로 변경합니다. 이 디렉터리는 관리 서비스를 설치할 때 생성됩니다.

    cd anthos-aws

  2. 클러스터 ID를 환경 변수 $CLUSTER-ID로 내보냅니다. Terraform 버전을 선택한 후 다음 명령어를 실행합니다.

    Terraform 0.12, 0.13

    export CLUSTER_ID=$(terraform output cluster_id)
    

    Terraform 0.14.3+

    export CLUSTER_ID=$(terraform output -raw cluster_id)
    
  3. AWS VPC ID를 환경 변수 $VPC_ID로 내보냅니다. Terraform 버전을 선택한 후 다음 명령어를 실행합니다.

    Terraform 0.12, 0.13

    export VPC_ID=$(terraform output vpc_id)
    

    Terraform 0.14.3+

    export VPC_ID=$(terraform output -raw vpc_id)
    
  4. aws CLI 도구를 사용하여 비공개 서브넷 ID를 가져옵니다.

      aws ec2 describe-subnets \
          --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
          --query "Subnets[*].SubnetId" \
          --output text
    
  5. 클러스터 ID를 사용하여 서브넷에 태그를 지정합니다. 각 서브넷에서 다음 명령어를 실행합니다.

      aws ec2 create-tags \
          --resources SUBNET_IDS \
          --tags Key=gke:multicloud:cluster-id,Value=$CLUSTER_ID
    

    SUBNET_IDS를 공백으로 구분된 서브넷 ID 목록으로 바꿉니다. 예를 들면 subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef입니다.

관리 서비스에 연결

이 섹션에서는 관리 서비스에 대한 연결을 설정합니다. 배스천 호스트를 통해 명령어를 터널링할 수 있습니다. AWS VPC에 직접 연결된 경우 사용자 인증 정보 생성 및 연결로 건너뜁니다.

배스천 호스트로 연결

배스천 호스트를 사용하여 SSH 터널을 설정하는 경우 먼저 anthos-gke.yaml에서 호스트를 구성합니다. 이제 다음 단계를 수행하여 터널을 여는 스크립트를 만듭니다.

  1. terraform를 사용하여 배스천 호스트에 대한 SSH 터널을 여는 스크립트를 생성합니다.

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

    Terraform에서는 배스천 호스트의 SSH 키(~/.ssh/anthos-gke)를 사용하는 bastion-tunnel.sh 스크립트를 생성합니다.

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

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

    ./bastion-tunnel.sh -N
    

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

  3. GKE on AWS 구성이 있는 디렉터리로 변경합니다.

    cd anthos-aws

사용자 인증 정보 생성 및 연결

GKE on AWS 문서에서는 localhost 포트 8118에서 SSH 터널을 사용하여 클러스터에 액세스한다고 가정합니다. VPC에 다른 유형의 연결(예: 직접 상호 연결, VPN 또는 다른 방법)을 사용할 경우 명령어에서 env HTTP_PROXY=http://localhost:8118 줄을 삭제하면 됩니다.

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

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

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

    kubectl은 클러스터의 상태를 출력합니다.

다음 단계