관리 서비스는 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 커스텀 리소스 구성과 유사하지만 리소스를 나타내지는 않습니다.
aws
,terraform
,anthos-gke
명령줄 도구를 설치하고 구성한 컴퓨터에서 터미널을 엽니다.GKE on AWS 구성에 대해 빈 디렉터리를 만들고 이 디렉터리로 변경합니다. GKE on AWS 문서는
anthos-aws
를 구성 디렉터리 예시로 사용합니다.mkdir anthos-aws cd anthos-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 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_BLOCK을
anthos-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_2 및 ZONE_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을 프록시 구성 파일의 상대 경로로 바꿉니다. 프록시를 사용하지 않는 경우 이 줄을 삭제합니다.
anthos-gke aws management init
를 실행하여 추가 구성으로anthos-gke.status.yaml
파일을 생성합니다.init
명령어는anthos-gke.yaml
파일에 있는AWSManagementService
객체의 유효성을 검사합니다.anthos-gke aws management init
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를 통해 관리 서비스에 연결하는 경우 이 배스천 호스트가 필요하지 않습니다. 그렇지 않으면 배스천 호스트를 통해 관리 서비스에 연결하기 위해 다음 단계를 수행합니다.
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
스크립트를 만듭니다.bastion-tunnel.sh
스크립트를 실행하여 터널을 엽니다. 터널이localhost:8118
에서 배스천 호스트로 연결됩니다.배스천 호스트에 대한 터널을 열려면 다음 명령어를 실행합니다.
./bastion-tunnel.sh -N -4
SSH 터널의 메시지가 이 창에 표시됩니다. 연결을 종료할 준비가 되면 Control+C를 사용하거나 창을 닫아 프로세스를 중지합니다.
새 터미널을 열고 디렉터리를 GKE on AWS 구성이 있는 디렉터리로 변경합니다.
인증에 사용할
kubeconfig
를 생성합니다.anthos-gke
를 사용하여~/.kube/config
에 저장된 구성에 사용자 인증 정보를 추가합니다.anthos-gke aws management get-credentials
kubectl
을 사용하여 관리 서비스에 연결할 수 있는지 확인합니다.env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
출력에는 관리 서비스 API 서버의 URL이 포함됩니다.
다음 단계
- 사용자 클러스터 만들기
- GKE on AWS로 프록시 사용
kubectl
구성을 변경하여 더 적은 명령줄 옵션으로 GKE on AWS에 연결