VPC 네트워크와 직접 VPC 이그레스

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

시작하기 전에

  • 프로젝트에 VPC 네트워크가 아직 없는 경우 VPC 네트워크를 만듭니다.

  • 공유 VPC를 사용하는 경우 공유 VPC 네트워크에 연결을 참조하세요.

  • VPC 서브넷을 사용하는 경우 서브넷은 /24 이상이어야 합니다.

  • Cloud Run 간에 사용할 수 있는 IP 주소가 충분한지 확인하려면 다음 조건을 참조하세요.

    • Cloud Run 서비스 또는 버전을 배포하려는 서브넷에는 사용 가능한 IP 주소가 수백 개 이상 있어야 합니다.
    • 안정적인 상태에서 서브넷을 사용하는 Cloud Run 인스턴스 총 개수가 100개 이상이면 인스턴스 수의 4배(4X) 이상으로 IP 주소를 충분히 예약합니다. 버전이 축소되면 Cloud Run은 최대 20분 동안 IP 주소를 보관합니다. 예를 들어 revision 1이 인스턴스 100개에서 0으로 축소되고 revision 2가 0에서 최대 100개로 확장되도록 버전을 업그레이드하면 Cloud Run은 축소 후 최대 20분 동안 revision 1 IP 주소를 유지합니다. 이 경우 20분 동안 IP 주소((100 + 100) * 4)를 최소 800개 이상 예약해야 합니다.

제한사항

다음 제한사항은 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 신호를 수신하면 연결을 재시도합니다.

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

IAM 권한 설정

다음 방법 중 하나를 사용하여 Cloud Run에서 VPC 네트워크에 액세스할 수 있도록 합니다.

  • Cloud Run 서비스 에이전트 역할: 기본적으로 Cloud Run 서비스 에이전트에는 필요한 권한이 포함되어 있는 Cloud Run 서비스 에이전트 역할(roles/run.serviceAgent)이 있습니다.

  • 커스텀 권한: 보다 세부적으로 제어할 수 있도록 프로젝트에 대한 다음 추가 권한을 Cloud Run 서비스 에이전트에 부여합니다.

    • compute.networks.get
    • compute.subnetworks.get
    • 프로젝트 또는 특정 서브넷에 대한 compute.subnetworks.use 권한
    • compute.addresses.get
    • compute.addresses.list
    • compute.addresses.createInternal
    • compute.addresses.deleteInternal
  • Compute 네트워크 사용자 역할: 기본 Cloud Run 서비스 에이전트 역할이나 커스텀 권한을 사용하지 않는 경우 다음 명령어를 실행하여 Cloud Run 서비스 에이전트 서비스 계정에 대한 Compute 네트워크 사용자 역할(roles/compute.networkUser)을 부여합니다.

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

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 ID
    • PROJECT_NUMBER: Cloud Run 서비스 또는 작업을 배포하는 프로젝트 번호

서비스 배포

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

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

콘솔

  1. Cloud Run으로 이동

  2. 배포할 새 서비스를 구성하려면 서비스 만들기를 클릭합니다. 기존 서비스를 구성하고 배포하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

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

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

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

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

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

  8. 서브넷 필드에서 서비스가 IP 주소를 수신할 서브넷을 선택합니다. 동일한 서브넷에 여러 서비스를 배포할 수 있습니다.

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

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

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

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

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

gcloud

Google Cloud CLI에서 커넥터 없이 Cloud Run 서비스를 배포하려면 다음 안내를 따르세요.

  1. gcloud 구성요소를 최신 버전으로 업데이트합니다.

    gcloud components update
  2. 프로젝트에 Compute Engine API가 사용 설정되었는지 확인합니다.

    gcloud services enable compute.googleapis.com
    
  3. 다음 명령어를 사용하여 Cloud Run 서비스를 배포합니다.

    gcloud run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --vpc-egress=EGRESS_SETTING \
    --region=REGION

    다음과 같이 바꿉니다.

    • SERVICE_NAME을 Cloud Run 서비스 이름으로 바꿉니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • NETWORK를 VPC 네트워크의 이름으로 바꿉니다.
    • SUBNET을 서브넷 이름으로 바꿉니다. 동일한 서브넷에 여러 서비스 또는 작업을 배포하거나 실행할 수 있습니다.
    • (선택사항) NETWORK_TAG_NAMES를 서비스와 연결할 네트워크 태그의 쉼표로 구분된 이름으로 바꿉니다. 서비스의 경우 네트워크 태그가 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.
    • EGRESS_SETTING이그레스 설정 값으로 바꿉니다.
      • all-traffic: 모든 아웃바운드 트래픽을 VPC 네트워크를 통해 전송합니다.
      • private-ranges-only: VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
    • REGION을 서비스 리전으로 바꿉니다.
  4. 서비스가 VPC 네트워크에 있는지 확인하려면 다음 명령어를 실행합니다.

    gcloud run services describe SERVICE_NAME \
    --region=REGION

    다음과 같이 바꿉니다.

    • SERVICE_NAME을 서비스 이름으로 바꿉니다.
    • REGION을 이전 단계에서 지정한 서비스의 리전으로 바꿉니다.

    출력에는 네트워크, 서브넷, 이그레스 설정의 이름이 포함되어야 합니다. 예를 들면 다음과 같습니다.

    VPC access:
      Network:       default
      Subnet:        subnet
      Egress:        private-ranges-only
    

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

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을 서브넷 이름으로 바꿉니다. 동일한 서브넷에 여러 서비스 또는 작업을 배포하거나 실행할 수 있습니다.
    • (선택사항) 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"]
          }
        }
      }
    }
    

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

작업 만들기

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

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

콘솔

  1. Cloud Run으로 이동

  2. 새 작업을 구성하는 경우 작업 탭을 클릭하고 필요에 따라 초기 작업 설정 페이지를 작성합니다. 기존 작업을 구성하는 경우 작업을 클릭한 후 수정을 클릭합니다.

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

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

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

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

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

  8. 서브넷 필드에서 작업이 IP 주소를 수신할 서브넷을 선택합니다. 동일한 서브넷에서 여러 작업을 실행할 수 있습니다.

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

    • VPC 네트워크를 통해 내부 주소로만 트래픽을 전송하도록 비공개 IP에 대한 요청만 VPC로 라우팅합니다.
    • VPC 네트워크를 통해 모든 아웃바운드 트래픽을 전송하려면 모든 트래픽을 VPC로 라우팅합니다.
  10. (선택사항) 서비스 또는 연결할 네트워크 태그의 이름을 입력합니다. 네트워크 태그는 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.

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

  12. 만들기 또는 업데이트를 클릭합니다.

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

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

gcloud

Google Cloud CLI에서 커넥터 없이 Cloud Run 작업을 만들려면 다음 안내를 따르세요.

  1. gcloud 구성요소를 최신 버전으로 업데이트합니다.

    gcloud components update
  2. 프로젝트에 Compute Engine API가 사용 설정되었는지 확인합니다.

    gcloud services enable compute.googleapis.com
    
  3. 다음 명령어를 사용하여 Cloud Run 작업을 만듭니다.

    gcloud run jobs create JOB_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --vpc-egress=EGRESS_SETTING \
    --region=REGION

    다음과 같이 바꿉니다.

    • JOB_NAME을 Cloud Run 작업 이름으로 바꿉니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/job:latest)로 바꿉니다.
    • NETWORK를 VPC 네트워크의 이름으로 바꿉니다.
    • SUBNET을 서브넷 이름으로 바꿉니다. 동일한 서브넷에 여러 서비스 또는 작업을 배포하거나 실행할 수 있습니다.
    • (선택사항) NETWORK_TAG_NAMES를 작업에 연결할 네트워크 태그의 이름으로 바꿉니다. 작업의 경우 네트워크 태그는 실행 수준에서 지정됩니다. 각 작업 실행에는 network-tag-2와 같은 다른 네트워크 태그가 있을 수 있습니다.
    • EGRESS_SETTING이그레스 설정 값으로 바꿉니다.
      • all-traffic: 모든 아웃바운드 트래픽을 VPC 네트워크를 통해 전송합니다.
      • private-ranges-only: VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
    • REGION을 작업의 리전으로 바꿉니다.
  4. 작업이 VPC 네트워크에 있는지 확인하려면 다음 명령어를 실행합니다.

    gcloud run jobs describe JOB_NAME \
      --region=REGION
      

    다음과 같이 바꿉니다.

    • JOB_NAME을 작업 이름으로 바꿉니다.
    • REGION을 이전 단계에서 지정한 작업의 리전으로 바꿉니다.

    출력에는 다음과 같이 네트워크와 서브넷의 이름이 포함됩니다.

    VPC network:
      Network:       default
      Subnet:        default
    

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

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 방화벽 규칙을 사용하여 VPC 네트워크의 리소스에 대한 액세스를 제한합니다. 다음 전략 중 하나를 사용하여 이러한 제한사항을 추가합니다.

  • 서브넷 IP 범위를 사용하여 서비스 또는 작업을 참조하는 인그레스 방화벽 규칙을 만듭니다.
  • 서비스 또는 작업을 참조하는 이그레스 방화벽 규칙을 만듭니다.

    이그레스 방화벽 규칙에서는 연결된 서비스 계정 서비스 ID, 서브넷 IP 범위 또는 연결된네트워크 태그를 사용하여 서비스나 작업을 참조합니다.

이그레스용 네트워크 태그

이그레스 방화벽 규칙에서 네트워크 태그를 사용하여 네트워크 보안을 강화합니다.

콘솔

네트워크 태그를 서비스나 작업과 연결하려면 다음 안내를 따르세요.

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

    Cloud Run으로 이동

  2. 네트워크 태그를 연결할 서비스나 작업을 클릭한 후 서비스의 경우 새 버전 수정 및 배포를, 작업의 경우 수정을 클릭합니다.

  3. 서비스의 경우 네트워킹 탭을, 작업의 경우 연결 탭을 클릭합니다.

  4. 아웃바운드 트래픽을 위해 VPC에 연결VPC로 직접 트래픽 전송을 선택했는지 확인합니다.

  5. 서브넷 필드에서 서비스가 IP 주소를 수신할 서브넷을 선택합니다. 동일한 서브넷에 여러 서비스 또는 작업을 배포하거나 실행할 수 있습니다.

  6. 네트워크 태그 필드에 서비스나 작업과 연결할 네트워크 태그의 이름을 입력합니다.

  7. 배포 또는 업데이트를 클릭합니다.

서비스의 경우 네트워크 태그가 버전 수준에서 지정되므로 서비스 버전마다 네트워크 태그 집합이 다를 수 있습니다. 작업의 경우 작업 실행이 생성될 때 작업에 포함된 네트워크 태그와 동일한 네트워크 태그가 작업 실행에 있습니다.

gcloud

네트워크 태그를 서비스나 작업과 연결하려면 gcloud run deploy 명령어를 사용합니다.

gcloud run deploy SERVICE_JOB_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --region=REGION

다음을 바꿉니다.

  • SERVICE_JOB_NAME을 서비스 또는 작업의 이름으로 바꿉니다.
  • IMAGE_URL을 서비스 또는 작업의 이미지 URL로 바꿉니다.
  • NETWORK를 VPC 네트워크의 이름으로 바꿉니다.
  • SUBNET을 서브넷 이름으로 바꿉니다. 동일한 서브넷에 여러 서비스 또는 작업을 배포하거나 실행할 수 있습니다.
  • NETWORK_TAG_NAMES를 네트워크 태그 이름 또는 쉼표로 구분된 네트워크 태그 목록으로 바꿉니다.
  • REGION: 리전의 이름

서비스의 경우 네트워크 태그가 버전 수준에서 지정되므로 서비스 버전마다 네트워크 태그 집합이 다를 수 있습니다. 작업의 경우 작업 실행이 생성될 때 작업에 포함된 네트워크 태그와 동일한 네트워크 태그가 작업 실행에 있습니다.

서비스 연결 해제

콘솔

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

    1. 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. Cloud Run으로 이동

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

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

    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. 다음 예시와 같이 networksubnetwork 변수를 그대로 둔 상태로 job.yaml 파일의 콘텐츠에서 tags 변수를 삭제합니다.

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

      다음을 바꿉니다.

      • NETWORK: VPC 네트워크의 이름
      • SUBNET: 서브넷 이름
    3. 다음 명령어를 실행하여 작업을 업데이트합니다.

      gcloud run jobs replace job.yaml

문제 해결

서브넷을 삭제할 수 없음

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

Direct VPC 서브넷에 IP 주소 부족

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

할당된 IP 주소 보기

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

gcloud compute addresses list