Google Cloud VPC의 네트워크 연결

이 페이지에서는 Integration Connectors에서 Google Cloud VPC에 호스팅된 MySQL, Postgres, SQL Server와 같은 백엔드 서비스로에 대한 비공개 연결을 설정하는 방법을 설명합니다.

이 페이지에서는 사용자가 다음에 익숙하다고 가정합니다.

Google Cloud VPC에 대한 비공개 연결은 다음 카테고리 중 하나에 속할 수 있습니다.

  • 백엔드 서비스와 PSC 서비스 연결은 모두 동일한 Google Cloud 프로젝트 또는 VPC에 있습니다.
  • 백엔드 서비스와 PSC 서비스 연결은 모두 다른 Google Cloud 프로젝트 또는 VPC에 있습니다.

고려사항

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

  • PSC 서비스 연결과 부하 분산기는 같은 VPC 내 서로 다른 서브넷에서 생성됩니다. 특히 서비스 연결은 항상 NAT 서브넷에서 생성됩니다.
  • 부하 분산기와 상태 점검 프로브의 트래픽을 같은 포트로 보내야 합니다.
  • 트래픽 흐름을 용이하게 하도록 방화벽 규칙을 구성하세요.

    인그레스 규칙

    PSC 서비스 연결 서브넷에서 들어오는 트래픽이 백엔드 서비스에 도달해야 합니다.

    이그레스 규칙

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

  • PSC 서비스 연결 및 부하 분산기와 같은 모든 Google Cloud 구성요소는 같은 리전에 있어야 합니다.

Google Cloud VPC의 백엔드 서비스에 대한 비공개 연결

이 섹션에서는 백엔드 서비스와 PSC 서비스 연결이 모두 동일한 Google Cloud 프로젝트 내에 있는 경우 비공개 연결을 설정하는 방법을 설명합니다.

다음 이미지는 Integration Connectors에서 Google Cloud VPC에 호스팅된 서비스로의 비공개 네트워크 연결 설정을 보여줍니다.

Google Cloud VPC에서 백엔드 서비스에 대한 비공개 연결을 설정하려면 다음 단계를 완료하세요.

PSC 서비스 연결 만들기

Integration Connectors에서 비공개 연결을 설정하려면 PSC 서비스 연결을 사용하여 서비스를 Integration Connectors에 노출해야 합니다. 서비스 연결은 항상 부하 분산기를 사용합니다. 따라서 서비스가 부하 분산기 뒤에 있지 않으면 부하 분산기를 구성해야 합니다.

  1. 상태 확인 프로브를 만들고 프로브의 트래픽을 허용합니다.
    1. 상태 점검 프로브를 만듭니다.
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      이 명령어에서 BACKEND_SERVER_PORT를 MySQL 서버가 실행되는 기본 포트인 3306으로 설정합니다.

    2. 프로브에서 들어오는 트래픽을 허용하는 방화벽 규칙을 만듭니다.
      gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
  2. 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 VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  3. 서비스 연결을 만드세요.
    1. PSC NAT용 서브넷을 생성합니다. 다음 명령어는 psc-nat-subnet1이라는 이름의 서브넷을 생성하며 용도는 PRIVATE_SERVICE_CONNECT입니다.
      gcloud compute networks subnets create psc-nat-subnet1 \
                --network=VPC_NETWORK --range=SUBNET_RANGE_1 \
                --purpose=PRIVATE_SERVICE_CONNECT
    2. PSC NAT에서 부하 분산기로의 트래픽을 허용하는 방화벽 규칙을 만듭니다.
      gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \
          --direction=INGRESS  --network=VPC_NETWORK \
          --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
    3. 명시적 승인으로 서비스 연결을 만듭니다.
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1

      이 명령어에서 LIMIT는 프로젝트의 연결 한도입니다. 연결 한도는 이 서비스에 연결할 수 있는 소비자 PSC 엔드포인트의 수입니다. SERVICE_DIRECTORY_PROJECT_ID를 가져오려면 다음 단계를 따르세요.

      • 지정된 Google Cloud 프로젝트의 요청만 수락하도록 PSC 서비스 연결을 만들 수 있습니다. 하지만 이렇게 하려면 Google Cloud 프로젝트와 연결된 서비스 디렉터리의 프로젝트 ID가 필요합니다. 서비스 디렉터리의 프로젝트 ID를 가져오려면 다음 예시와 같이 List Connections API를 사용할 수 있습니다.

        구문

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

        다음을 바꿉니다.

        • CONNECTORS_PROJECT_ID: 연결을 만든 Google Cloud 프로젝트의 ID

        이 예시에서는 connectors-test Google Cloud 프로젝트에 대한 서비스 디렉터리의 프로젝트 ID를 가져옵니다.

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

        터미널에서 이 명령어를 실행하면 다음과 비슷한 출력이 표시됩니다.

        .....
        {
          "connections": [
            {
              "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
              "createTime": "2022-10-07T09:02:31.905048520Z",
              "updateTime": "2022-10-07T09:22:39.993778690Z",
              "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
              "status": {
                "state": "ACTIVE"
              },
              "configVariables": [
                {
                  "key": "project_id",
                  "stringValue": "connectors-test"
                },
                {
                  "key": "dataset_id",
                  "stringValue": "testDataset"
                }
              ],
              "authConfig": {},
              "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
              "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
              "nodeConfig": {
                "minNodeCount": 2,
                "maxNodeCount": 50
              }
            },
        ....
        

        샘플 출력에서 connectors-test Google Cloud 프로젝트의 서비스 디렉터리 프로젝트 ID는 abcdefghijk-tp입니다.

PSC 서비스 연결을 만든 후 PSC 서비스 연결을 사용할 엔드포인트 연결을 만듭니다. 자세한 내용은 엔드포인트 연결 만들기를 참조하세요.

여러 Google Cloud 프로젝트의 비공개 연결

이 섹션에서는 백엔드 서비스와 PSC 서비스 연결이 서로 다른 Google Cloud 프로젝트 또는 VPC에 있는 경우 비공개 연결을 설정하는 방법을 설명합니다.

다음 이미지는 PSC 서비스 연결과 백엔드 서비스가 서로 다른 Google Cloud 프로젝트에 있는 비공개 네트워크 연결 설정을 보여줍니다.

다른 Google Cloud 프로젝트에 대한 비공개 연결을 설정하려면 다음 단계를 완료하세요.

비공개 연결 구성

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

  1. 부하 분산기 만들기 이미 부하 분산기가 있는 경우 이 단계를 건너뜁니다.
    1. 영역별 NEG 만들기. 자세한 내용은 영역 NEG 만들기를 참고하세요.
    2. 영역별 NEG를 백엔드로 추가하고 다음 규칙을 만듭니다.
      1. 전달 규칙을 만듭니다.
        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
      2. 부하 분산기에서 인스턴스 그룹으로 흐르는 내부 트래픽을 허용하는 방화벽 규칙을 만듭니다.
        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
  2. 서비스 연결을 만드세요.
    1. PSC NAT용 서브넷을 생성합니다. 다음 명령어는 psc-nat-subnet1이라는 이름의 서브넷을 생성하며 용도는 PRIVATE_SERVICE_CONNECT입니다.
      gcloud compute networks subnets create psc-nat-subnet1 \
                --network=VPC_NETWORK --range=SUBNET_RANGE_1 \
                --purpose=PRIVATE_SERVICE_CONNECT
    2. PSC NAT에서 부하 분산기로의 트래픽을 허용하는 방화벽 규칙을 만듭니다.
      gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \
          --direction=INGRESS  --network=VPC_NETWORK \
          --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
    3. 명시적 승인으로 서비스 연결을 만듭니다.
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1

      이 명령어에서 LIMIT는 프로젝트의 연결 한도입니다. 연결 한도는 이 서비스에 연결할 수 있는 소비자 PSC 엔드포인트의 수입니다. SERVICE_DIRECTORY_PROJECT_ID를 가져오려면 다음 단계를 따르세요.

      • 지정된 Google Cloud 프로젝트의 요청만 수락하도록 PSC 서비스 연결을 만들 수 있습니다. 하지만 이렇게 하려면 Google Cloud 프로젝트와 연결된 서비스 디렉터리의 프로젝트 ID가 필요합니다. 서비스 디렉터리의 프로젝트 ID를 가져오려면 다음 예시와 같이 List Connections API를 사용할 수 있습니다.

        구문

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

        다음을 바꿉니다.

        • CONNECTORS_PROJECT_ID: 연결을 만든 Google Cloud 프로젝트의 ID

        이 예시에서는 connectors-test Google Cloud 프로젝트에 대한 서비스 디렉터리의 프로젝트 ID를 가져옵니다.

        curl -X GET \
            -H "authorization: Bearer $(gcloud auth print-access-token)" \
            -H "Content-Type: application/json" \
            "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

        터미널에서 이 명령어를 실행하면 다음과 비슷한 출력이 표시됩니다.

        .....
        {
          "connections": [
            {
              "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
              "createTime": "2022-10-07T09:02:31.905048520Z",
              "updateTime": "2022-10-07T09:22:39.993778690Z",
              "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
              "status": {
                "state": "ACTIVE"
              },
              "configVariables": [
                {
                  "key": "project_id",
                  "stringValue": "connectors-test"
                },
                {
                  "key": "dataset_id",
                  "stringValue": "testDataset"
                }
              ],
              "authConfig": {},
              "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
              "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
              "nodeConfig": {
                "minNodeCount": 2,
                "maxNodeCount": 50
              }
            },
        ....
        

        샘플 출력에서 connectors-test Google Cloud 프로젝트의 서비스 디렉터리 프로젝트 ID는 abcdefghijk-tp입니다.

서비스 연결에서 Integration Connectors 프로젝트를 허용 목록에 추가

지정된 Google Cloud 프로젝트의 요청만 수락하도록 PSC 서비스 연결을 만들 수 있습니다. 하지만 이렇게 하려면 Google Cloud 프로젝트와 연결된 서비스 디렉터리의 프로젝트 ID가 필요합니다. 서비스 디렉터리의 프로젝트 ID를 가져오려면 다음 예시와 같이 List Connections API를 사용할 수 있습니다.

구문

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

다음을 바꿉니다.

  • CONNECTORS_PROJECT_ID: 연결을 만든 Google Cloud 프로젝트의 ID

이 예시에서는 connectors-test Google Cloud 프로젝트에 대한 서비스 디렉터리의 프로젝트 ID를 가져옵니다.

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

터미널에서 이 명령어를 실행하면 다음과 비슷한 출력이 표시됩니다.

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

샘플 출력에서 connectors-test Google Cloud 프로젝트의 서비스 디렉터리 프로젝트 ID는 abcdefghijk-tp입니다.

PSC 서비스 연결에서 Integration Connectors 프로젝트를 허용 목록에 추가한 후 PSC 서비스 연결을 사용할 엔드포인트 연결을 만듭니다. 자세한 내용은 엔드포인트 연결 만들기를 참조하세요.

엔드포인트 연결 만들기

IP 주소로 엔드포인트 연결

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

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

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

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

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

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

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

문제해결 도움말

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

  • 엔드포인트 연결이 올바르게 설정되고 PSC 연결이 설정되었는지 확인하려면 연결 상태를 확인합니다. 자세한 내용은 엔드포인트 연결 확인을 참고하세요.
  • 방화벽 규칙이 다음과 같이 구성되어 있는지 확인합니다.
    • PSC 서비스 연결 서브넷의 트래픽이 백엔드 서비스에 도달하도록 허용해야 합니다.
    • 부하 분산기는 백엔드 서비스로 트래픽을 전송할 수 있어야 합니다.
      • 패스스루 부하 분산기(L4 TCP/UDP ILB): PSC 서비스 연결의 NAT IP의 요청이 백엔드에 도달할 수 있어야 합니다. 이러한 NAT IP는 PSC NAT 서브넷 범위에서 자동으로 할당되므로 서비스 연결이 있는 전체 NAT 서브넷의 IP 범위를 허용해야 합니다. PSC NAT 서브넷을 찾으려면 다음 명령어를 사용합니다.
        gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=PRIVATE_SERVICE_CONNECT"
      • 프록시 기반/HTTP(S) 부하 분산기(L4 프록시 ILB, L7 ILB) 프록시 부하 분산기의 요청은 해당 리전의 프록시 전용 서브넷에서 시작됩니다. 따라서 프록시 전용 서브넷 범위의 요청이 백엔드 백엔드에 도달할 수 있도록 방화벽 규칙을 구성해야 합니다. 프록시 전용 서브넷을 찾으려면 다음 명령어를 사용합니다.
        gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=REGIONAL_MANAGED_PROXY"
      • 부하 분산기 문제 해결에 관한 자세한 내용은 내부 애플리케이션 부하 분산기 문제 해결을 참고하세요.

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