Google Cloud 관리형 서비스의 네트워크 연결

이 페이지에서는 Integration Connectors에서 MySQL용 CloudSQL, PostgreSQL용 CloudSQL, SQL Server용 CloudSQL과 같은 백엔드 서비스로의 비공개 연결을 설정하는 방법을 설명합니다. 이 페이지에서는 사용자가 다음에 익숙하다고 가정합니다.

고려사항

PSC 서비스 연결을 만들 때는 다음 핵심 사항을 고려하세요.

  • PSC 서비스 연결과 부하 분산기는 같은 VPC 내 서로 다른 서브넷에서 생성됩니다. 특히 서비스 연결은 항상 NAT 서브넷에서 생성됩니다.
  • 부하 분산기와 상태 점검 프로브에서 들어오는 트래픽에 필요하므로 SOCKS5 프록시 서버가 0.0.0.0:<port> IP 주소에 바인딩되어야 합니다. 자세한 내용은 상태 점검을 참조하세요.
  • 부하 분산기와 상태 점검 프로브의 트래픽을 같은 포트로 보내야 합니다.
  • 트래픽 흐름을 용이하게 하도록 방화벽 규칙을 구성하세요.

    인그레스 규칙

    • PSC 서비스 연결 서브넷에서 들어오는 트래픽이 백엔드 서비스에 도달해야 합니다.
    • ILB 서브넷 내에서 ILB는 트래픽을 SOCKS5 프록시 서버로 보낼 수 있어야 합니다.
    • 상태 점검 프로브가 SOCKS5 프록시 서버에 액세스할 수 있어야 합니다. Google Cloud 상태 점검 프로브에는 고정 IP 범위(35.191.0.0/16, 130.211.0.0/22)가 있습니다. 따라서 이러한 IP는 SOCKS 프록시 서버에 트래픽을 전송할 수 있습니다.

    이그레스 규칙

    이그레스 트래픽은 특정 거부 규칙이 구성되지 않는 한 Google Cloud 프로젝트에서 기본적으로 사용 설정됩니다.

  • PSC 서비스 연결 및 부하 분산기와 같은 모든 Google Cloud 구성요소는 같은 리전에 있어야 합니다.
  • 하지만 다음 시나리오에서는 SOCKS5 프록시 서버가 트래픽을 허용하는지 확인합니다.
    • 패스스루 부하 분산기(L4 TCP/UDP ILB): PSC 서비스 연결의 NAT IP 요청이 SOCKS5 프록시 서버에 도달할 수 있어야 합니다. 따라서 서비스 연결에 전체 NAT 서브넷의 IP 범위를 허용해야 합니다. 자세한 내용은 Private Service Connect 서브넷을 참조하세요.
    • 프록시 기반/HTTP(S4) 부하 분산기(L4 프록시 ILB, L7 ILB): 모든 새 요청은 부하 분산기에서 시작됩니다. 따라서 SOCKS5 프록시 서버에서 VPC 네트워크의 프록시 서브넷에서 들어오는 요청을 수락해야 합니다. 자세한 내용은 Envoy 기반 부하 분산기용 프록시 전용 서브넷을 참조하세요.

비공개 연결 구성

CloudSQL MySQL과 같은 일부 관리형 Google Cloud 서비스는 비공개 연결을 위해 PSC 서비스 연결을 노출합니다. 이 경우 이 단계를 건너뛰어 PSC 서비스 연결을 만들 수 있으며 제공된 관리형 서비스에서 제공하는 PSC 서비스 연결을 사용하여 Integration Connectors 엔드포인트 연결을 만들 수 있습니다.

다음과 같은 시나리오에서는 새 PSC 서비스 연결을 만들어야 합니다.

  • Google Cloud 관리형 서비스는 서비스 연결을 노출하지 않지만 비공개 서비스 액세스를 사용하여 IP 주소를 노출합니다.
  • Google Cloud 관리형 서비스는 서비스 연결을 노출하지만 서비스 연결을 사용하도록 Integration Connectors 프로젝트를 허용 목록에 추가하는 것을 지원하지 않습니다.

이러한 두 시나리오에 대한 서비스 연결을 만드는 단계는 다음 섹션에서 자세히 설명합니다. 서비스 연결을 만든 후 엔드포인트 엔드포인트 연결을 만들고 연결을 사용하려면 연결을 구성해야 합니다.

액세스를 제한하는 관리형 서비스에 대한 서비스 연결 만들기

관리형 서비스에서 Integration Connectors 프로젝트가 노출되는 서비스 연결을 사용하도록 허용 목록에 추가하지 못할 수 있습니다. 이 경우 프로젝트에서 다른 서비스 연결을 만들어 서비스 연결을 사용하고 부하 분산기를 통합 커넥터에 노출하는 부하 분산기를 만들어야 합니다.

다음 이미지는 서비스 연결을 노출하는 관리 서비스를 보여줍니다.

PSC NEG를 백엔드로 하는 부하 분산기 만들기

  1. 게시된 서비스에 연결할 NEG 만들기
  2. 리전 내부 프록시 네트워크 부하 분산기에 백엔드를 추가합니다.

자세한 내용은 Private Service Connect NEG 만들기를 참고하세요.

서비스 연결 만들기

  1. PSC NAT용 서브넷을 만듭니다.
  2. PSC NAT에서 부하 분산기로의 요청을 허용하는 방화벽 규칙 만들기
  3. 서비스 연결을 만듭니다.

자세한 내용은 PSC 서비스 연결 만들기를 참고하세요.

Integration Connectors 프로젝트에서 Private Service Connect 연결 허용

Integration Connectors 프로젝트에서 Private Service Connect 연결을 허용 목록에 추가하는 방법에 대한 자세한 내용은 Integration Connectors 허용 목록 추가를 참고하세요.

IP 주소를 노출하는 관리형 서비스에 대한 서비스 연결 만들기

관리 서비스가 서비스 연결을 노출하지 않으면 Integration Connectors의 트래픽은 프로젝트를 통해 프록시해야 합니다.

다음 이미지는 서비스 연결을 노출하지 않는 관리형 서비스를 보여줍니다.

비공개 연결을 구성하려면 다음 단계를 따르세요.

  1. PSC 서비스 연결을 만듭니다.
    1. SOCKS5 프록시 서버를 실행하는 데 필요한 Compute Engine VM 인스턴스를 만듭니다.
      1. 프록시 인스턴스 1을 만듭니다.
        gcloud compute instances create PROXY_INSTANCE_1 \
                    --project=PROJECT_ID \
                    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
                  

      요구사항에 따라 필요한 만큼 VM 인스턴스를 만들 수 있습니다.

    2. VM 인스턴스에 SSH를 허용하는 방화벽 규칙을 만듭니다.
      gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \
                  --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
                  
    3. VM 인스턴스는 Integration Connectors에서 관리형 서비스로의 트래픽을 프록시하는 데 사용됩니다. VM 인스턴스에 SOCKS5 프록시를 설치합니다. Cloud SQL 인증 프록시는 SOCKS5 프록시를 통한 연결 기능을 지원하므로 암호화된 트래픽을 Cloud SQL 인증 프록시에서 대상 Cloud SQL 인스턴스로 전달할 수 있습니다. 따라서 비공개 Cloud SQL 인스턴스에 연결하려면 SOCKS5 프록시 서버가 필요합니다.

      SOCKS5 프록시 서버를 설치하고 구성하는 자세한 단계는 이 문서에서 다루지 않으며, 원하는 SOCKS5 프록시를 설치할 수 있습니다. 다음 단계에서는 Dante SOCKS5 프록시 서버를 설치하고 구성하는 방법을 보여줍니다.

      1. SSH를 통해 VM 인스턴스에 연결합니다.
        gcloud compute ssh \
                    --tunnel-through-iap \
                    PROXY_INSTANCE_1
                
      2. Dante SOCKS5 프록시 서버를 설치합니다.
        sudo apt update
                sudo apt install dante-server
      3. 서버 인터페이스를 확인합니다.
        sudo ip a
      4. Dante 구성의 백업을 만듭니다.
        sudo mv /etc/danted.conf /etc/danted.conf.bak
      5. 새 Dante 구성 파일을 만듭니다.
        sudo nano /etc/danted.conf
      6. 다음 구성을 구성 파일에 복사합니다.
        logoutput: /var/log/socks.log
                # Bind the server to the 0.0.0.0 IP address to allow traffic
                # traffic from the load balancer and the health check probes.
                internal: 0.0.0.0 port = 1080
                external: ens4
                clientmethod: none
                socksmethod: none
                user.privileged: root
                user.notprivileged: nobody
                client pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                client block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
                socks pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                socks block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
      7. Dante 서버를 다시 시작하고 상태를 확인합니다.
        sudo systemctl restart danted
                sudo systemctl status danted
      8. VM 인스턴스를 종료합니다.
        exit
    4. VM 인스턴스를 백엔드로 사용하여 부하 분산기를 만듭니다.
      1. 비관리형 인스턴스 그룹 만들기
        gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
      2. 3단계에서 만든 VM 인스턴스를 그룹에 추가합니다.
        gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
                    --instances=PROXY_INSTANCE_1
      3. 상태 점검 프로브를 만들고 프로브의 트래픽을 허용합니다.
        1. 상태 점검 프로브를 만듭니다.
          gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
                      --port BACKEND_SERVER_PORT --region=REGION

          이 명령어에서 BACKEND_SERVER_PORT를 SOCKS5 프록시 서버가 실행되는 기본 포트인 1080으로 설정합니다.

        2. 프로브에서 들어오는 트래픽을 허용하는 방화벽 규칙을 만듭니다.
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_HEALTHCHECK \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT \
                      --source-ranges=35.191.0.0/16,130.211.0.0/22
      4. L4 내부 부하 분산기를 만들고 부하 분산기에서 들어오는 트래픽을 허용합니다.
        1. 백엔드 서비스를 만듭니다.
          gcloud compute backend-services create BACKEND_SERVICE \
                      --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME \
                      --health-checks-region=REGION 
        2. 인스턴스 그룹을 백엔드 서비스에 추가합니다.
          gcloud compute backend-services add-backend BACKEND_SERVICE \
                      --instance-group=INSTANCE_GROUP_NAME \
                      --instance-group-zone=ZONE
        3. 전달 규칙을 만듭니다.
          gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
                      --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \
                      --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \
                      --backend-service-region=REGION
        4. 부하 분산기에서 인스턴스 그룹으로 흐르는 내부 트래픽을 허용하는 방화벽 규칙을 만듭니다.
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
                      --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2

      엔드포인트 연결 만들기

      관리형 서비스에 대한 서비스 연결을 만든 후에는 엔드포인트 연결을 만든 다음 연결에 사용해야 합니다.

      IP 주소로 엔드포인트 연결

      IP 주소로 엔드포인트 연결을 만드는 방법에 관한 안내는 IP 주소로 엔드포인트 연결 만들기를 참고하세요.

      호스트 이름으로 엔드포인트 연결

      TLS 지원 백엔드와 같은 특정 경우에는 대상에서 TLS 검증을 실행하기 위해 비공개 IP 대신 호스트 이름을 사용해야 합니다. 호스트 대상에 대한 IP 주소 대신 비공개 DNS가 사용되는 경우 엔드포인트 연결을 IP 주소로 만드는 것 외에도 관리형 영역을 구성해야 합니다. 호스트 이름으로 엔드포인트 연결을 만드는 방법에 관한 안내는 호스트 이름으로 엔드포인트 연결 만들기를 참고하세요.

      나중에 엔드포인트 연결을 사용하도록 연결을 구성할 때 이 엔드포인트 연결을 선택할 수 있습니다.

      엔드포인트 연결을 사용하도록 연결 구성

      이제 엔드포인트 연결을 만들었으므로 연결에서 엔드포인트 연결을 사용합니다. 새 연결을 만들거나 기존 연결을 업데이트할 때는 대상 섹션에서 대상 유형으로 엔드포인트 연결을 선택하고 엔드포인트 연결 목록에서 만든 엔드포인트 연결을 선택합니다.

      관리형 영역을 만든 경우 대상 유형으로 호스트 주소를 선택하고 관리형 영역을 만들 때 만든 A 레코드를 사용합니다.

      문제해결 도움말

      비공개 연결에 문제가 있는 경우 이 섹션에 나열된 가이드라인에 따라 일반적인 문제를 방지하세요.

      • 커넥터의 테넌트 프로젝트가 서비스 연결 허용 목록에 있는지 확인합니다.
      • 방화벽 규칙이 다음과 같이 구성되어 있는지 확인합니다.
        • PSC 서비스 연결 서브넷의 트래픽이 백엔드 서비스에 도달하도록 허용해야 합니다.
        • 상태 확인 프로브는 백엔드 시스템에 액세스할 수 있어야 합니다. Google Cloud 상태 확인 프로브에는 고정 IP 범위(35.191.0.0/16, 130.211.0.0/22)가 있습니다. 따라서 이러한 IP 주소는 백엔드 서버로 트래픽을 전송하도록 허용해야 합니다.
      • Google Cloud 연결 테스트를 사용하여 네트워크 구성의 누락된 부분을 식별할 수 있습니다. 자세한 내용은 연결 테스트 만들기 및 실행을 참조하세요.