Cloud Run for Anthos on Google Cloud 설정

이 가이드에서는 Cloud Run for Anthos on Google Cloud에서 Google Kubernetes Engine 클러스터를 설정하는 방법을 보여줍니다. Cloud Console 또는 gcloud 명령줄을 사용할 수 있기 때문에 이 가이드에서는 두 가지 방법을 모두 다룹니다. 기존 클러스터에 Cloud Run을 사용 설정하는 경우 기존 클러스터에 Cloud Run for Anthos on Google Cloud 사용 설정을 참조하세요.

스테이트리스(Stateless) 워크로드를 연결하고 관리하기 위해 Cloud Run for Anthos on Google Cloud를 사용 설정하면 IstioKnative Serving이 클러스터에 설치됩니다. 자세한 내용은 Cloud Run for Anthos on Google Cloud 아키텍처 개요를 참조하세요.

기본 요건

  1. Anthos 구독이 필요합니다. 무료 체험판은 2021년 3월 31일까지 이용할 수 있습니다. 가격 책장에 대해 자세히 알아보세요.
  2. Google 계정으로 로그인합니다.

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

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

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

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

gcloud 설정

Cloud Console 또는 gcloud 명령줄을 사용하여 Cloud Run for Anthos on Google Cloud를 사용할 수 있지만 일부 작업에는 gcloud 명령줄을 사용해야 할 수 있습니다.

Cloud Run for Anthos on Google Cloud에 gcloud 명령줄을 설정하려면 다음 안내를 따르세요.

  1. Cloud SDK를 설치하고 초기화합니다.

  2. gcloud의 기본 프로젝트 설정을 방금 만든 설정으로 지정해야 합니다.

    gcloud config set project PROJECT-ID

    PROJECT-ID를 생성된 프로젝트의 프로젝트 ID로 바꿉니다.

  3. 새 클러스터의 zone을 원하는 영역으로 설정합니다. 예를 들어 GKE가 지원되는 모든 영역을 사용할 수 있습니다.

    gcloud config set compute/zone ZONE

    ZONE을 현재 영역으로 바꿉니다.

  4. 클러스터를 만들고 컨테이너를 빌드하여 Google Container Registry에 게시하는 데 필요한 프로젝트에 다음 API를 사용 설정합니다.

    gcloud services enable container.googleapis.com containerregistry.googleapis.com cloudbuild.googleapis.com
  5. 설치된 gcloud 구성요소를 업데이트합니다.

    gcloud components update
  6. kubectl 명령줄 도구를 설치합니다.

    gcloud components install kubectl

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

이 안내에서는 다음 구성을 사용하여 클러스터를 만듭니다.

  • 사용 설정된 Cloud Run for Anthos on Google Cloud
  • Kubernetes 버전(사용 가능한 GKE 버전 참조)
  • 2개의 vCPU가 있는 노드

새 클러스터의 권장 설정은 다음과 같습니다.

gcloud 명령줄 또는 Console을 사용하여 클러스터를 만들 수 있습니다. 안내를 보려면 해당 탭을 클릭하세요.

Console

Cloud Run for Anthos on Google Cloud에 클러스터를 만들고 사용 설정하려면 다음 안내를 따르세요.

  1. Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 만들기를 클릭하여 Kubernetes 클러스터 만들기 페이지를 엽니다.

  3. 클러스터 기본사항 섹션에서 다음을 완료합니다.

    • 클러스터의 이름을 입력합니다.
    • 위치 유형으로 영역 또는 리전을 선택합니다. 둘 다 Cloud Run for Anthos on Google Cloud에서 작동합니다. 영역 클러스터는 비용이 저렴하지만 제어 영역(마스터) 업그레이드 중 다운타임이 발생합니다.
    • 이전 단계에서 선택한 옵션에 따라 클러스터의 영역 또는 리전을 선택합니다. 현재 위치와 가까운 영역 또는 리전을 선택합니다(예: us-central1-a).
    • 드롭다운 목록에서 사용 가능한 버전 중 하나를 제어 영역 클러스터 버전으로 선택합니다.
  4. 기능 섹션에서 Cloud Run for Anthos 사용 설정 체크박스를 선택합니다.

  5. 만들기를 클릭하여 클러스터를 만들고 방금 완료된 구성으로 클러스터를 프로비저닝합니다. 이 프로세스는 완료하는 데 몇 분 정도 걸릴 수 있습니다.

명령줄

Cloud Run for Anthos on Google Cloud를 사용 설정하는 새 클러스터를 만들려면 다음 안내를 따르세요.

  1. 새 클러스터를 만듭니다.

    gcloud container clusters create CLUSTER-NAME \
    --zone=ZONE \
    --addons=HttpLoadBalancing,CloudRun \
    --machine-type=n1-standard-2 \
    --num-nodes=3 \
    --cluster-version=GKE-VERSION \
    --enable-stackdriver-kubernetes

    이 안내에서는 수요에 따라 클러스터 크기를 조정하는 클러스터 자동 확장을 사용 설정하지 않습니다. Cloud Run for Anthos on Google Cloud가 클러스터 내에서 인스턴스를 자동으로 확장합니다.

  2. 클러스터 만들기가 완료될 때까지 기다립니다.

Cloud Run이 사용 설정된 비공개 클러스터 만들기

기본적으로 위에서 만든 클러스터는 pod에서 공용 네트워크로 액세스를 구성할 수 있습니다. pod, 노드, 워크로드가 공용 네트워크에 연결되지 않도록 격리하는 Cloud Run 지원 비공개 클러스터를 만들려면 다음 안내를 참조하세요. 그렇지 않으면 다음 섹션으로 건너뜁니다.

외부 클라이언트는 비공개 클러스터의 외부 부하 분산기의 IP 주소를 계속 호출할 수 있습니다. 공개되지 않는 클러스터를 만들려면 비공개 내부 네트워크 설정을 참조하세요.

  1. vCPU가 4개 이상인 비공개 클러스터를 만듭니다.

    비공개 클러스터 만들기

  2. GKE 클러스터에서 다음 버전의 Cloud Run for Anthos를 사용하는 경우 다음 안내를 건너뛰어도 됩니다.
    • 1.16.8-gke.7+
    • 1.15.11-gke.9+
    비공개 GKE 클러스터에서 Cloud Run for Anthos에 서비스를 배포하려면 제어 영역(마스터) 서버에서 포트 8443 노드로 TCP 연결을 허용하고 프로젝트에서 방화벽 규칙을 수정하여 허용된 TCP 연결 목록에서 포트 8443을 수동으로 지정해야 합니다.
    1. 제어 영역의 클러스터 CIDR 블록을 보고 masterIpv4CidrBlock 필드에 값을 기록합니다.

      gcloud container clusters describe CLUSTER_NAME
    2. TARGET_TAGS 필드의 값을 보고 기록합니다.

      gcloud compute firewall-rules list \
                --filter 'name~^gke-CLUSTER_NAME' \
                 --format 'table(
                         name,
                         network,
                         direction,
                         sourceRanges.list():label=SRC_RANGES,
                         allowed[].map().firewall_rule().list():label=ALLOW,
                         targetTags.list():label=TARGET_TAGS
                 )'
    3. 위에서 기록한 값을 사용하여 방화벽 규칙을 추가합니다.

      gcloud compute firewall-rules create FIREWALL_RULE_NAME \
           --action ALLOW \
           --direction INGRESS \
           --source-ranges masterIpv4CidrBlock \
           --rules tcp:8443 \
           --target-tags TARGET_TAGS

      자세한 내용은 방화벽 규칙 만들기를 참조하세요.

클러스터 및 플랫폼에 대한 gcloud 구성

클러스터를 만든 후에는 다음을 수행하세요.

  • 기본 플랫폼을 gke로 설정합니다.
  • 원할 경우 클러스터 이름 및 클러스터 위치를 기본값으로 설정하여 이후 명령줄을 사용할 때 관련 프롬프트가 표시되지 않도록 합니다.
  • gcloud 명령줄에서 클러스터에 액세스할 수 있게 해주는 사용자 인증 정보를 가져옵니다.

기본값을 설정하려면 다음 안내를 따르세요.

  1. 기본 플랫폼을 gke로 설정하고, 기본 클러스터 및 클러스터 위치를 설정한 후 다음과 같이 사용자 인증 정보를 가져옵니다.

    gcloud config set run/platform gke
    gcloud config set run/cluster CLUSTER
    gcloud config set run/cluster_location ZONE
    gcloud container clusters get-credentials CLUSTER

    다음과 같이 바꿉니다.

    • CLUSTER를 클러스터 이름으로 바꿉니다.
    • ZONE을 클러스터 위치로 바꿉니다.
  2. Kubernetes 클러스터에는 default라는 네임스페이스가 포함됩니다. 네임스페이스에 대한 세부정보와 default 대신 네임스페이스를 만들고 사용하는 이유에 대해 알아보려면 Kubernetes 문서에서 네임스페이스를 참조하세요. 새 네임스페이스를 만들려면 다음을 실행하세요.

    kubectl create namespace NAMESPACE

    NAMESPACE를 만들려는 네임스페이스로 바꿉니다.

  3. 이전 단계에서 새 네임스페이스를 만든 경우 이를 default 네임스페이스 대신 사용하려면 gcloud 명령줄을 호출할 때 기본값으로 사용되는 네임스페이스로 이 새 네임스페이스를 설정합니다.

    gcloud config set run/namespace NAMESPACE

워크로드 아이덴티티로 클러스터의 측정항목 사용 설정

워크로드 아이덴티티를 사용 설정할 때 Cloud Run for Anthos는 버전 요청 수 또는 요청 지연 시간과 같은 특정 측정항목을 Google Cloud 운영 제품군에 보고하지 않지만 CPU 및 메모리에 대한 측정항목은 계속 보고합니다.

모든 측정항목을 사용 설정하려면 Cloud Run for Anthos 서비스와 연결된 Google 서비스 계정(GSA)에 모니터링 측정항목 작성자 역할을 부여하여 Cloud Monitoring에 측정항목을 기록할 권한을 수동으로 설정해야 합니다.

서비스의 GSA에 모니터링 측정항목 작성자 역할 권한을 부여합니다.

gcloud projects add-iam-policy-binding PROJECT_ID 
--member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
--role=roles/monitoring.metricWriter

다음과 같이 바꿉니다.

  • PROJECT_ID를 KSA를 호스팅하는 클러스터 프로젝트의 프로젝트 ID로 바꿉니다.
  • GSA_PROJECT를 클러스터에 없는 GSA의 프로젝트 ID로 바꿉니다. 조직의 모든 GSA를 사용할 수 있습니다.

자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.

GKE 클러스터 내에서 Compute API, Storage and Database API 또는 Machine Learning API와 같은 Google Cloud APIs에서 제공하는 서비스를 설정하려면 워크로드 아이덴티티 사용을 참조하세요.

멀티 테넌트 설정에서 개발

멀티 테넌트 사용 사례에서는 현재 프로젝트 외부의 Google Kubernetes Engine 클러스터에 Cloud Run for Anthos 서비스를 배포하고 관리해야 합니다. 이 섹션에서는 멀티 테넌트 클러스터를 설정할 때 Cloud Run for Anthos on Google Cloud 서비스를 개발하는 방법을 안내합니다.

현재 프로젝트 외부의 Google Kubernetes Engine 클러스터에 Cloud Run for Anthos 서비스를 배포하려면 다음 안내를 따르세요.

  1. 배포할 클러스터의 Google Cloud 프로젝트 ID에 대한 읽기 액세스 권한이 있는지 확인합니다.

  2. 대상 GKE 클러스터의 사용자 인증 정보로 로컬 kubeconfig 파일을 업데이트합니다.

    gcloud container clusters get-credentials NAME \
    --region=REGION \
    --project=PROJECT-ID
    • REGION은 대상 클러스터의 Compute Engine 리전입니다.
    • PROJECT-ID는 읽기 액세스 권한이 있는 프로젝트입니다.

    자세한 내용은 gcloud container clusters get-credentials 명령어 참조 문서를 참조하세요.

  3. gcloud 명령줄에서 기본 플랫폼을 kubernetes으로 설정하여 GKE 클러스터와 통신합니다.

    gcloud config set run/platform kubernetes
    

kubeconfig 파일에 지정된 대상 GKE 클러스터에서 명령어를 실행할 수 있습니다.

예를 들어 다음 명령어는 지정된 컨테이너 이미지를 사용하여 사용자 인증 정보가 kubeconfig 파일에 저장된 GKE 클러스터에 Cloud Run for Anthos 서비스를 배포합니다.

gcloud run deploy SERVICE-NAME --image IMAGE-NAME

비공개 내부 네트워크 설정

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

내부 네트워크를 만들려면 공개 외부 네트워크 부하 분산기 대신 내부 TCP/UDP 부하 분산을 사용하도록 Istio의 인그레스 게이트웨이를 구성합니다. 그런 다음 VPC 네트워크 내의 내부 IP 주소에 Cloud Run for Anthos on Google Cloud 서비스를 배포할 수 있습니다.

시작하기 전에

  • 클러스터에 대한 admin 권한이 있어야 합니다.
  • Cloud SDK 버전 310.0 이상만 지원됩니다. 자세한 내용은 gcloud 설정을 참조하세요.

내부 부하 분산기를 설정하려면 다음 안내를 따르세요.

  1. 새 클러스터를 만들거나 기존 클러스터를 업데이트하여 내부 TCP/UDP 부하 분산을 사용하도록 Istio 인그레스 게이트웨이를 업데이트합니다.

    • 내부 부하 분산기로 새 클러스터를 만듭니다.

      gcloud container clusters create CLUSTER_NAME \
      --addons=HttpLoadBalancing,CloudRun \
      --machine-type=n1-standard-2  \
      --num-nodes=3  \
      --enable-stackdriver-kubernetes \
      --cloud-run-config=load-balancer-type=INTERNAL
    • 내부 부하 분산기를 사용하도록 기존 클러스터를 업데이트합니다.

      gcloud container clusters update CLUSTER_NAME
      --update-addons=CloudRun=ENABLED \
      --cloud-run-config=load-balancer-type=INTERNAL

    변경사항이 적용되는 데 몇 분 정도 걸릴 수 있습니다.

  2. 다음 명령어를 실행하여 GKE 클러스터의 업데이트를 확인합니다.

    kubectl -n gke-system get svc istio-ingress --watch
    
    1. 주석 `cloud.google.com/load-balancer-type: Internal'을 확인합니다.
    2. 인그레스 부하 분산기에서 IP 값을 찾아 비공개 IP 주소로 변경합니다.
    3. IP 필드에 비공개 IP 주소가 표시되면 Ctrl+C를 눌러 업데이트를 중지합니다.

변경 후 내부 연결을 확인하려면 다음 안내를 따르세요.

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

    gcloud run deploy sample \
    --image gcr.io/knative-samples/simple-api \
    --namespace default \
    --platform gke
    
  2. GKE 클러스터와 동일한 영역에서 Compute Engine 가상 머신(VM)을 만듭니다.

    VM=cloudrun-gke-ilb-tutorial-vm
    
    gcloud compute instances create $VM
    
  3. 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)
    
  4. IP 주소가 포함된 파일을 VM에 복사합니다.

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

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

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

    출력은 다음과 같습니다.

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

    exit
    

별도의 Istio 설치 사용

다음 안내에서는 Anthos Service Mesh, Istio on GKE 부가기능, 커스텀 Istio 설치를 Cloud Run for Anthos on Google Cloud에 이미 기본으로 설치되어 있는 Istio 구성요소 외에 Cloud Run for Anthos와 연결하는 방법을 보여줍니다.

Cloud Run for Anthos on Google Cloud의 기본 설치에 포함된 Istio 구성요소는 현재 자동 사이드카 삽입을 지원하지 않습니다. 하지만 추가 Istio 설치를 사용하여 배포된 서비스의 네임 페이스에 Istio 사이드카 삽입을 사용 설정할 수 있습니다.

추가 Istio 설치를 사용하려면 istio-system 네임스페이스에서 Istio 인그레스 게이트웨이의 이름이 istio-ingressgateway로 지정되었는지 확인해야 합니다. Cloud Run for Anthos는 다음 위치에 설치된 Istio 인그레스 게이트웨이의 외부 트래픽을 지원하고 처리할 수 있습니다.

  • 추가 Istio 설치를 사용할 때 기본적으로 설정되는 클러스터 로컬 도메인인 istio-ingressgateway.istio-system.svc.cluster.local이 있는 istio-system 네임스페이스
  • Cloud Run for Anthos on Google Cloud 기본 설치 시 설정되는 클러스터 로컬 도메인이 istio-ingress.gke-system.svc.cluster.localgke-system 네임스페이스

Cloud Run for Anthos에서 사용하는 추가 Istio 인그레스 게이트웨이를 확인하려면 다음 안내를 따르세요.

  1. config-istio ConfigMap을 엽니다.

    kubectl get configmap config-istio --namespace knative-serving -oyaml
    
  2. 추가 Istio 인그레스 게이트웨이의 이름이 istio-ingressgateway이고 istio-system 네임스페이스에 있는지 확인합니다.

HTTPS 및 커스텀 도메인 사용 설정

클러스터에 적용되는 HTTPS 및 커스텀 도메인을 사용하려면 HTTPS 및 자동 TLS 인증서 사용 설정커스텀 도메인 매핑을 참조하세요.

Cloud Run for Anthos on Google Cloud 사용 중지

클러스터에서 Cloud Run for Anthos on Google Cloud를 사용 중지하려면 다음 안내를 따르세요.

  1. Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. Cloud Run for Anthos on Google Cloud를 사용 중지할 클러스터를 클릭합니다.

  3. 수정을 클릭합니다.

  4. Cloud Run for Anthos 드롭다운에서 사용 중지를 선택합니다.

  5. 저장을 클릭합니다.

다음 단계