프로젝트 간 네트워크 정책 만들기

이 페이지에서는 Google Distributed Cloud (GDC) 에어 갭에서 프로젝트 간 트래픽 네트워크 정책을 구성하는 방법을 설명합니다.

교차 프로젝트 트래픽은 서로 다른 프로젝트 네임스페이스에 있지만 동일한 조직 내에 있는 서비스와 워크로드 간의 통신을 의미합니다.

프로젝트의 서비스와 워크로드는 기본적으로 외부 서비스 및 워크로드와 격리됩니다. 하지만 서로 다른 프로젝트 네임스페이스에 있고 동일한 조직 내에 있는 서비스와 워크로드는 교차 프로젝트 트래픽 네트워크 정책을 적용하여 서로 통신할 수 있습니다.

기본적으로 이러한 정책은 모든 영역에 전역적으로 적용됩니다. GDC 유니버스의 전역 리소스에 대한 자세한 내용은 멀티 영역 개요를 참고하세요.

단일 영역 내에서 프로젝트 간 트래픽 시행이 필요한 경우 단일 영역 워크로드 수준 프로젝트 간 정책 만들기를 참고하세요.

시작하기 전에

교차 프로젝트 트래픽 네트워크 정책을 구성하려면 다음이 필요합니다.

  • 필요한 ID 및 액세스 역할입니다. 특정 프로젝트의 정책을 관리하려면 project-networkpolicy-admin 역할이 필요합니다. 모든 영역에 걸쳐 있는 정책을 관리해야 하는 멀티 영역 환경의 경우 global-project-networkpolicy-admin 역할이 필요합니다. 자세한 내용은 사전 정의된 역할 및 액세스 준비를 참고하세요.
  • 기존 프로젝트 자세한 내용은 프로젝트 만들기를 참조하세요.

프로젝트 간 정책 만들기

인그레스 또는 이그레스 교차 프로젝트 트래픽 정책을 정의하여 프로젝트 간 통신을 관리할 수 있습니다.

인그레스 교차 프로젝트 정책 만들기

조직 내 다른 프로젝트의 워크로드에서 연결을 허용하려면 다른 프로젝트 워크로드의 인바운드 트래픽을 허용하도록 인그레스 방화벽 규칙을 구성해야 합니다.

이 정책은 조직의 모든 시간대에 적용됩니다.

다음 단계에 따라 새 방화벽 규칙을 만들고 다른 프로젝트의 워크로드에서 인바운드 트래픽을 허용합니다.

콘솔

  1. 구성 중인 프로젝트의 GDC 콘솔에서 탐색 메뉴의 네트워킹 > 방화벽으로 이동하여 방화벽 페이지를 엽니다.
  2. 작업 표시줄에서 만들기를 클릭하여 새 방화벽 규칙을 만듭니다.
  3. 방화벽 규칙 세부정보 페이지에서 다음 정보를 입력합니다.

    1. 이름 필드에 방화벽 규칙의 유효한 이름을 입력합니다.
    2. 트래픽 방향 섹션에서 인그레스를 선택하여 다른 프로젝트의 워크로드에서 인바운드 트래픽을 허용합니다.
    3. 타겟 섹션에서 다음 옵션 중 하나를 선택합니다.
      • 모든 사용자 워크로드: 구성 중인 프로젝트의 워크로드에 대한 연결을 허용합니다.
      • 서비스: 이 방화벽 규칙이 구성 중인 프로젝트 내의 특정 서비스를 타겟팅함을 나타냅니다.
    4. 타겟이 프로젝트 서비스인 경우 서비스 드롭다운 메뉴의 사용 가능한 서비스 목록에서 서비스 이름을 선택합니다.
    5. 보낸 사람 섹션에서 다음 두 가지 옵션 중 하나를 선택합니다.
      • 모든 프로젝트: 동일한 조직의 모든 프로젝트에 있는 워크로드에서 연결을 허용합니다.
      • 다른 프로젝트모든 사용자 워크로드: 동일한 조직의 다른 프로젝트에 있는 워크로드에서 연결을 허용합니다.
    6. 다른 프로젝트의 워크로드만 전송하려면 프로젝트 ID 드롭다운 메뉴의 프로젝트 목록에서 액세스할 수 있는 프로젝트를 선택합니다.
    7. 타겟이 모든 사용자 워크로드인 경우 프로토콜 및 포트 섹션에서 다음 옵션 중 하나를 선택합니다.
      • 모두 허용: 모든 프로토콜 또는 포트를 사용하여 연결을 허용합니다.
      • 지정된 프로토콜 및 포트: 인그레스 방화벽 규칙의 해당 필드에 지정된 프로토콜 및 포트만 사용하여 연결을 허용합니다.
  4. 방화벽 규칙 세부정보 페이지에서 만들기를 클릭합니다.

이제 동일한 조직 내 다른 프로젝트 워크로드의 연결이 허용됩니다. 방화벽 규칙을 만들면 방화벽 페이지의 표에 규칙이 표시됩니다.

API

다음 정책은 PROJECT_1 프로젝트의 워크로드가 PROJECT_2 프로젝트의 워크로드로부터의 연결과 동일한 흐름의 반환 트래픽을 허용하도록 합니다. 정책을 적용합니다.

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT_1
  name: allow-inbound-traffic-from-PROJECT_2
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT_2
EOF

GLOBAL_API_SERVER를 전역 API 서버의 kubeconfig 경로로 바꿉니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.

위 명령어는 PROJECT_2PROJECT_1로 이동하는 것을 허용하지만 PROJECT_1에서 PROJECT_2로 시작된 연결은 허용하지 않습니다. 후자의 경우 PROJECT_2 프로젝트에 상호 정책이 필요합니다. 상호주의 정책을 적용합니다.

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT_2
  name: allow-inbound-traffic-from-PROJECT_1
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT_1
EOF

이제 PROJECT_1PROJECT_2와의 연결이 허용됩니다.

이그레스 교차 프로젝트 정책 만들기

한 프로젝트의 워크로드가 다른 프로젝트의 워크로드에서 연결을 허용하도록 인그레스 교차 프로젝트 트래픽 정책을 부여하면 이 작업은 동일한 흐름의 반환 트래픽도 부여합니다. 따라서 원래 프로젝트에는 이그레스 교차 프로젝트 트래픽 네트워크 정책이 필요하지 않습니다.

예를 들어 PROJECT_1에서 PROJECT_2로의 트래픽을 허용하는 정책을 만들고 데이터 무단 반출 방지가 사용 중지된 경우 PROJECT_2에 인그레스 정책을 만들고 PROJECT_1에 이그레스 정책을 만들어야 합니다. 하지만 응답 패킷은 정책 시행에서 제외되므로 추가 정책이 필요하지 않습니다.

다음 단계에 따라 새 방화벽 규칙을 만들고 프로젝트의 워크로드에서 아웃바운드 트래픽을 허용합니다.

  1. 구성 중인 프로젝트의 GDC 콘솔에서 탐색 메뉴의 네트워킹 > 방화벽으로 이동하여 방화벽 페이지를 엽니다.
  2. 작업 표시줄에서 만들기를 클릭하여 새 방화벽 규칙을 만듭니다.
  3. 방화벽 규칙 세부정보 페이지에서 다음 정보를 입력합니다.

    1. 이름 필드에 방화벽 규칙의 유효한 이름을 입력합니다.
    2. 트래픽 방향 섹션에서 이그레스를 선택하여 이 방화벽 규칙이 아웃바운드 트래픽을 제어하고 있음을 나타냅니다.
    3. 타겟 섹션에서 다음 옵션 중 하나를 선택합니다.
      • 모든 사용자 워크로드: 구성 중인 프로젝트의 워크로드에서 연결을 허용합니다.
      • 서비스: 이 방화벽 규칙이 구성 중인 프로젝트 내의 특정 서비스를 타겟팅함을 나타냅니다.
    4. 타겟이 프로젝트 서비스인 경우 서비스 드롭다운 메뉴의 사용 가능한 서비스 목록에서 서비스 이름을 선택합니다.
    5. 받는 사람 섹션에서 다음 두 가지 옵션 중 하나를 선택합니다.
      • 모든 프로젝트: 동일한 조직의 모든 프로젝트에 있는 워크로드에 대한 연결을 허용합니다.
      • 다른 프로젝트모든 사용자 워크로드: 동일한 조직의 다른 프로젝트에 있는 워크로드에 연결을 허용합니다.
    6. 워크로드를 다른 프로젝트로만 전송하려면 프로젝트 ID 드롭다운 메뉴의 프로젝트 목록에서 액세스할 수 있는 프로젝트를 선택합니다.
    7. 타겟이 모든 사용자 워크로드인 경우 프로토콜 및 포트 섹션에서 다음 옵션 중 하나를 선택합니다.
      • 모두 허용: 모든 프로토콜 또는 포트를 사용하여 연결을 허용합니다.
      • 지정된 프로토콜 및 포트: 이그레스 방화벽 규칙의 해당 필드에 지정된 프로토콜 및 포트만 사용하여 연결을 허용합니다.
  4. 방화벽 규칙 세부정보 페이지에서 만들기를 클릭합니다.

이제 동일한 조직 내의 다른 프로젝트 워크로드에 대한 연결이 허용되었습니다. 방화벽 규칙을 만들면 방화벽 페이지의 표에 규칙이 표시됩니다.

워크로드 수준 교차 프로젝트 정책 만들기

워크로드 수준 네트워크 정책은 프로젝트 간 개별 워크로드 간의 통신을 세부적으로 제어할 수 있습니다. 이 세부적인 제어를 통해 네트워크 액세스를 더 엄격하게 제어하여 보안과 리소스 사용을 개선할 수 있습니다.

인그레스 워크로드 수준 교차 프로젝트 정책 만들기

  • 인그레스 워크로드 수준 교차 프로젝트 정책을 만들려면 다음 커스텀 리소스를 만들고 적용하세요.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
     namespace: PROJECT_1
     name: allow-cross-project-inbound-traffic-from-target-to-subject
    spec:
     policyType: Ingress
     subject:
       subjectType: UserWorkload
       workloadSelector:
         matchLabels:
           SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
     ingress:
     - from:
       - projectSelector:
           projects:
             matchNames:
             - PROJECT_2
           workloads:
             matchLabels:
               TARGET_LABEL_KEY: TARGET_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • PROJECT_1: 트래픽을 수신하는 프로젝트의 이름입니다.
    • PROJECT_2: 트래픽이 발생한 프로젝트의 이름입니다.
    • SUBJECT_LABEL_KEY: 소스 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 app, tier, role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 소스인 워크로드를 지정합니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 라벨이 app: backend인 워크로드가 트래픽 소스입니다.
    • TARGET_LABEL_KEY: 대상 워크로드를 선택하는 데 사용되는 라벨의 키입니다.
    • TARGET_LABEL_VALUE: TARGET_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 대상이 되는 워크로드를 지정합니다.

이그레스 워크로드 수준 교차 프로젝트 정책 만들기

  • 이그레스 워크로드 수준 교차 프로젝트 정책을 만들려면 다음 커스텀 리소스를 만들고 적용하세요.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT_1
      name: allow-cross-project-outbound-traffic-to-subject-from-target
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT_2
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • PROJECT_1: 트래픽을 전송하는 프로젝트의 이름입니다.
    • PROJECT_2: 트래픽을 수신하는 프로젝트의 이름입니다.
    • SUBJECT_LABEL_KEY: 소스 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 app, tier, role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 소스인 워크로드를 지정합니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 라벨이 app: backend인 워크로드가 트래픽 소스입니다.
    • TARGET_LABEL_KEY: 대상 워크로드를 선택하는 데 사용되는 라벨의 키입니다.
    • TARGET_LABEL_VALUE: TARGET_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 대상이 되는 워크로드를 지정합니다.

단일 영역 워크로드 수준 교차 프로젝트 정책 만들기

워크로드 수준 네트워크 정책은 단일 영역에서 PNP를 적용할 수 있습니다. 단일 영역 내의 워크로드에 특정 라벨을 추가하여 해당 영역의 프로젝트 내 또는 여러 프로젝트 간 개별 워크로드 간 통신을 제어할 수 있습니다.

단일 영역 인그레스 워크로드 수준 교차 프로젝트 정책 만들기

  1. 단일 영역 인그레스 워크로드 수준 교차 프로젝트 정책을 만들려면 다음 커스텀 리소스를 만들고 적용하세요.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT_1
      name: allow-single-zone-cross-project-inbound-traffic-from-target-to-subject
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
            ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT_2
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
                ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • PROJECT_1: 트래픽을 수신하는 프로젝트의 이름입니다.
    • PROJECT_2: 트래픽이 발생한 프로젝트의 이름입니다.
    • SUBJECT_LABEL_KEY: 소스 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 app, tier, role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 소스인 워크로드를 지정합니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 라벨이 app: backend인 워크로드가 트래픽 소스입니다.
    • TARGET_LABEL_KEY: 대상 워크로드를 선택하는 데 사용되는 라벨의 키입니다.
    • TARGET_LABEL_VALUE: TARGET_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 대상이 되는 워크로드를 지정합니다.
    • ZONE_SUBJECT_LABEL_KEY: 소스 영역을 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 zone 또는 region입니다.
    • ZONE_SUBJECT_LABEL_VALUE: ZONE_SUBJECT_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 소스 영역을 지정합니다. 예를 들어 ZONE_SUBJECT_LABEL_KEYzone이고 ZONE_SUBJECT_LABEL_VALUEus-central1-a이면 라벨이 zone: us-central1-a인 워크로드가 트래픽 소스입니다.
    • ZONE_TARGET_LABEL_KEY: 대상 영역을 선택하는 데 사용되는 라벨의 키입니다.
    • ZONE_TARGET_LABEL_VALUE: ZONE_TARGET_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 대상이 되는 영역을 지정합니다.

단일 영역 이그레스 워크로드 수준 교차 프로젝트 정책 만들기

  • 단일 영역 이그레스 워크로드 수준 교차 프로젝트 정책을 만들려면 다음 커스텀 리소스를 만들고 적용하세요.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT_1
      name: allow-single-zone-cross-project-outbound-traffic-to-subject-from-target
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        workloadSelector:
          matchLabels:
            SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
            ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT_2
            workloads:
              matchLabels:
                TARGET_LABEL_KEY: TARGET_LABEL_VALUE
                ZONE_TARGET_LABEL_KEY: ZONE_TARGET_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • PROJECT_1: 트래픽을 전송하는 프로젝트의 이름입니다.
    • PROJECT_2: 트래픽을 수신하는 프로젝트의 이름입니다.
    • SUBJECT_LABEL_KEY: 소스 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 app, tier, role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 소스인 워크로드를 지정합니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 라벨이 app: backend인 워크로드가 트래픽 소스입니다.
    • TARGET_LABEL_KEY: 대상 워크로드를 선택하는 데 사용되는 라벨의 키입니다.
    • TARGET_LABEL_VALUE: TARGET_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 대상이 되는 워크로드를 지정합니다.
    • ZONE_SUBJECT_LABEL_KEY: 소스 영역을 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 zone 또는 region입니다.
    • ZONE_SUBJECT_LABEL_VALUE: ZONE_SUBJECT_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 소스 영역을 지정합니다. 예를 들어 ZONE_SUBJECT_LABEL_KEYzone이고 ZONE_SUBJECT_LABEL_VALUEus-central1-a이면 라벨이 zone: us-central1-a인 워크로드가 트래픽 소스입니다.
    • ZONE_TARGET_LABEL_KEY: 대상 영역을 선택하는 데 사용되는 라벨의 키입니다.
    • ZONE_TARGET_LABEL_VALUE: ZONE_TARGET_LABEL_KEY와 연결된 값입니다. 허용된 트래픽의 대상이 되는 영역을 지정합니다.