TCP 서비스 설정

이 가이드에서는 TCP 서비스 및 TCPRoute 리소스를 사용하도록 Cloud Service Mesh를 설정하는 방법을 설명합니다.

TCP 서비스 및 TCPRoute가 사용되는 Cloud Service Mesh는 HTTP 서비스가 사용되는 Envoy 사이드카 프록시 구성과 비슷합니다. 예외적으로 백엔드 서비스가 TCP 서비스를 제공하고 라우팅은 HTTP 프로토콜 대신 TCP/IP 파라미터를 기반으로 합니다.

메시 리소스와 TCPRoute 리소스
Mesh 리소스와 TCPRoute 리소스(확대하려면 클릭)

시작하기 전에

Envoy 및 프록시리스 워크로드 설정 준비에 설명된 작업을 완료해야 합니다.

Mesh 리소스 구성

  1. mesh.yaml이라는 파일에서 mesh 리소스 사양을 만듭니다.

    name: sidecar-mesh
    
  2. mesh.yaml 파일을 사용해서 mesh 리소스를 만듭니다.

    gcloud network-services meshes import sidecar-mesh \
      --source=mesh.yaml \
      --location=global
    

TCP 서버 구성

이 가이드는 새 API에 한정되지 않으며 기존 백엔드 서비스, 상태 점검, MIG 리소스를 사용합니다.

여기서는 데모용으로 포트 10000에서 테스트 TCP 서비스를 제공하는 관리형 인스턴스 그룹을 사용하여 자동 확장된 VM으로 백엔드 서비스를 만듭니다.

  1. 포트 10000에서 테스트 서비스를 사용하여 Compute Engine VM 인스턴스 템플릿을 만듭니다.

    gcloud compute instance-templates create tcp-td-vm-template \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=allow-health-checks \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install netcat -y
    while true;
      do echo 'Hello from TCP service' | nc -l -s 0.0.0.0 -p 10000;
    done &"
    
  2. 템플릿을 기반으로 관리형 인스턴스 그룹을 만듭니다.

    gcloud compute instance-groups managed create tcp-td-mig-us-east1 \
      --zone=ZONE \
      --size=1 \
      --template=tcp-td-vm-template
    
  3. 생성된 관리형 인스턴스 그룹에서 이름이 지정된 포트를 포트 10000으로 설정합니다.

    gcloud compute instance-groups set-named-ports tcp-td-mig-us-east1 
    --zone=ZONE
    --named-ports=tcp:10000

  4. 상태 점검을 만듭니다.

    gcloud compute health-checks create tcp tcp-helloworld-health-check --port 10000
    
  5. 네트워크 인스턴스에 들어오는 상태 점검 연결을 허용하는 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create tcp-vm-allow-health-checks \
       --network default \
       --action allow \
       --direction INGRESS \
       --source-ranges=35.191.0.0/16,130.211.0.0/22 \
       --target-tags allow-health-checks \
       --rules tcp:10000
    
  6. INTERNAL_SELF_MANAGED의 부하 분산 스킴과 함께 전역 백엔드 서비스를 만들고 백엔드 서비스에 상태 확인을 연결합니다. 이 예시에서는 이전에 만든 샘플 TCP 서비스를 실행하는 관리형 인스턴스 그룹이 사용됩니다.

    gcloud compute backend-services create tcp-helloworld-service \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --protocol=TCP \
        --health-checks tcp-helloworld-health-check
    
  7. 관리형 인스턴스 그룹을 백엔드 서비스에 추가합니다.

    gcloud compute backend-services add-backend tcp-helloworld-service \
      --instance-group tcp-td-mig-us-east1 \
      --instance-group-zone=ZONE \
      --global
    

TCPRoute로 라우팅 설정

이 섹션에서는 라우팅을 설정합니다.

  1. tcp_route.yaml이라는 파일에서 TcpRoute 사양을 만듭니다.

    $PROJECT_ID 또는 $PROJECT_NUMBER를 사용할 수 있습니다.

    name: helloworld-tcp-route
    meshes:
    - projects/$PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    - action:
        destinations:
        - serviceName: projects/$PROJECT_NUMBER/locations/global/backendServices/tcp-helloworld-service
      matches:
      - address: '10.0.0.1/32'
        port: '10000'
    
  2. tcp_route.yaml 사양을 사용해서 TcpRoute 리소스를 만듭니다.

    gcloud network-services tcp-routes import helloworld-tcp-route \
      --source=tcp-route.yaml \
      --location=global
    

Envoy 사이드카로 TCP 클라이언트 만들기

  1. 인스턴스 템플릿을 만든 후 Envoy가 Cloud Service Mesh에 연결된 VM을 만듭니다.

    gcloud beta compute instance-templates create td-vm-client-template \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --service-proxy=enabled,mesh=sidecar-mesh \
      --metadata=startup-script="#! /bin/bash
    sudo apt-get update -y
    sudo apt-get install netcat -y"
    
    gcloud compute instances create td-vm-client \
      --zone=ZONE \
      --source-instance-template td-vm-client-template
    
  2. 만든 VM에 로그인합니다.

    gcloud compute ssh td-vm-client
    
  3. netcat 유틸리티를 사용하여 생성한 테스트 서비스와의 연결을 확인합니다.

    echo 'Hi TCP Service' | nc 10.0.0.1 10000
    

테스트 서비스는 Hello from TCP service라는 문구를 반환해야 합니다. 또한 원격 VM에서 실행 중인 netcat 서비스에서 반환된 모든 텍스트를 볼 수 있어야 합니다.

다음 단계

  • Mesh 또는 Gateway 리소스와 연결된 경로 리소스 나열에 관한 자세한 내용은 Route 리소스 나열을 참조하세요. 이 기능은 미리보기 버전으로 제공됩니다.