공유 VPC 네트워크를 사용한 직접 VPC 이그레스

서버리스 VPC 액세스 커넥터가 필요 없는 직접 VPC 이그레스를 사용하여 Cloud Run 서비스나 작업에서 공유 VPC 네트워크로 트래픽을 전송하도록 사용 설정할 수 있습니다.

이 페이지에서는 공유 VPC 네트워크의 서브넷을 사용하도록 Cloud Run의 IAM 권한을 구성한 다음 서비스 또는 작업을 공유 서브넷에 배치하는 방법을 설명합니다.

시작하기 전에

직접 VPC 이그레스를 사용할 때는 서브넷에 사용 가능한 IP 주소가 적어도 수백 개 있는지 확인합니다. 모든 Cloud Run 서비스에서 총 인스턴스 수가 100개를 초과하면 사용 가능한 총 개수의 4배(4X) 이상을 확보하는 것이 좋습니다.

제한사항

다음 제한사항은 Cloud Run 서비스와 작업 모두에 적용됩니다.

  • Cloud Run은 개별 인스턴스당 최대 1Gbps의 처리량을 지원합니다. 이 양을 초과하면 성능이 제한됩니다.
  • Cloud Run 사용 할당량은 Direct VPC 이그레스를 사용하도록 구성할 수 있는 최대 인스턴스 수를 제한합니다. 최대 개수는 Cloud Run 버전 또는 작업 실행별로 구성됩니다. 기본 한도를 늘리려면 할당량을 늘리는 방법을 참조하세요. Google Cloud 콘솔을 사용하여 할당량을 확인할 수 있습니다.

  • Cloud Run 서비스 및 작업에서 네트워킹 인프라 유지보수 이벤트 중에 연결 중단이 발생할 수 있습니다. 비정기적인 연결 재설정을 처리할 수 있는 클라이언트 라이브러리를 사용하는 것이 좋습니다.
다음 제한사항은 Cloud Run 작업에만 적용되며 서비스에는 적용되지 않습니다.
  • Cloud Run 작업에 대한 Direct VPC 이그레스는 미리보기에서만 제공됩니다.
  • 적절한 작업 실행을 위해서는 동시 인스턴스가 8개를 초과할 필요가 없는 작업에만 Direct VPC 이그레스를 사용하고 최소 1,024개의 IP 주소를 예약해야 합니다.

다음 항목은 Direct VPC 이그레스에서 지원되지 않습니다.

  • VPC 흐름 로그는 Cloud Run 서비스나 버전의 이름을 제공하지 않습니다.
  • VPC 흐름 로그는 Cloud Run 또는 온프레미스 머신과 같은 비VM 리소스에서는 보고되지 않습니다.
  • 방화벽 규칙 로깅
  • 패킷 미러링
  • Network Intelligence Center
  • IPv6 트래픽
  • 대상 리소스에 적용된 인그레스 방화벽 규칙에서 네트워크 태그 사용
  • 서비스 ID를 대상 리소스에 적용된 인그레스 방화벽 규칙의 소스 서비스 계정으로 사용
  • 방화벽 규칙에서는 Cloud Run 워크로드에 연결된 Resource Manager 태그를 사용할 수 없습니다.
  • 1시간 넘게 실행되는 Cloud Run 작업에서 연결 중단이 발생할 수 있습니다. 이러한 문제는 작업을 한 머신에서 다른 머신으로 마이그레이션하는 유지보수 이벤트 중에 발생할 수 있습니다. 컨테이너는 이벤트 10초 전에 SIGTSTP 신호를 받고 이벤트 후 SIGCONT 신호를 받습니다. 컨테이너가 SIGCONT 신호를 수신하면 연결을 재시도합니다.

IAM 권한 설정

공유 VPC 서비스 프로젝트의 Cloud Run이 공유 VPC 네트워크에 액세스하려면 먼저 Cloud Run 서비스 에이전트에 서브넷을 사용할 수 있는 충분한 권한이 있는지 확인해야 합니다.

  1. 공유 VPC 네트워크에 액세스하려면 다음 역할 중 하나를 추가하여 Cloud Run 서비스 에이전트에 충분한 권한을 부여합니다.

    • 공유 VPC 호스트 프로젝트의 Compute 네트워크 사용자(compute.networkUser) 역할

      예를 들어 다음 명령어를 실행합니다.

      gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
      --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
      --role "roles/compute.networkUser"

      다음을 바꿉니다.

      • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 ID
      • SERVICE_PROJECT_NUMBER: Cloud Run 서비스 또는 작업을 배포하는 공유 VPC 서비스 프로젝트 번호
    • 공유 VPC 호스트 프로젝트의 Compute 네트워크 뷰어(compute.networkViewer) 및 공유 VPC 서브넷의 Compute 네트워크 사용자(compute.networkUser) 역할

      예를 들어 서브넷에 Compute 네트워크 뷰어 역할을 부여하려면 다음 명령어를 실행합니다.

      gcloud compute networks subnets add-iam-policy-binding SUBNET_NAME \
        --region REGION \
        --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \
        --role "roles/compute.networkUser" \
        --project HOST_PROJECT_ID

      다음을 바꿉니다.

      • SUBNET_NAME: Cloud Run 서비스를 실행하려는 서브넷의 정규화된 리소스 이름
      • REGION: Cloud Run 서비스의 리전. 서브넷 리전과 일치해야 합니다.
      • SERVICE_PROJECT_NUMBER: Cloud Run 서비스 또는 작업을 배포하는 공유 VPC 서비스 프로젝트 번호
      • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 ID
  2. Cloud Run 서비스 에이전트에는 Cloud Run 프로젝트에 대한 Cloud Run 서비스 에이전트 역할이 필요합니다. 다음 명령어를 실행하여 역할이 수동으로 삭제되지 않았는지 확인할 수 있습니다.

    gcloud projects get-iam-policy SERVICE_PROJECT_ID \
      --flatten bindings \
      --filter "bindings.role:roles/run.serviceAgent"

    SERVICE_PROJECT_ID를 Cloud Run 서비스 또는 작업의 프로젝트 ID로 바꿉니다.

보다 세밀하게 제어하려면 Cloud Run 서비스 에이전트에 다음 권한이 있는지 확인할 수 있습니다.

  • 공유 VPC 호스트 프로젝트에 대한 compute.networks.get 권한
  • 호스트 프로젝트 또는 특정 서브넷에 대한 compute.subnetworks.get 권한
  • 호스트 프로젝트 또는 특정 서브넷에 대한 compute.subnetworks.use 권한
  • 공유 VPC 서비스 프로젝트에 대한 compute.addresses.get 권한
  • 공유 VPC 서비스 프로젝트에 대한 compute.addresses.list 권한
  • 공유 VPC 서비스 프로젝트에 대한 compute.addresses.createInternal 권한
  • 공유 VPC 서비스 프로젝트에 대한 compute.addresses.deleteInternal 권한

IP 주소 할당

Cloud Run 서비스나 작업을 VPC 네트워크에 배치하려면 네트워크와 서브넷을 지정해야 합니다. Cloud Run은 서브넷에서 IP 주소를 할당합니다.

IP 주소는 임시 주소이므로 개별 IP에 따라 정책을 만들지 마세요. 방화벽 규칙과 같이 IP를 기반으로 정책을 만들어야 하는 경우 전체 서브넷의 IP 주소 범위를 사용해야 합니다.

서비스 또는 작업에 사용되는 네트워크 또는 서브넷을 변경하려면 새 서비스 버전을 배포하거나 새 네트워크 및 서브넷 값을 사용하는 새 작업 태스크를 실행합니다.

수직 확장

트래픽이 급증할 경우 빠르게 수직 확장할 수 있도록 Cloud Run에서는 IP 주소가 필요하기 전에 IP 주소를 할당합니다.

언제든지 존재하는 인스턴스 수보다 많은 IP 주소가 할당될 수 있습니다. Cloud Run이 충분한 IP 주소를 가져올 수 있도록 하려면 서브넷에 최소 몇백 개의 사용 가능한 IP 주소가 있는지 확인합니다. 모든 Cloud Run 서비스 및 작업에서 서브넷의 총 인스턴스 수가 100개를 초과하면 사용 가능한 총 개수의 4배(4X) 이상을 확보하는 것이 좋습니다. Cloud Run에서 더 많은 IP 주소를 할당할 수 없으면 더 많은 IP 주소를 사용할 수 있을 때까지 서비스 인스턴스 또는 작업 태스크를 시작할 수 없습니다. IP 주소 공간이 제한된 경우 지원되는 IP 범위에서 추가 옵션을 참조하세요. IP 할당 효율성과 쉬운 관리를 위해 동일한 서브넷에 여러 서비스 또는 작업을 배치하세요.

축소

모든 서비스 또는 작업이 0으로 축소된 후에도 서비스 또는 작업이 다시 빠르게 확장되어야 하는 경우 Cloud Run은 최대 20분 동안 서브넷에서 일부 IP 주소를 예약합니다. 인스턴스마다 IP 주소가 하나씩 필요하지만 Cloud Run은 시작부터 /28 서브넷 마스크를 최소한으로 예약합니다. 16개의 인스턴스가 모두 소진되면 Cloud Run이 새로운 서브넷을 만듭니다.

서브넷을 삭제하려면 먼저 Cloud Run 서비스 또는 작업을 삭제하거나 재배포하여 서브넷 사용을 중지한 후 1~2시간 정도 기다려야 합니다.

지원되는 IP 범위

Cloud Run은 서브넷에 다음 IPv4 범위를 지원합니다.

  • RFC 1918(권장)
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • RFC 6598
    • 100.64.0.0/10
  • 클래스 E(온프레미스 설정에는 권장되지 않음)
    • 240.0.0.0/4

서비스 배포

직접 VPC 이그레스를 사용하면 Cloud Run 서비스가 서버리스 VPC 액세스 커넥터 없이 공유 VPC 네트워크로 트래픽을 전송할 수 있습니다. 네트워크 비용은 서비스 자체와 마찬가지로 0으로 조정됩니다. Cloud Run 서비스 버전에서 직접 네트워크 태그를 추가하여 VPC 방화벽 규칙 적용과 같은 보다 세분화된 네트워크 보안을 구현할 수도 있습니다.

Google Cloud 콘솔, Google Cloud CLI, YAML을 사용하여 서비스와 함께 직접 VPC 이그레스를 구성할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run 페이지로 이동합니다.

    Cloud Run으로 이동

  2. 새 서비스를 구성하는 경우 컨테이너 배포를 클릭하고 서비스를 선택합니다. 기존 서비스를 구성하고 배포하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

  3. 새 서비스를 구성하는 경우 필요에 따라 초기 서비스 설정 페이지를 작성한 후 컨테이너, 볼륨, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.

  4. 네트워킹 탭을 클릭합니다.

  5. 아웃바운드 트래픽을 위해 VPC에 연결을 클릭합니다.

  6. VPC로 직접 트래픽 전송을 클릭합니다.

  7. 나와 공유된 네트워크를 선택합니다.

  8. 네트워크 필드에서 트래픽을 전송할 공유 VPC 네트워크를 선택합니다.

  9. 서브넷 필드에서 서비스가 IP 주소를 수신할 서브넷을 선택합니다.

  10. 선택사항: 서비스 또는 연결할 네트워크 태그의 이름을 입력합니다. 네트워크 태그는 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.

  11. 트래픽 라우팅에 다음 중 하나를 선택합니다.

    • 공유 VPC 네트워크를 통해 내부 주소로만 트래픽을 전송하도록 비공개 IP에 대한 요청만 VPC로 라우팅합니다.
    • 공유 VPC 네트워크를 통해 모든 아웃바운드 트래픽을 전송하려면 모든 트래픽을 VPC로 라우팅합니다.
  12. 만들기 또는 배포를 클릭합니다.

  13. 서비스가 공유 VPC 네트워크에 있는지 확인하려면 서비스를 클릭한 후 네트워킹 탭을 클릭합니다. 네트워크와 서브넷은 VPC 카드에 나열됩니다.

이제 방화벽 규칙에서 허용하는 대로 Cloud Run 서비스에서 공유 VPC 네트워크의 모든 리소스로 요청을 전송할 수 있습니다.

gcloud

공유 서브넷에 서비스를 배치하려면 다음 명령어를 실행하여 공유 VPC 네트워크 및 서브넷에 대해 정규화된 리소스 이름을 지정합니다.

gcloud run deploy SERVICE_NAME \
  --image IMAGE_URL \
  --network projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK \
  --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
  --network-tags NETWORK_TAG_NAMES \
  --vpc-egress=EGRESS_SETTING \
  --region REGION \
  --max-instances MAX
  

다음을 바꿉니다.

  • SERVICE_NAME: Cloud Run 서비스의 이름
  • IMAGE_URL: 서비스의 이미지 URL
  • HOST_PROJECT_ID: 공유 VPC 프로젝트의 ID
  • VPC_NETWORK: 공유 VPC 네트워크의 정규화된 리소스 이름
  • REGION: Cloud Run 서비스의 리전. 서브넷 리전과 일치해야 합니다.
  • SUBNET_NAME: 서브넷의 정규화된 리소스 이름
  • (선택사항) NETWORK_TAG_NAMES를 서비스와 연결할 네트워크 태그의 쉼표로 구분된 이름으로 바꿉니다. 서비스의 경우 네트워크 태그가 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.
  • EGRESS_SETTING: 이그레스 설정 값
    • all-traffic: 모든 아웃바운드 트래픽을 공유 VPC 네트워크를 통해 전송합니다.
    • private-ranges-only: 공유 VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
  • MAX: 공유 VPC 네트워크에 사용할 최대 인스턴스 수입니다. 서비스에 허용되는 최대 인스턴스 수는 100개입니다.

자세한 내용과 선택적 인수는 gcloud 참조를 확인하세요.

YAML

  1. 새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드하세요.

    gcloud run services describe SERVICE --format export > service.yaml
  2. 다음 속성을 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE_NAME
      labels:
        cloud.googleapis.com/location: REGION
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
            run.googleapis.com/vpc-access-egress: EGRESS_SETTING
        spec:
          containers:
          - image: IMAGE

    다음과 같이 바꿉니다.

    • SERVICE_NAME: Cloud Run 서비스 이름. 서비스 이름은 49자 이하여야 하며 리전 및 프로젝트별로 고유해야 합니다.
    • REGION: Cloud Run 서비스의 리전. 이 리전은 서브넷 리전과 일치해야 합니다.
    • NETWORK: 공유 VPC 네트워크의 정규화된 리소스 이름
    • SUBNET_NAME: 서브넷의 정규화된 리소스 이름
    • (선택사항) NETWORK_TAG_NAMES를 서비스에 연결할 네트워크 태그의 이름으로 바꿉니다. 서비스의 경우 네트워크 태그가 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.
    • EGRESS_SETTING: 이그레스 설정 값
      • all-traffic: 모든 아웃바운드 트래픽을 공유 VPC 네트워크를 통해 전송합니다.
      • private-ranges-only: 공유 VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
    • IMAGE: 서비스 컨테이너 이미지의 URL
  3. 다음 명령어를 사용하여 서비스를 만들거나 업데이트합니다.

    gcloud run services replace service.yaml

Terraform

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

  1. main.tf 파일에 다음을 추가합니다.

    /**
     * Copyright 2024 Google LLC
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    # Example configuration of a Cloud Run service with direct VPC
    
    resource "google_cloud_run_v2_service" "default" {
      name     = "cloudrun-service"
      location = "us-central1"
    
      deletion_protection = false # set to "true" in production
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
        vpc_access {
          network_interfaces {
            network    = "default"
            subnetwork = "default"
            tags       = ["tag1", "tag2", "tag3"]
          }
        }
      }
    }
    

선택적으로 서비스에 대한 인증되지 않은 액세스를 허용하려면 서비스를 공개로 설정합니다.

작업 만들기

직접 VPC 이그레스를 사용하면 Cloud Run 작업이 서버리스 VPC 액세스 커넥터 없이 공유 VPC 네트워크로 트래픽을 전송할 수 있습니다. Cloud Run 작업에서 직접 네트워크 태그를 추가하여 VPC 방화벽 규칙 적용과 같은 더 세분화된 네트워크 보안을 구현할 수도 있습니다.

Google Cloud 콘솔, Google Cloud CLI, YAML을 사용하여 작업과 함께 Direct VPC 이그레스를 구성할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run 페이지로 이동합니다.

    Cloud Run으로 이동

  2. 새 작업을 구성하는 경우 컨테이너 배포를 클릭하고 작업을 선택하여 필요에 따라 초기 작업 만들기 양식을 작성합니다. 기존 작업을 구성하는 경우 작업 탭을 클릭하고 작업을 선택한 후 수정을 클릭합니다.

  3. 컨테이너, 변수 및 보안 비밀, 연결, 보안을 클릭하여 작업 속성 페이지를 펼칩니다.

  4. 연결 탭을 클릭합니다.

  5. 아웃바운드 트래픽을 위해 VPC에 연결을 클릭합니다.

  6. VPC로 직접 트래픽 전송을 클릭합니다.

  7. 나와 공유된 네트워크를 선택합니다.

  8. 네트워크 필드에서 트래픽을 전송할 공유 VPC 네트워크를 선택합니다.

  9. 서브넷 필드에서 작업이 IP 주소를 수신할 서브넷을 선택합니다.

  10. 선택사항: 작업과 연결할 네트워크 태그의 이름을 입력합니다. 작업의 경우 네트워크 태그는 실행 수준에서 지정됩니다. 각 작업 실행에는 network-tag-2와 같은 다른 네트워크 태그가 있을 수 있습니다.

  11. 트래픽 라우팅에 다음 중 하나를 선택합니다.

    • 공유 VPC 네트워크를 통해 내부 주소로만 트래픽을 전송하도록 비공개 IP에 대한 요청만 VPC로 라우팅합니다.
    • 공유 VPC 네트워크를 통해 모든 아웃바운드 트래픽을 전송하려면 모든 트래픽을 VPC로 라우팅합니다.
  12. 만들기 또는 업데이트를 클릭합니다.

  13. 작업이 공유 VPC 네트워크에 있는지 확인하려면 작업을 클릭한 후 구성 탭을 클릭합니다. 네트워크와 서브넷은 VPC 카드에 나열됩니다.

이제 방화벽 규칙에서 허용하는 대로 Cloud Run 작업을 실행하고 공유 VPC 네트워크의 모든 리소스로 작업의 요청을 전송할 수 있습니다.

gcloud

공유 서브넷에 작업을 배치하려면 다음 명령어를 실행하여 공유 VPC 네트워크 및 서브넷에 대해 정규화된 리소스 이름을 지정합니다.

gcloud run jobs create JOB_NAME \
  --image IMAGE_URL \
  --network projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK \
  --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
  --network-tags NETWORK_TAG_NAMES \
  --vpc-egress=EGRESS_SETTING \
  --region REGION \
  

다음을 바꿉니다.

  • JOB_NAME: Cloud Run 작업의 이름
  • IMAGE_URL: 작업의 이미지 URL
  • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 ID
  • VPC_NETWORK: 공유 VPC 네트워크의 정규화된 리소스 이름
  • REGION: Cloud Run 작업의 리전. 서브넷 리전과 일치해야 합니다.
  • SUBNET_NAME: 서브넷 이름의 정규화된 리소스 이름
  • (선택사항) NETWORK_TAG_NAMES: 작업에 연결할 네트워크 태그의 쉼표로 구분된 이름. 각 작업 실행에는 network-tag-2와 같은 다른 네트워크 태그가 있을 수 있습니다.
  • EGRESS_SETTING: 이그레스 설정 값
    • all-traffic: 모든 아웃바운드 트래픽을 공유 VPC 네트워크를 통해 전송합니다.
    • private-ranges-only: 공유 VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.

자세한 내용과 선택적 인수는 gcloud 참조를 확인하세요.

YAML

  1. 새 작업을 만드는 경우에는 이 단계를 건너뜁니다. 기존 작업을 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. 다음 속성을 업데이트합니다.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
      annotations:
        run.googleapis.com/launch-stage: BETA
      labels:
        cloud.googleapis.com/location: REGION
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
            run.googleapis.com/vpc-access-egress: EGRESS_SETTING
        spec:
          containers:
          - image: IMAGE

    다음과 같이 바꿉니다.

    • JOB_NAME: Cloud Run 작업 이름. 작업 이름은 49자 이하여야 하며 리전 및 프로젝트별로 고유해야 합니다.
    • REGION: Cloud Run 작업의 리전. 이 리전은 서브넷의 리전과 일치해야 합니다.
    • NETWORK: 공유 VPC 네트워크의 정규화된 리소스 이름
    • SUBNET: 서브넷의 정규화된 리소스 이름
    • (선택사항) NETWORK_TAG_NAMES: 작업에 연결할 네트워크 태그의 이름. 작업의 경우 네트워크 태그는 실행 수준에서 지정됩니다. 각 작업 실행에는 network-tag-2와 같은 다른 네트워크 태그가 있을 수 있습니다.
    • EGRESS_SETTING: 이그레스 설정 값
      • all-traffic: 모든 아웃바운드 트래픽을 공유 VPC 네트워크를 통해 전송합니다.
      • private-ranges-only: 공유 VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
    • IMAGE: 작업 컨테이너 이미지의 URL
  3. 다음 명령어를 사용하여 작업을 만들거나 업데이트합니다.

    gcloud run jobs replace job.yaml

서비스 연결 해제

콘솔

  • 공유 VPC 네트워크에서 서비스를 삭제하려면 다음 안내를 따르세요.

    1. Google Cloud 콘솔에서 Cloud Run 페이지로 이동합니다.

      Cloud Run으로 이동

    2. 삭제할 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

    3. 네트워킹 탭을 클릭합니다.

    4. 아웃바운드 트래픽을 위해 VPC에 연결을 선택 취소합니다.

    5. 배포를 클릭합니다.

    6. 서비스가 더 이상 공유 VPC 네트워크에 없는지 확인하려면 네트워킹 탭을 클릭합니다. 네트워크 및 서브넷이 VPC 카드에 더 이상 나열되지 않습니다.

  • 서비스를 공유 VPC 네트워크에 연결된 상태로 유지하면서 네트워크 태그만 삭제하려면 다음 안내를 따르세요.

    1. 삭제할 네트워크 태그가 포함된 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

    2. 네트워킹 탭을 클릭합니다.

    3. 서비스와 더 이상 연결하지 않으려는 네트워크 태그의 이름을 선택 취소합니다.

    4. 배포를 클릭합니다.

gcloud

  • 공유 VPC 네트워크에서 서비스를 삭제하려면 다음 명령어를 실행합니다.

    gcloud run services update SERVICE_NAME --region=REGION \
    --clear-network
  • 서비스를 공유 VPC 네트워크에 연결된 상태로 유지하면서 네트워크 태그만 삭제하려면 다음 명령어를 실행합니다.

    gcloud run services update SERVICE_NAME --region=REGION \
    --clear-network-tags

    다음을 바꿉니다.

    • SERVICE_NAME: Cloud Run 서비스의 이름
    • REGION: Cloud Run 서비스의 리전

YAML

  • 공유 VPC 네트워크에서 서비스를 삭제하려면 다음 안내를 따르세요.

    1. 서비스의 YAML 구성을 다운로드합니다.

      gcloud run services describe SERVICE_NAME --format export > service.yaml
    2. service.yaml 파일에서 다음 콘텐츠를 삭제합니다.

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'

      장소

      • NETWORK: 공유 VPC 네트워크의 정규화된 리소스 이름
      • SUBNET: 서브넷의 정규화된 리소스 이름
      • (선택사항) NETWORK_TAG_NAMES: 서비스와 연결한 경우 네트워크 태그의 이름입니다.
    3. 다음 명령어를 사용하여 서비스를 업데이트합니다.

      gcloud run services replace service.yaml
  • 서비스를 공유 VPC 네트워크에 연결된 상태로 유지하면서 네트워크 태그만 삭제하려면 다음 안내를 따르세요.

    1. 서비스의 YAML 구성을 다운로드합니다.

      gcloud run services describe SERVICE_NAME --format export > service.yaml
    2. 다음 예시와 같이 networksubnetwork 변수를 그대로 둔 상태로 service.yaml 파일의 콘텐츠에서 tags 변수를 삭제합니다.

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'

      다음을 바꿉니다.

      • NETWORK: 공유 VPC 네트워크의 정규화된 리소스 이름
      • SUBNET: 서브넷의 정규화된 리소스 이름
    3. 다음 명령어를 사용하여 서비스를 업데이트합니다.

      gcloud run services replace service.yaml

작업 연결 해제

콘솔

  • 공유 VPC 네트워크에서 작업을 삭제하려면 다음 안내를 따르세요.

    1. Google Cloud 콘솔에서 Cloud Run 페이지로 이동합니다.

      Cloud Run으로 이동

    2. 삭제할 작업을 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

    3. Configuration 탭을 클릭합니다.

    4. 아웃바운드 트래픽을 위해 VPC에 연결을 선택 취소합니다.

    5. 업데이트를 클릭합니다.

    6. 작업이 더 이상 공유 VPC 네트워크에 없는지 확인하려면 구성 탭을 클릭합니다. 네트워크 및 서브넷이 VPC 카드에 더 이상 나열되지 않습니다.

  • 작업을 공유 VPC 네트워크에 연결된 상태로 유지하면서 네트워크 태그만 삭제하려면 다음 안내를 따르세요.

    1. 삭제할 네트워크 태그가 포함된 작업을 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

    2. 연결 탭을 클릭합니다.

    3. 더 이상 작업과 연결하지 않으려는 네트워크 태그의 이름을 선택 취소합니다.

    4. 업데이트를 클릭합니다.

gcloud

  • 공유 VPC 네트워크에서 작업을 삭제하려면 다음 명령어를 실행합니다.

    gcloud run jobs update JOB_NAME --region=REGION \
      --clear-network
      
  • 작업을 공유 VPC 네트워크에 연결된 상태로 유지하면서 네트워크 태그만 삭제하려면 다음 명령어를 실행합니다.

    gcloud run jobs update JOB_NAME --region=REGION \
      --clear-network-tags
      

    다음을 바꿉니다.

    • JOB_NAME: Cloud Run 작업의 이름
    • REGION: Cloud Run 작업의 리전

YAML

  • 공유 VPC 네트워크에서 작업을 삭제하려면 다음 안내를 따르세요.

    1. 작업의 YAML 구성을 다운로드합니다.

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. job.yaml 파일에서 다음 콘텐츠를 삭제합니다.

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'

      장소

      • NETWORK: 공유 VPC 네트워크의 정규화된 리소스 이름
      • SUBNET: 서브넷의 정규화된 리소스 이름
      • (선택사항) NETWORK_TAG_NAMES: 작업과 연결한 경우 네트워크 태그의 이름
    3. 다음 명령어를 사용하여 작업을 업데이트합니다.

      gcloud run jobs replace job.yaml
  • 작업을 공유 VPC 네트워크에 연결된 상태로 유지하면서 네트워크 태그만 삭제하려면 다음 안내를 따르세요.

    1. 작업의 YAML 구성을 다운로드합니다.

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. job.yaml 파일에서 다음 콘텐츠를 삭제합니다.

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'

      장소

      • NETWORK: 공유 VPC 네트워크의 정규화된 리소스 이름
      • SUBNET: 서브넷의 정규화된 리소스 이름
      • (선택사항) NETWORK_TAG_NAMES: 작업과 연결한 경우 네트워크 태그의 이름
    3. 다음 명령어를 사용하여 작업을 업데이트합니다.

      gcloud run jobs replace job.yaml

문제 해결

서브넷을 삭제할 수 없음

서브넷을 삭제하려면 먼저 서브넷을 사용하는 모든 리소스를 삭제해야 합니다. Cloud Run이 서브넷을 사용하는 경우 서브넷을 삭제하기 전에 공유 VPC 네트워크에서 Cloud Run을 연결 해제하거나 다른 서브넷으로 이동해야 합니다.

공유 VPC 네트워크를 분리할 수 없음

호스트 프로젝트에서 공유 VPC 네트워크를 분리하려면 공유 VPC 프로비저닝 해제 단계를 수행하고 공유 VPC 네트워크에서 모든 Cloud Run 서비스 또는 작업의 연결을 해제해야 합니다.

공유 VPC 네트워크를 사용하는 Cloud Run 리소스를 확인하려면 다음 명령어를 실행합니다.

gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID

HOST_PROJECT_ID를 공유 VPC 호스트 프로젝트의 ID로 바꿉니다.

직접 VPC 서브넷에 IP 주소 부족

공유 VPC 네트워크의 서브넷에 IP 주소가 부족하면 Cloud Logging에 로깅됩니다. 이 경우 IP 주소가 사용 가능해질 때까지 Cloud Run에서 더 이상 서비스 인스턴스 또는 작업 태스크를 시작할 수 없습니다.

할당된 IP 주소 보기

Cloud Run이 할당한 IP 주소를 확인하려면 Google Cloud 콘솔의 IP 주소 페이지로 이동하거나 Google Cloud CLI에서 다음 명령어를 실행합니다.

gcloud compute addresses list