대상 중복 관리

이 페이지에서는 프로듀서 네트워크 관리자가 Private Service Connect 인터페이스를 사용하는 가상 프라이빗 클라우드(VPC) 네트워크에서 대상 중복을 관리하는 방법을 설명합니다.

Google Cloud는 동일한 가상 머신(VM) 인스턴스의 네트워크 인터페이스에 할당된 서브넷의 IP 주소 범위가 겹치는 IP 범위를 가질 수 없도록 보장합니다. 하지만 그림 1과 같이 소비자 VPC 네트워크와 프로듀서 VPC 네트워크의 서브넷은 겹칠 수 있습니다. 대상 IP 주소 범위가 겹치는 Private Service Connect 인터페이스를 사용하는 경우 트래픽이 의도한 네트워크의 올바른 대상에 도달하도록 하려면 추가 구성이 필요합니다.

이 페이지에서 설명하는 명령어는 Debian 운영체제를 사용하는 VM의 라우팅을 일시적으로 업데이트하는 방법을 보여줍니다. VM을 영구적으로 업데이트하거나 다른 운영체제를 사용하는 VM을 구성하려면 운영체제의 공개 문서를 참조하세요.

그림 1. 프로듀서 VPC 네트워크의 Subnet-a는 두 서브넷이 동일한 IP 주소 범위를 사용하므로 소비자 VPC 네트워크의 subnet-c와 겹칩니다. 프로듀서 VM은 두 네트워크 모두에서 10.0.1.5에 도달할 수 있어야 합니다.

중첩되는 대상 IP 주소 범위는 이 페이지에 자세히 설명되어 있는 다음과 같은 방법으로 관리할 수 있습니다.

다음 방법도 대상 중복을 관리하는 데 사용될 수 있지만 이 페이지에서는 설명하지 않습니다.

  • 소켓 라이브러리 및 bind()를 사용하여 라우팅을 제어합니다.
  • 프로듀서 네트워크에 완전히 겹치지 않는 IP 주소 공간을 사용합니다.
  • 프로듀서 측의 중첩 IP 주소가 자사 API 엔드포인트 전용인 경우 온프레미스 호스트의 비공개 Google 액세스를 구성할 수 있습니다.
  • 가상 라우팅 및 전달(VRF)을 사용하여 겹치는 IP 주소 공간을 격리합니다. 각 Private Service Connect 인터페이스에 VRF 인스턴스를 할당합니다. 트래픽이 의도한 대상에 도달하도록 각 VRF 인스턴스의 기본 경로를 구성합니다.
  • eBPF를 사용하여 IP 주소 이외의 기준에 따라 고급 라우팅 규칙을 맞춤설정합니다. 이 방법은 이전 옵션을 사용할 수 없는 경우에 권장됩니다.

네트워크 네임스페이스를 사용하여 대상 주소 중복 관리

네트워크 네임스페이스를 사용하여 대상 주소 중복을 관리할 수 있습니다. 이 방법은 프로듀서 VM의 일부 애플리케이션이 소비자 워크로드에만 액세스해야 하고 프로듀서 VM의 다른 애플리케이션이 프로듀서 워크로드에만 액세스해야 하는 경우에 적합합니다.

네트워크 네임스페이스를 사용하여 대상 주소 중복을 관리하려면 다음을 수행합니다.

  1. Private Service Connect 인터페이스가 있는 VM에 연결합니다.

  2. 다음 명령어를 실행합니다.

    ip address
    

    네트워크 인터페이스 목록에서 Private Service Connect 인터페이스의 게스트 OS 이름을 찾아 기록하세요. 예를 들면 ens5입니다. 이 이름은 Private Service Connect 인터페이스의 IP 주소와 연결됩니다.

  3. 소비자 바인딩 트래픽을 위한 네트워크 네임스페이스를 만듭니다.

    sudo ip netns add consumer-ns
    
  4. Private Service Connect 인터페이스를 소비자 네트워크 네임스페이스로 이동합니다. 다음 명령어를 개별적으로 실행합니다.

    sudo ip link set OS_INTERFACE_NAME netns consumer-ns
    
    sudo ip netns exec consumer-ns ip link set OS_INTERFACE_NAME up
    

    OS_INTERFACE_NAME2단계에서 찾은 Private Service Connect 인터페이스의 게스트 OS 이름(예: ens5)으로 바꿉니다.

  5. Private Service Connect 인터페이스의 IP 주소를 복원합니다.

    sudo ip netns exec consumer-ns ip addr add INTERFACE_IP/32 dev OS_INTERFACE_NAME
    

    INTERFACE_IP를 Private Service Connect 인터페이스의 IP 주소로 바꿉니다.

  6. Private Service Connect 인터페이스의 변경사항을 확인합니다.

    sudo ip netns exec consumer-ns ip a
    

    Private Service Connect 인터페이스의 게스트 OS 이름이 명령어 출력에 나열되어 있는지 확인합니다. 인터페이스에 올바른 IP 주소가 있는지 확인합니다.

  7. 게이트웨이 IP 주소에 경로를 추가합니다.

    sudo ip netns exec consumer-ns ip route add GATEWAY_IP dev OS_INTERFACE_NAME scope link
    

    GATEWAY_IP를 Private Service Connect 인터페이스 서브넷의 기본 게이트웨이 IP 주소로 바꿉니다.

  8. Private Service Connect 인터페이스의 기본 경로를 추가합니다.

    sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  9. consumer-ns 네임스페이스의 라우팅 테이블을 확인합니다.

    sudo ip netns exec consumer-ns ip route
    

    라우팅 테이블에 다음 형식의 항목이 있는지 확인합니다.

    default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  10. 인터페이스가 겹치는 IP 주소 범위의 각 부분에 있는 VM에 연결할 수 있는지 확인하려면 다음을 수행합니다.

    1. 방화벽 규칙이 대상 VM에 대한 인그레스 ICMP 트래픽을 허용하도록 구성되었는지 확인합니다.

    2. 인터페이스의 VM에서 겹치는 IP 주소 범위에 있는 소비자 VM으로 ICMP 핑을 전송합니다. 소비자 네임스페이스를 사용합니다.

      sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
      

      CONSUMER_IP_ADDRESS를 겹치는 IP 주소 범위의 소비자 VM IP 주소로 바꿉니다.

    3. 인터페이스의 VM에서 겹치는 IP 주소 범위에 있는 프로듀서 VM으로 ICMP 핑을 전송합니다. 기본 네임스페이스를 사용합니다.

      ping PRODUCER_IP_ADDRESS
      

      PRODUCER_IP_ADDRESS를 겹치는 IP 주소 범위에서 프로듀서 VM의 IP 주소로 바꿉니다.

정책 기반 라우팅과 대상 주소 중복 관리

인터페이스 VM의 운영체제에서 정책 기반 라우팅을 구성하여 대상 주소 중복을 관리할 수 있습니다. 이 방법은 동일한 애플리케이션이 소비자 및 프로듀서 VPC 네트워크 모두에 있는 워크로드에 액세스해야 하는 경우에 효과적이지만 중첩되는 IP 범위에서 각 포트에 대해 절차를 반복해야 합니다.

대상 중복을 관리하기 위해 정책 기반 라우팅을 설정할 때 소비자 애플리케이션에 사용할 대상 포트를 선택합니다. 이러한 포트 중 하나에 바인딩된 트래픽은 Private Service Connect 인터페이스를 통해 소비자 서브넷으로 이동하고 다른 트래픽은 기본 인터페이스를 통해 프로듀서 서브넷에 전달됩니다.

  1. Private Service Connect 인터페이스의 VM에 연결합니다.

  2. iproute2 명령어를 사용할 수 없으면 설치합니다.

  3. /etc/iproute2/rt_tables 파일에 쓸 수 있는지 확인합니다.

  4. 경로 테이블을 만듭니다. Private Service Connect 인터페이스의 기본 경로를 추가합니다.

    echo "200 pscnet" >> /etc/iproute2/rt_tables \
    sudo ip route add default dev OS_INTERFACE_NAME table pscnet
    

    OS_INTERFACE_NAMEPrivate Service Connect 인터페이스의 게스트 OS 이름(예: ens5)으로 바꿉니다.

  5. 기본 게이트웨이를 통해 겹치는 소비자 서브넷 범위에 경로를 추가합니다.

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
    

    다음을 바꿉니다.

    • CONSUMER_SUBNET_RANGE: 소비자 서브넷의 IP 주소 범위
    • GATEWAY_IP: Private Service Connect 인터페이스 서브넷의 기본 게이트웨이 IP 주소
  6. 이 VM의 이그레스 패킷이 인터페이스의 IP 주소를 소스 IP 주소로 사용하도록 경로 테이블을 업데이트합니다.

    sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
    

    INTERFACE_IP를 Private Service Connect 인터페이스의 IP 주소로 바꿉니다.

  7. 소비자 애플리케이션의 대상 포트를 대상으로 하는 모든 트래픽에 적용되는 IP 규칙을 추가합니다.

    sudo ip rule add dport CONSUMER_PORT table pscnet
    

    CONSUMER_PORT를 소비자 VM으로 가는 트래픽으로 구성한 포트로 바꿉니다.

  8. 목적지 포트를 기반으로 패킷이 올바른 VM으로 라우팅되는지 확인하려면 다음을 수행합니다.

    1. 프로듀서 네트워크 및 소비자 네트워크에서 모두 중첩 범위의 동일한 IP 주소를 사용하는 테스트 VM을 만듭니다.
    2. 각 테스트 VM에서 HTTP 서버를 설정합니다. 소비자 애플리케이션용으로 설정한 포트를 리슨하도록 소비자 테스트 VM을 구성합니다. 소비자 애플리케이션용으로 설정한 포트와 다른 포트에서 리슨하도록 프로듀서 테스트 VM을 구성합니다.
    3. 테스트 VM에 대한 HTTP 트래픽을 허용하도록 방화벽 규칙이 구성되어 있는지 확인합니다.
    4. 소비자 애플리케이션에 구성한 포트를 사용하여 테스트 IP 주소에 GET 요청을 수행한 후 올바른 인스턴스에 도달했는지 확인합니다.

      curl TEST_IP_ADDRESS:CONSUMER_PORT
      

      다음을 바꿉니다.

      • TEST_IP_ADDRESS: 테스트 VM의 IP 주소
      • CONSUMER_PORT: 소비자 애플리케이션의 포트
    5. 프로덕션 테스트 VM에 구성한 포트를 사용하여 테스트 IP 주소에 GET 요청을 수행한 후 올바른 인스턴스에 도달했는지 확인합니다.

      curl IP_ADDRESS:PRODUCER_PORT
      

      다음을 바꿉니다.

      • IP_ADDRESS: 테스트 VM의 IP 주소
      • PRODUCER_PORT: 프로덕션 테스트 VM에 구성한 포트