이 주제에서는 공개 및 비공개 서브넷으로 기존 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 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입니다.
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)
aws
CLI 도구를 사용하여 비공개 서브넷 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 관리 서비스와 사용자 클러스터에 필요한 최소 보안 그룹을 참조하세요.