Kubernetes Engine에서 NAT 게이트웨이 사용

이 가이드에서는 네트워크 주소 변환(NAT) 게이트웨이를 사용하여 새로운 노드 IP 주소 매핑을 정의하는 방법을 보여줍니다.

일반적인 상황에서 Google Kubernetes Engine 노드는 모든 송신 트래픽을 노드 클러스터와 연결된 인터넷 게이트웨이를 통해 라우팅하고 인터넷 게이트웨이 연결은 노드 클러스터와 연결된 Compute Engine 네트워크에 의해 정의됩니다. 클러스터 내의 각 노드에는 임시 외부 IP 주소가 있습니다. 자동 확장 중 노드가 생성 및 제거되면 새로운 IP 주소가 자동으로 할당됩니다.

기본 게이트웨이 동작은 일반적인 상황에서는 잘 작동합니다. 하지만 다음과 같은 경우 임시 외부 IP 주소가 할당되는 방식을 수정해야 합니다.

  • 일관된 외부 IP 주소로 타사 서비스 제공
  • Google Kubernetes Engine 클러스터에서 송신하는 트래픽 모니터링 및 필터링

이 가이드에서는 다음을 수행하는 방법을 알아봅니다.

  1. NAT 게이트웨이 인스턴스 생성 및 기존 Google Kubernetes Engine 클러스터에 대한 라우팅 세부정보 구성
  2. NAT 게이트웨이 인스턴스의 커스텀 라우팅 규칙 작성

다음 다이어그램은 아키텍처 개요를 보여줍니다.

NAT 게이트웨이의 아키텍처

목표

  • Terraform을 사용하여 NAT 게이트웨이 인스턴스를 만듭니다.
  • 기존 Google Kubernetes Engine 클러스터용 송신 네트워크 라우팅 규칙을 만듭니다.
  • 포드의 아웃바운드 트래픽이 NAT 게이트웨이를 통해 라우팅되는지 확인합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 GCP 구성요소를 사용합니다.

  • Google Kubernetes Engine
  • Compute Engine

가격 계산기를 사용하여 환경 비용을 추정하세요. Google Kubernetes Engine 클러스터를 포함하여 이 가이드에서 사용하는 리소스의 비용은 일일 $3.19입니다.

시작하기 전에

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  3. 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  4. Compute Engine 및 Google Kubernetes Engine APIs를 사용 설정합니다.

    APIs 사용 설정

Terraform을 사용하여 NAT 게이트웨이 생성

이 가이드에서는 Terraform용 Compute Engine 기반의 모듈형 NAT 게이트웨이를 사용하여 NAT 게이트웨이 관리 인스턴스 그룹 생성을 자동화합니다. 태그 기반 라우팅을 사용하여 인스턴스에서 트래픽을 전송하지만 일치하는 태그가 있는 인스턴스만 NAT 게이트웨이 경로를 사용합니다.

Compute Engine 경로의 기본 우선순위는 1000이며, 숫자가 작을수록 우선순위가 높습니다. Terraform 모듈은 우선순위 800의 Compute Engine 경로를 만듭니다. 이 경로는 Google Kubernetes Engine 노드의 모든 아웃바운드 트래픽을 기본 인터넷 게이트웨이 대신 NAT 게이트웨이 인스턴스로 리디렉션합니다. 또한 이 모듈의 예제 코드로 우선순위 700의 정적 경로를 만들어 Google Kubernetes Engine 노드의 트래픽을 Google Kubernetes Engine 마스터로 리디렉션합니다. 이 마스터는 송신 트래픽을 분할하여 일반 클러스터 작업을 유지합니다.

NAT 게이트웨이 인스턴스가 실행되면 시작 스크립트는 IP 전달을 구성하고 주소 변환을 수행하는 데 필요한 방화벽 규칙을 추가합니다.

  1. 다음 버튼을 사용하여 Cloud Shell을 열고 GitHub 저장소를 복제한 다음 examples/gke-nat-gateway 디렉토리로 이동합니다.

    Cloud Shell에서 열기

    저장소에는 Terraform용 Compute Engine 기반의 모듈형 NAT 게이트웨이가 포함되어 있습니다.

  2. 다음 helper 스크립트로 Terraform의 최신 버전을 설치하여 이 버전을 사용하도록 Cloud Shell 환경을 구성합니다.

    curl -sL https://goo.gl/yZS5XU | bash
    source ${HOME}/.bashrc
    

  3. 클러스터 이름, 지역, 영역 변수를 설정합니다. 이 가이드에서는 다음과 같은 변수를 사용합니다.

    CLUSTER_NAME=dev
    REGION=us-central1
    ZONE=us-central1-f
    

  4. us-central1-f 영역에 Google Kubernetes Engine 클러스터를 만듭니다.

    gcloud container clusters create ${CLUSTER_NAME} --zone ${ZONE}

  5. REGIONZONE 변수를 사용하여 terraform.tfvars 파일을 만듭니다.

    echo "region = \"${REGION}\"" > terraform.tfvars
    echo "zone = \"${ZONE}\"" >> terraform.tfvars
    

  6. gcloud 명령줄 도구를 사용하여 Google Kubernetes Engine 마스터 IP와 네트워크 태그 이름을 추출하고 이를 terraform.tfvars 파일에 추가합니다.

    echo "gke_master_ip = \"$(gcloud container clusters describe ${CLUSTER_NAME} --zone ${ZONE} --format='get(endpoint)')\"" >> terraform.tfvars
    echo "gke_node_tag = \"$(gcloud compute instance-templates describe $(gcloud compute instance-templates list --filter=name~gke-${CLUSTER_NAME} --limit=1 --uri) --format='get(properties.tags.items[0])')\"" >> terraform.tfvars
    

  7. Terraform에서 사용하는 GOOGLE_PROJECT 환경 변수를 설정합니다.

    export GOOGLE_PROJECT=$(gcloud config get-value project)

  8. Terraform 명령을 사용하여 NAT 게이트웨이를 배포합니다.

    terraform init
    terraform plan
    terraform apply
    

이제 클러스터에 Google Kubernetes Engine 클러스터, NAT 게이트웨이 인스턴스, Compute Engine 경로가 구성되었습니다. 다음 섹션에서는 아웃바운드 클러스터 트래픽이 NAT 게이트웨이 인스턴스를 통해 라우팅되는지 여부를 확인하는 방법을 살펴봅니다.

NAT 게이트웨이 라우팅 확인

  1. curl을 사용하는 Kubernetes 포드를 실행하여 클러스터 노드가 사용하고 있는 외부 IP 주소를 표시합니다.

    kubectl run example -i -t --rm --restart=Never --image centos:7 -- curl -s http://ipinfo.io/ip

    run 명령어 출력이 NAT 게이트웨이의 외부 IP 주소를 표시합니다. 이 주소는 Terraform 출력 변수로 사용할 수 있습니다.

  2. external_ip 변수의 값을 추출합니다.

    terraform output -module=nat -json | jq -r .external_ip.value

    이전 단계의 포드 출력이 NAT 게이트웨이 인스턴스의 외부 IP 주소와 일치하는지 확인합니다.

Google Kubernetes Engine 클러스터에서 NAT 게이트웨이가 예상대로 작동하는지 확인했습니다.

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하는 방법은 다음과 같습니다.

  1. Terraform으로 만든 리소스를 제거합니다.

    terraform destroy

  2. Google Kubernetes Engine 클러스터를 삭제합니다.

    CLUSTER_NAME=dev
    ZONE=us-central1-f
    gcloud container clusters delete ${CLUSTER_NAME} --zone ${ZONE}
    

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...