이 주제에서는 공개 및 비공개 서브넷으로 기존 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 보안 그룹입니다. 
작업공간 만들기
- 텍스트 편집기에서 - 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_ARN을 etcd데이터베이스를 보호하는 AWS KMS 키의 Amazon 리소스 이름으로 바꿉니다.
- SECURITY_GROUP_IDS를 관리 서비스 VM에 액세스할 수 있도록 허용된 추가 보안 그룹 ID로 바꿉니다.
- GCP_PROJECT_ID를 GKE on AWS 환경을 호스팅하는 Google Cloud 프로젝트로 바꿉니다.
- MANAGEMENT_KEY_PATH를 Google Cloud관리 서비스 계정 키의 위치로 바꿉니다.
- HUB_KEY_PATH를 Google CloudConnect 서비스 계정 키의 위치로 바꿉니다.
- 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입니다. volumeType가GP3일 때만 유효합니다. 자세한 내용은 범용 SSD 볼륨(gp3)을 참조하세요.
- ROOT_VOLUME_KEY를 관리형 서비스 인스턴스 루트 볼륨을 암호화하는 AWS KMS 키의 Amazon 리소스 이름으로 바꿉니다. 자세한 내용은 고객 관리 CMK를 사용하여 볼륨 암호화를 참조하세요.
 - 선택사항: SSH 터널로 GKE on AWS 환경에 액세스하기 위해 배스천 호스트를 만들려면 다음 값을 바꿉니다. - BASTION_HOST_SUBNET_ID를 배스천 호스트가 실행되는 서브넷 ID로 바꿉니다. VPC_SUBNET_ID가 BASTION_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을 프록시 구성 파일의 상대 경로로 바꿉니다. 프록시를 사용하지 않는 경우 이 줄을 삭제합니다.
 
- anthos-gke aws management init를 실행하여 구성 파일을 만듭니다.- anthos-gke aws management init
- 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를 만들었거나 이미 서브넷에 태그를 지정한 경우 이 단계를 건너뜁니다.
서브넷에 태그를 지정하려면 다음 단계를 수행하세요.
- GKE on AWS 구성이 있는 디렉터리로 변경합니다. 이 디렉터리는 관리 서비스를 설치할 때 생성됩니다. - cd anthos-aws 
- 클러스터 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)
- 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)
- awsCLI 도구를 사용하여 비공개 서브넷 ID를 가져옵니다.- aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \ --query "Subnets[*].SubnetId" \ --output text
- 클러스터 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에서 호스트를 구성합니다. 이제 다음 단계를 수행하여 터널을 여는 스크립트를 만듭니다.
- terraform를 사용하여 배스천 호스트에 대한 SSH 터널을 여는 스크립트를 생성합니다.- terraform output bastion_tunnel > bastion-tunnel.sh chmod 755 bastion-tunnel.sh- Terraform에서는 배스천 호스트의 SSH 키( - ~/.ssh/anthos-gke)를 사용하는- bastion-tunnel.sh스크립트를 생성합니다.
- bastion-tunnel.sh스크립트를 실행하여 터널을 엽니다. 터널이- localhost:8118에서 배스천 호스트로 연결됩니다.- 배스천 호스트에 대한 터널을 열려면 다음 명령어를 실행합니다. - ./bastion-tunnel.sh -N- SSH 터널의 메시지가 이 창에 표시됩니다. 연결을 종료할 준비가 되면 Control+C를 사용하거나 창을 닫아 프로세스를 중지합니다. 
- GKE on AWS 구성이 있는 디렉터리로 변경합니다. - cd anthos-aws 
사용자 인증 정보 생성 및 연결
GKE on AWS 문서에서는 localhost 포트 8118에서 SSH 터널을 사용하여 클러스터에 액세스한다고 가정합니다. VPC에 다른 유형의 연결(예: 직접 상호 연결, VPN 또는 다른 방법)을 사용할 경우 명령어에서 env HTTP_PROXY=http://localhost:8118 줄을 삭제하면 됩니다.
- 인증에 사용할 - kubeconfig를 생성합니다.- anthos-gke를 사용하여- ~/.kube/config에 저장된 구성에 사용자 인증 정보를 추가합니다.- anthos-gke aws management get-credentials
- kubectl을 사용하여 관리 서비스에 연결할 수 있는지 확인합니다.- env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info- kubectl은 클러스터의 상태를 출력합니다.
다음 단계
- 사용자 클러스터 만들기
- GKE on AWS로 프록시 사용
- kubectl구성을 변경하여 더 적은 명령줄 옵션으로 GKE on AWS에 연결
- GKE on AWS 관리 서비스와 사용자 클러스터에 필요한 최소 보안 그룹을 참조하세요.