고급 Traffic Director 구성 옵션

이 문서에는 Traffic Director를 구성할 때 유용할 수 있는 참고사항이 포함되어 있습니다.

Traffic Director에 단일 Compute Engine VM 구성

이 절차를 사용하여 사이드카 프록시 배포 및 트래픽 가로채기를 구현하여 VM에 Traffic Director 서비스에 대한 액세스 권한을 제공할 수 있습니다.

단일 VM에서 Traffic Director를 구성하기 위해 이 프로세스를 따르는 경우 일부 설정 작업에서 Linux 호스트에 액세스할 수 있어야 합니다. 호스트는 Virtual Private Cloud 네트워크에서 실행되는 로컬 머신 또는 VM일 수 있습니다.

먼저 구성 파일과 샘플 스크립트를 다운로드하고 준비합니다.

  1. 설정 과정에서 사용 중인 Linux 호스트에 로그인합니다.

  2. 필요한 파일의 보관 파일을 Linux 호스트에 다운로드하고 압축을 풉니다.

    wget https://storage.googleapis.com/traffic-director/traffic-director.tar.gz
    tar -xzvf traffic-director.tar.gz; cd traffic-director
    

    이 보관 파일은 다음과 같은 파일을 포함합니다.

    • sidecar.env – 환경 변수를 갖는 구성 파일
    • pull_envoy.sh – 제공된 Docker 이미지 태그에서 Envoy 바이너리를 가져오는 샘플 스크립트. 태그가 제공되지 않으면 https://hub.docker.com/r/istio/proxyv2/tags에서 가져옵니다.
    • iptables.sh – netfilter 규칙을 설정하는 스크립트
    • bootstrap_template.yaml – Envoy용 부트스트랩 템플릿 파일
    • run.shsidecar.env 구성 파일을 사용하여 가로채 기용 iptables을 설정하고 Envoy 사이드카 프록시를 실행하는 최상위 스크립트
  3. 사이드카 프록시를 실행하는 각 호스트에서 Envoy 프록시 프로세스를 실행할 시스템 사용자를 만듭니다. 이 사람이 Envoy 프록시 사용자입니다. Envoy 프록시 사용자의 로그인이 사용 중지됩니다.

    sudo adduser --system --disabled-login envoy
    
  4. sidecar.env 파일을 수정하여 구성을 수정합니다. 각 변수에 대한 자세한 설명은 구성 파일의 인라인 주석을 참조하세요.

    1. sidecar.env 파일에서 ENVOY_USER 변수를 Envoy 프록시의 사용자 이름으로 설정합니다.
  5. 자체 Envoy 바이너리를 traffic-director 디렉터리에 복사하거나 다음 단계에 따라 Envoy 바이너리를 가져옵니다.

    1. 사용 중인 Linux 호스트에 Docker 도구를 설치합니다. 지원되는 각 운영체제의 파일이 지원되는 플랫폼 섹션에 나와 있습니다.
    2. pull_envoy.sh 스크립트를 실행하여 Envoy 바이너리를 추출합니다.

다음으로, Traffic Director를 사용하는 애플리케이션을 실행하는 각 VM 호스트에 대해 다음 단계를 수행합니다.

  1. 수정된 sidecar.env 파일과 Envoy 바이너리가 있는 전체 traffic-director 디렉터리를 Traffic Director를 사용할 애플리케이션을 실행하는 각 VM 호스트에 복사합니다.
  2. run.sh 스크립트를 시스템의 시작 스크립트에 추가하면 VM이 재부팅될 때마다 스크립트가 실행됩니다.
  3. 각 VM 호스트에서 run.sh 스크립트를 실행합니다.

    cd traffic-director
    sudo ./run.sh start
    
  4. Envoy 프록시가 올바르게 시작되었는지 확인합니다.

    sudo ./run.sh status
    

    다음과 같은 출력이 표시됩니다.

    OK: Envoy seems to be running.
    OK: Traffic interception seems to be enabled.
    

    또는 ps 명령어를 사용하여 프록시 프로세스가 실행 중인지 확인할 수 있습니다. 출력에 envoy가 표시되는지 확인합니다.

    ps aux | grep envoy
    

    다음을 사용하여 트래픽 가로채기 방향을 확인할 수 있습니다.

    sudo iptables -S -t nat | grep ISTIO_REDIRECT
    

    예상되는 출력은 다음과 같습니다.

    -N ISTIO_REDIRECT
    -A ISTIO_OUTPUT -j ISTIO_REDIRECT
    -A ISTIO_REDIRECT -p tcp -j REDIRECT --to-ports 15001`
    

라우팅 규칙 맵

라우팅 규칙 맵에서 라우팅을 구성하는 방법은 두 가지가 있습니다.

서비스의 실제 대상 VIP와 포트를 기반으로 라우팅을 사용 설정할 수 있습니다. 전달 규칙의 IPAddress 매개변수로 서비스의 VIP를 구성하면 이 주소 및 연결된 포트를 대상으로 하는 트래픽만 일치되고 URL 맵에 지정된 호스트 및 경로 매개변수에 기반하여 라우팅됩니다.

또는 전달 규칙의 주소를 0.0.0.0으로 설정할 수 있습니다. 이렇게 하면 요청의 대상 IP 주소와 관계없이 대상 포트를 기준으로만 트래픽을 일치하도록 프록시가 구성됩니다. 그런 다음 URL 맵에 지정된 호스트 및 경로 매개변수를 기반으로 트래픽이 라우팅됩니다.

이 두 가지 접근 방식에 따라, 호스트 규칙에 구성된 대로 대상 VIP 및 포트 쌍 또는 대상 포트(VIP가 0.0.0.0인 경우)와 연결된 호스트 이름은 서비스 메시 구성 내에서 고유해야 합니다. 즉, 동일한 호스트 이름을 사용하면서 백엔드 집합이 서로 다른 두 개의 상이한 서비스가 있을 수 없습니다.

선택한 메서드와 관계없이 서비스 호스트 이름/FQDN이 확인되는 VIP 트래픽과 서비스가 리슨하는 포트를 가로채서 사이드카 프록시로 리디렉션해야 합니다. 전체 호스트 구성 세부정보는 Traffic Director에 단일 Compute Engine VM 구성을 참조하세요.

VPC 네트워크의 각 전달 규칙은 0.0.0.0 주소를 포함하여 VPC 네트워크당 IP 주소와 포트의 고유한 조합을 포함해야 합니다. 특정 VPC 네트워크에서 동일한 IP 주소와 포트를 사용하여 전달 규칙을 두 개 이상 만들면 첫 번째 전달 규칙만 유효합니다. 나머지는 무시됩니다.

트래픽 손실을 방지하려면 아래 고급 트래픽 가로채기 구성 섹션을 따르세요.

고급 트래픽 가로채기 구성

VM이 Traffic Director에서 구성한 서비스에 액세스해야 하는 애플리케이션을 실행하는 경우, 해당 서비스의 백엔드로 향하는 트래픽 라우팅을 관리할 수 있도록 사이드카 프록시를 설치하고 VM에서 트랙픽 가로채기를 구성해야 합니다.

배포에 대해 모든 발신 VM 트래픽을 가로채는 것이 허용되지 않는 경우 특정 트래픽을 사이드카 프록시로 리디렉션할 수 있으며 나머지 트래픽은 호스트 네트워킹 구성에 정의된 일반 경로를 따릅니다.

이를 위해 VM 및 수동 Envoy 배포를 사용한 Traffic Director 설정 절차에서 Compute Engine VM 호스트 설정을 다음과 같이 수정합니다.

  1. Traffic Director 제어 서비스가 확인되는 IP 주소 범위를 결정합니다. 이러한 IP 주소로 전송되는 트래픽은 가로채기를 당하고 사이드카 프록시로 리디렉션됩니다. 범위는 배포와 관련이 있습니다.

  2. sidecar.env 파일에서 SERVICE_CIDR 값을 이 범위로 설정합니다. 이 IP 주소에 대한 트래픽은 넷필터에 의해 사이드카 프록시로 리디렉션되고 Traffic Director에서 제공한 구성에 따라 부하 분산됩니다.

  3. 사이드카 프록시는 트래픽 가로채기에서 제외되는 전용 사용자로 엄격하게 실행할 필요는 없습니다. 하지만 이 방법을 사용하는 것이 권장됩니다.

  4. 기본 절차에 따라 run.sh 스크립트를 실행하면 iptables는 이 특정 범위의 가로채기 및 리디렉션을 구성합니다.

  5. 다음 명령어를 실행하여 넷필터가 올바르게 구성되었는지 확인합니다. $ {SERVICE_CIDR}의 경우 가로채기를 당한 IP 주소 범위로 구성한 값을 대체합니다.

    sudo iptables -L -t nat | grep -E "(ISTIO_REDIRECT).+${SERVICE_CIDR})"