조직 외부 네트워크 정책 만들기

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

조직 외부 트래픽은 서로 다른 조직의 서비스 및 워크로드와 외부 엔드포인트 간의 통신을 의미합니다.

시작하기 전에

조직 외부 트래픽 네트워크 정책을 구성하려면 다음이 있어야 합니다.

조직 외부 정책 만들기

인그레스 또는 이그레스 조직 외부 트래픽 정책을 정의하여 서로 다른 조직의 서비스 및 워크로드와 외부 엔드포인트 간의 통신을 관리할 수 있습니다.

조직의 모든 영역에서 트래픽에 적용되는 전역 조직 외부 트래픽 프로젝트 네트워크 정책을 만들 수 있습니다. GDC 유니버스의 전역 리소스에 대한 자세한 내용은 다중 영역 개요를 참조하세요.

서로 다른 조직의 프로젝트 외부 대상에 서비스 및 워크로드를 연결하려면 명시적 승인이 필요합니다. 조직 외부 트래픽을 허용하려면 데이터 무단 반출 방지를 사용 중지해야 합니다.

조직 외부 트래픽을 위한 전역 인그레스 방화벽 규칙 만들기

외부 부하 분산기를 사용하여 프로젝트에서 워크로드를 노출할 때는 외부 클라이언트 IP 주소가 워크로드에 액세스할 수 있도록 ProjectNetworkPolicy 인그레스 정책도 만들어야 합니다.

이 전역 인그레스 정책은 조직의 모든 영역에 적용됩니다.

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

콘솔

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

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

이제 다른 조직의 프로젝트 워크로드에서 연결을 허용했습니다. 방화벽 규칙을 만든 후에는 방화벽 페이지의 표에 규칙이 표시됩니다.

API

맞춤설정된 ProjectNetworkPolicy 인그레스 정책을 구성하고 적용합니다.

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: allow-inbound-traffic-from-external
spec:
  policyType: Ingress
  subject:
    subjectType: UserWorkload
  ingress:
  - from:
    - ipBlock:
        cidr: CIDR
EOF

다음을 바꿉니다.

  • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참조하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 세부정보를 확인하세요.
  • PROJECT: GDC 프로젝트의 이름입니다.
  • CIDR: 다른 조직의 CIDR 블록입니다.

이 정책은 외부 부하 분산기가 소스 외부 IP 주소를 보존하고 반환 경로에서 부하 분산기를 우회하는 직접 서버 반환 (DSR)을 사용하므로 필요합니다.

조직 외부 트래픽을 위한 전역 이그레스 방화벽 규칙 만들기

조직 외부의 서비스로 데이터를 전송하려면 먼저 데이터 무단 반출 방지를 사용 중지해야 합니다. 그런 다음 프로젝트 워크로드 또는 서비스에서 아웃바운드 트래픽을 허용하도록 이그레스 방화벽 규칙을 구성해야 합니다.

이 섹션에서는 프로젝트 수준에서 아웃바운드 트래픽을 사용 설정하는 프로세스를 설명합니다. 워크로드 수준에서 이그레스 연결을 관리하는 방법에 대한 자세한 내용은 NAT 개요를 참조하세요.

이 전역 이그레스 방화벽 규칙은 조직의 모든 영역에 적용됩니다.

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

콘솔

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

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

이제 다른 조직에 대한 연결을 허용했습니다. 방화벽 규칙을 만든 후에는 방화벽 페이지의 표에 규칙이 표시됩니다.

API

조직 외부의 서비스로 아웃바운드 트래픽을 사용 설정하려면 ProjectNetworkPolicy 리소스를 맞춤설정합니다. 하지만 데이터 무단 반출 방지는 기본적으로 사용 설정되어 있으므로 맞춤설정된 ProjectNetworkPolicy 이그레스 정책은 상태 필드에 유효성 검사 오류를 표시하고 데이터 영역은 이를 무시합니다. 이 동작은 설계상 발생합니다.

프로젝트에 데이터 무단 반출을 허용하면 지정된 프로젝트에서 워크로드를 전송할 수 있습니다. 허용하는 아웃바운드 트래픽은 프로젝트에 할당된 잘 알려진 IP 주소를 사용하는 소스 네트워크 주소 변환 (NAT)입니다.

맞춤설정된 이그레스 정책을 사용 설정하려면 다음 단계를 따르세요.

  1. 프로젝트의 모든 사용자 워크로드에서 맞춤설정된 ProjectNetworkPolicy 이그레스 정책을 구성하고 적용합니다.

    다음 예시를 사용합니다.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-outbound-traffic-to-external
    spec:
      subject:
        subjectType: UserWorkload
      egress:
      - to:
        - ipBlock:
            cidr: CIDR
    EOF
    

    이 정책은 조직 외부에 있는 CIDR 블록의 모든 호스트에 대한 아웃바운드 트래픽을 허용합니다. 첫 번째 시도는 의도되고 필요한 상태 오류를 발생시켜야 합니다.

  2. 상태에 유효성 검사 오류가 표시되는지 확인합니다.

  3. 조직 IAM 관리자에게 데이터 무단 반출 방지를 사용 중지하도록 요청합니다. 이 작업은 다른 모든 아웃바운드 트래픽을 방지하면서 구성을 사용 설정합니다.

  4. 만든 ProjectNetworkPolicy를 확인하고 유효성 검사 상태 필드의 오류가 사라지고 상태 ReadyTrue인지 확인하여 정책이 적용되었음을 나타냅니다.

    kubectl --kubeconfig GLOBAL_API_SERVER \
        get projectnetworkpolicy allow-outbound-traffic-to-external \
        -n PROJECT -o yaml
    

    다음을 바꿉니다.

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

    • PROJECT: GDC 프로젝트의 이름입니다.

이 정책을 적용한 후 다른 이그레스 정책을 정의하지 않은 경우 PROJECT에 대한 다른 모든 아웃바운드 트래픽이 거부됩니다.

Standard 클러스터의 조직 외부 정책 만들기

Standard 클러스터는 더 큰 제어, 유연성, 클러스터 관리자 권한을 제공하는 프로젝트 범위의 Kubernetes 클러스터입니다.

Standard 클러스터의 인그레스 조직 외부 정책 만들기

  1. Standard 클러스터의 인그레스 조직 외부 정책을 만들려면 다음 커스텀 리소스를 만들고 적용합니다.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-ingress-from-external-endpoint-to-standard-cluster-pod
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            clusters:
              matchLabels:
                kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
            namespaces:
              matchLabels:
                kubernetes.io/metadata.name: SUBJECT_NAMESPACE
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - ipBlocks:
          - cidr: EXTERNAL_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참조하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 세부정보를 확인하세요.
    • STANDARD_CLUSTER_PROJECT: Standard 클러스터 프로젝트의 이름입니다.
    • STANDARD_CLUSTER_NAME: Standard 클러스터의 이름입니다.
    • SUBJECT_LABEL_KEY: 주제 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들어 app, tier 또는 role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 app: backend 라벨이 있는 워크로드가 트래픽을 수신합니다.
    • EXTERNAL_IP: 외부 엔드포인트의 IP 주소입니다.
    • PORT: 트래픽이 허용되는 주제 워크로드의 포트입니다.

Standard 클러스터의 이그레스 조직 외부 정책 만들기

  1. Standard 클러스터의 이그레스 조직 외부 정책을 만들려면 다음 커스텀 리소스를 만들고 적용합니다.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-egress-from-standard-cluster-pod-to-external-endpoint
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            clusters:
              matchLabels:
                kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
            namespaces:
              matchLabels:
                kubernetes.io/metadata.name: SUBJECT_NAMESPACE
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - ipBlocks:
          - cidr: EXTERNAL_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참조하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 세부정보를 확인하세요.
    • STANDARD_CLUSTER_PROJECT: Standard 클러스터 프로젝트의 이름입니다.
    • STANDARD_CLUSTER_NAME: Standard 클러스터의 이름입니다.
    • SUBJECT_LABEL_KEY: 주제 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들어 app, tier 또는 role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 app: backend 라벨이 있는 워크로드가 트래픽을 전송합니다.
    • EXTERNAL_IP: 외부 엔드포인트의 IP 주소입니다.
    • PORT: 트래픽이 허용되는 외부 엔드포인트의 포트입니다.