GKE에서 Public NAT 사용
이 페이지에서는 Google Kubernetes Engine(GKE)을 사용하여 샘플 Public NAT 설정을 구성하는 방법을 보여줍니다. Public NAT를 설정하기 전에 Public NAT 개요를 읽어보세요.
기본 요건
Public NAT를 설정하기 전에 다음을 수행해야 합니다.
IAM 권한 가져오기
roles/compute.networkAdmin 역할은 Cloud Router에서 NAT 게이트웨이를 만들고, NAT IP 주소를 예약 및 할당하고, 트래픽이 NAT 게이트웨이의 네트워크 주소 변환을 사용해야 하는 서브네트워크(서브넷)를 지정할 수 있는 권한을 부여합니다.
Google Cloud 설정
시작하기 전에 Google Cloud에서 다음 항목을 설정합니다.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
GKE 예시 설정
GKE에서 작동하는 간단한 Public NAT 구성을 보려면 이 예시를 사용합니다.
1단계: VPC 네트워크 및 서브넷 만들기
네트워크와 서브넷이 이미 있으면 이 단계를 건너뛸 수 있습니다.
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
custom-network1
의 이름을 입력합니다.서브넷에서 서브넷 생성 모드를 커스텀으로 설정합니다.
새 서브넷에
subnet-us-east-192
의 이름을 입력합니다.리전에서 us-east4를 선택합니다.
IP 주소 범위를
192.168.1.0/24
로 입력합니다.완료를 클릭한 후 만들기를 클릭합니다.
gcloud
프로젝트에서 새 커스텀 모드 가상 프라이빗 클라우드(VPC) 네트워크를 만듭니다.
gcloud compute networks create custom-network1 \ --subnet-mode custom
출력:
NAME MODE IPV4_RANGE GATEWAY_IPV4 custom-network1 custom
첫 번째 지역의 서브넷 프리픽스를 지정합니다. 이 예시에서는
192.168.1.0/24
를 리전us-east4
에 할당합니다.gcloud compute networks subnets create subnet-us-east-192 \ --network custom-network1 \ --region us-east4 \ --range 192.168.1.0/24
출력:
NAME REGION NETWORK RANGE subnet-us-east-192 us-east4 custom-network1 192.168.1.0/24
Terraform
Terraform 모듈을 사용하여 커스텀 가상 프라이빗 클라우드(VPC) 네트워크 및 서브넷을 만들 수 있습니다.
2단계: 비공개 클러스터 만들기
콘솔
Google Cloud 콘솔에서 Kubernetes 클러스터 페이지로 이동합니다.
클러스터 만들기를 클릭합니다.
이름에
nat-test-cluster
를 입력합니다.위치 유형을 영역으로 설정합니다.
영역을 us-east4-c로 설정합니다.
탐색창에서 네트워킹을 클릭합니다.
비공개 클러스터를 선택합니다.
외부 IP 주소를 사용한 액세스 제어 영역 체크박스를 선택 취소합니다.
컨트롤 플레인 IP 범위를
172.16.0.0/28
로 입력합니다.네트워크를
custom-network1
로 설정합니다.만들기를 클릭하여 클러스터를 만들고 시작합니다.
gcloud
gcloud container clusters create "nat-test-cluster" \ --zone "us-east4-c" \ --username "admin" \ --cluster-version "latest" \ --machine-type "e2-medium" \ --disk-type "pd-standard" \ --disk-size "100" \ --scopes "https://www.googleapis.com/auth/compute","https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \ --num-nodes "3" \ --enable-private-nodes \ --enable-private-endpoint \ --master-ipv4-cidr "172.16.0.0/28" \ --enable-ip-alias \ --network "projects/PROJECT_ID/global/networks/custom-network1" \ --subnetwork "projects/PROJECT_ID/regions/us-east4/subnetworks/subnet-us-east-192" \ --max-nodes-per-pool "110" \ --enable-master-authorized-networks \ --addons HorizontalPodAutoscaling,HttpLoadBalancing \ --enable-autoupgrade \ --enable-autorepair
Terraform
Terraform 리소스를 사용하여 비공개 클러스터를 만들 수 있습니다.
3단계: SSH 연결을 허용하는 방화벽 규칙 만들기
콘솔
Google Cloud 콘솔에서 방화벽 정책 페이지로 이동합니다.
방화벽 규칙 만들기를 클릭합니다.
allow-ssh
의 이름을 입력합니다.네트워크를
custom-network1
로 지정합니다.트래픽 방향을 인그레스로 설정합니다.
일치 시 작업을 허용으로 설정합니다.
대상을 네트워크의 모든 인스턴스로 설정합니다.
소스 필터를 IPv4 범위로 설정합니다.
소스 IP 범위를
35.235.240.0/20
으로 설정합니다.프로토콜 및 포트를 지정된 프로토콜 및 포트로 설정합니다.
tcp 체크박스를 선택하고 포트
22
를 입력합니다.만들기를 클릭합니다.
gcloud
gcloud compute firewall-rules create allow-ssh \ --network custom-network1 \ --source-ranges 35.235.240.0/20 \ --allow tcp:22
Terraform
Terraform 리소스를 사용하여 방화벽 규칙을 만들 수 있습니다.
4단계: 노드 중 하나에 IAP SSH 권한 만들기
이후 단계에서는 IAP를 사용하여 노드에 연결합니다.
콘솔
Google Cloud 콘솔에서 IAP(Identity-Aware Proxy) 페이지로 이동합니다.
SSH 및 TCP 리소스 탭을 선택합니다.
모든 터널 리소스 > us-east4-c 아래의 목록에서 첫 번째 노드 옆에 있는 체크박스를 선택합니다. 이름은
gke-nat-test-cluster-default-pool-b50db58d-075t
와 유사합니다.노드의 이름을 기록해 둡니다. 나중에 이를 사용하여 연결을 테스트합니다.
오른쪽 창에서 주 구성원 추가를 클릭합니다.
사용자, 그룹, 서비스 계정에 리소스에 대한 액세스 권한을 부여하려면 새 주 구성원 필드에 해당 사용자의 이메일 주소를 지정합니다.
이 기능을 테스트만 할 경우 자신의 이메일 주소를 입력할 수 있습니다.
주 구성원에게 Cloud IAP의 TCP 전달 기능을 통해 리소스에 대한 액세스 권한을 부여하려면 역할 드롭다운 목록에서 Cloud IAP > IAP 보안 터널 사용자를 선택합니다.
저장을 클릭합니다.
gcloud
이 단계에서는 콘솔 안내를 사용합니다.
5단계: 노드에 로그인하고 인터넷에 연결할 수 없는지 확인
콘솔
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
IAP SSH 권한을 만든 노드를 찾습니다. 연결 열에서 SSH 드롭다운 화살표를 클릭한 다음 브라우저 창에서 열기를 선택합니다.
인스턴스에 처음으로 연결하는 경우 Google Cloud에서 SSH 키를 자동으로 생성합니다.
노드 프롬프트에서
kube-dns
컨테이너의 프로세스 ID를 찾습니다.pgrep '^kube-dns$'
컨테이너에 액세스합니다.
sudo nsenter --target PROCESS_ID --net /bin/bash
kube-dns
에서 인터넷 연결을 시도합니다.curl example.com
결과가 표시되지 않습니다. 결과가 표시되면 클러스터를 비공개 클러스터로 만들지 않았거나 다른 문제가 있을 수 있습니다. 문제를 해결하려면 VM이 Public NAT 없이 예기치 않게 인터넷에 연결할 수 있음을 참조하세요.
명령어를 종료하려면
Ctrl+C
를 입력해야 할 수 있습니다.
gcloud
클러스터 노드 중 하나의 이름을 찾습니다.
gcloud compute instances list
노드 이름은
gke-nat-test-cluster-default-pool-1a4cbd06-3m8v
와 같은 형태입니다. 노드 이름을 기록하고 다음 명령어에서NODE_NAME
이 표시될 때마다 해당 이름을 사용합니다.노드에 연결합니다.
gcloud compute ssh NODE_NAME \ --zone us-east4-c \ --tunnel-through-iap
노드 프롬프트에서
kube-dns
컨테이너의 프로세스 ID를 찾습니다.pgrep '^kube-dns$'
컨테이너에 액세스합니다.
sudo nsenter --target PROCESS_ID --net /bin/bash
kube-dns
에서 인터넷 연결을 시도합니다.curl example.com
결과가 표시되지 않습니다. 명령어를 종료하려면
Ctrl+C
를 입력해야 할 수 있습니다.
6단계: Cloud Router를 사용하여 NAT 구성 만들기
Public NAT를 사용하는 인스턴스와 동일한 리전에 Cloud Router를 만들어야 합니다. Public NAT는 VM에 NAT 정보를 배치하기 위해서만 사용됩니다. 실제 NAT 게이트웨이의 일부로는 사용되지 않습니다.
이 구성을 사용하면 리전 내 모든 인스턴스가 전체 기본 및 별칭 IP 범위에서 Public NAT를 사용할 수 있습니다. 또한 외부 IP 주소가 NAT 게이트웨이에 자동으로 할당됩니다. 더 많은 옵션은 Google Cloud CLI 문서를 참조하세요.
않습니다.콘솔
Google Cloud 콘솔에서 Cloud NAT 페이지로 이동합니다.
시작하기 또는 NAT 게이트웨이 만들기를 클릭합니다.
게이트웨이 이름을
nat-config
로 입력합니다.VPC 네트워크를
custom-network1
로 설정합니다.리전을 us-east4로 설정합니다.
Cloud Router에서 새 라우터 만들기를 선택합니다.
nat-router
의 이름을 입력합니다.- 만들기를 클릭합니다.
만들기를 클릭합니다.
gcloud
Cloud Router를 만듭니다.
gcloud compute routers create nat-router \ --network custom-network1 \ --region us-east4
라우터에 구성을 추가합니다.
gcloud compute routers nats create nat-config \ --router-region us-east4 \ --router nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
Terraform
Terraform 리소스를 사용하여 Cloud Router를 만들 수 있습니다.
Terraform 모듈을 사용하여 NAT 구성을 만들 수 있습니다.
7단계: 인터넷에 다시 연결 시도
NAT 구성이 적용되는 데 최대 3분이 걸릴 수 있으므로 최소 1분 정도 기다린 후 인터넷에 액세스를 다시 시도합니다.
아직 kube-dns
에 로그인하지 않은 경우 5단계의 절차를 사용하여 다시 연결합니다. 로그인한 후 curl
명령어를 다시 실행합니다.
curl example.com
다음 콘텐츠가 포함된 출력이 표시됩니다.
<html> <head> <title>Example Domain</title> ... ... ... </head> <body> <div> <h1>Example Domain</h1> <p>This domain is established to be used for illustrative examples in documents. You can use this domain in examples without prior coordination or asking for permission.</p> <p><a href="http://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>
다음 단계
- Public NAT 게이트웨이 설정
- Compute Engine 설정 예시 만들기