Cloud Run for Anthos on Google Cloud를 사용하여 내부 서비스 배포하기

이 가이드에서는 내부 네트워크에서 Cloud Run for Anthos on Google Cloud에 배포된 서비스를 노출하는 방법을 보여줍니다. 이 구성 유형을 사용하면 네트워크의 다른 리소스가 비공개 내부(RFC 1918) IP 주소를 사용하여 서비스와 통신할 수 있습니다. 내부 네트워크에 서비스를 노출하는 것은 내부 앱을 직원에게 제공하는 기업과 Cloud Run for Anthos on Google Cloud 클러스터 외부에서 실행되는 클라이언트가 사용하는 서비스에 유용합니다.

Cloud Run for Anthos는 GKE에서 실행되는 앱 및 기능을 배포하고 제공하는 개발자 중심 환경을 제공합니다. 기본적으로 Cloud Run for Anthos on Google Cloud는 Istio의 인그레스 게이트웨이를 사용하여 클러스터 외부에서 서비스를 노출합니다. 이 게이트웨이는 LoadBalancer 유형의 Kubernetes 서비스이며 기본적으로 네트워크 부하 분산을 사용하여 공개 IP 주소에 노출됩니다.

이 가이드에서는 네트워크 부하 분산 대신 내부 TCP/UDP 부하 분산을 사용하도록 Istio의 인그레스 게이트웨이를 변경하여 VPC 네트워크의 내부 IP 주소에 Cloud Run for Anthos on Google Cloud 서비스를 노출하는 방법을 보여줍니다.

목표

  • Cloud Run이 사용 설정된 GKE 클러스터를 만듭니다.
  • 내부 TCP/UDP 부하 분산을 사용하도록 Istio 인그레스 게이트웨이를 업데이트합니다.
  • Cloud Run for Anthos on Google Cloud에 샘플 서비스를 배포하여 앱을 테스트합니다.

비용

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

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 가이드를 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않게 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

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

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

  2. Cloud Console의 프로젝트 선택기 페이지에서 Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Cloud Console에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Cloud Console 하단에 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 gcloud 명령줄 도구가 포함되고 Cloud SDK가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  5. Cloud Shell에서 이 가이드의 모든 명령어를 실행합니다.
  6. Cloud Shell에서 Cloud Run API, GKE API, Cloud API를 사용 설정합니다.
    gcloud services enable \
        cloudapis.googleapis.com \
        container.googleapis.com \
        run.googleapis.com

환경 설정

  • Cloud Shell에서 이 가이드에 사용할 Compute Engine 영역의 환경 변수와 gcloud 도구 기본값, GKE 클러스터 이름을 정의합니다.

    ZONE=us-central1-f
    CLUSTER=cloudrun-gke-ilb-tutorial
    
    gcloud config set compute/zone $ZONE
    gcloud config set run/cluster $CLUSTER
    gcloud config set run/cluster_location $ZONE
    

    이 가이드의 예시에서는 us-central1-f를 영역으로 사용하고 cloudrun-gke-ilb-tutorial을 클러스터 이름으로 사용합니다. 다른 값을 사용할 수 있습니다. 자세한 내용은 위치 및 리전을 참조하세요.

Cloud Run이 사용 설정된 GKE 클러스터 만들기

  1. Cloud Shell에서 Cloud Run 부가기능을 사용하여 GKE 클러스터를 만듭니다.

    gcloud beta container clusters create $CLUSTER \
        --addons HorizontalPodAutoscaling,HttpLoadBalancing,CloudRun \
        --enable-ip-alias \
        --enable-stackdriver-kubernetes \
        --machine-type n1-standard-2
    

내부 TCP/UDP 부하 분산 구성

  1. Cloud Shell에서 Istio 인그레스 게이트웨이를 패치하여 내부 TCP/UDP 부하 분산을 사용합니다.

    kubectl -n gke-system patch svc istio-ingress -p \
        '{"metadata":{"annotations":{"cloud.google.com/load-balancer-type":"Internal"}}}'
    

    변경사항이 적용되는 데 몇 분 정도 걸릴 수 있습니다. 다음 명령어를 실행하여 GKE 클러스터 변경사항을 폴링합니다. 비공개 IP 주소로 변경할 EXTERNAL-IP 값을 찾습니다.

    kubectl -n gke-system get svc istio-ingress --watch
    

    EXTERNAL-IP 필드에 비공개 IP 주소가 표시될 때 폴링을 중지하려면 Ctrl+C를 누릅니다.

샘플 서비스 배포

  • Cloud Shell에서 sample이라는 서비스를 Cloud Run for Anthos on Google Cloud의 default 네임스페이스에 배포합니다.

    gcloud run deploy sample \
        --image gcr.io/knative-samples/simple-api \
        --namespace default \
        --platform gke
    

내부 연결 확인

  1. Cloud Shell에서 GKE 클러스터와 동일한 영역에 Compute Engine 가상 머신(VM)을 만듭니다.

    VM=cloudrun-gke-ilb-tutorial-vm
    
    gcloud compute instances create $VM
    
  2. Istio 인그레스 게이트웨이의 비공개 IP 주소를 EXTERNAL_IP라는 환경 변수와 external-ip.txt라는 파일에 저장합니다.

    export EXTERNAL_IP=$(kubectl -n gke-system get svc istio-ingress \
        -o jsonpath='{.status.loadBalancer.ingress[0].ip}' | tee external-ip.txt)
    
  3. IP 주소가 포함된 파일을 VM에 복사합니다.

    gcloud compute scp external-ip.txt $VM:~
    
  4. SSH를 사용하여 VM에 연결합니다.

    gcloud compute ssh $VM
    
  5. SSH 세션에서 샘플 서비스를 테스트합니다.

    curl -s -w'\n' -H Host:sample.default.example.com $(cat external-ip.txt)
    

    출력은 다음과 같습니다.

    OK
    
  6. SSH 세션을 종료합니다.

    exit
    

문제해결

이 가이드에서 문제가 발생하면 다음 문서를 검토하세요.

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.

프로젝트 삭제

  1. Cloud Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제 를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

개별 리소스 삭제

이 가이드에서 사용된 Google Cloud 프로젝트를 유지하려면 개별 리소스를 삭제합니다.

  1. GKE 클러스터를 삭제합니다.

    gcloud container clusters delete $CLUSTER --quiet --async
    
  2. Compute Engine 인스턴스를 삭제합니다.

    gcloud compute instances delete $VM --quiet
    

다음 단계