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

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

프로젝트 네트워크 정책은 인그레스 또는 이그레스 규칙을 정의합니다. 프로젝트 내, 프로젝트 간, 외부 IP 주소와의 통신을 허용하는 정책을 정의할 수 있습니다.

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

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

시작하기 전에

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

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

프로젝트 내 정책 만들기

프로젝트 내 트래픽의 경우 GDC는 사전 정의된 프로젝트 네트워크 정책인 프로젝트 내 정책을 각 프로젝트에 기본적으로 적용합니다. 기본적으로 프로젝트 네임스페이스의 워크로드는 외부 리소스에 아무것도 노출하지 않고 서로 통신할 수 있습니다.

기본적으로 이그레스 정책이 없으므로 모든 프로젝트 내 트래픽에 대해 아웃바운드 트래픽이 허용됩니다. 하지만 단일 이그레스 정책을 설정하면 정책에서 지정한 트래픽만 허용됩니다.

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

프로젝트를 만들면 프로젝트 내 통신을 허용하는 기본 기본 ProjectNetworkPolicy 리소스가 암시적으로 생성됩니다. 이 정책은 동일한 프로젝트의 다른 워크로드로부터의 인바운드 트래픽을 허용합니다.

기본 정책을 삭제할 수 있지만 이렇게 하면 프로젝트 내의 모든 서비스와 워크로드에 대한 프로젝트 내 통신이 거부됩니다. 정책을 삭제하려면 kubectl delete 명령어를 사용합니다.

kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT

다음 매니페스트를 적용하여 기본 정책을 다시 추가할 수 있습니다.

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: base-policy-allow-intra-project-traffic
spec:
  policyType: Ingress
  ingress:
  - from:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

다음을 바꿉니다.

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

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

데이터 무단 반출 방지를 사용 중지하고 외부 리소스에 대한 액세스를 방지하는 등 ProjectNetworkPolicy 이그레스 정책을 프로젝트에 적용하는 경우 다음 필수 정책을 사용하여 프로젝트 내 아웃바운드 트래픽을 허용하세요.

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: networking.global.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
  namespace: PROJECT
  name: allow-intra-project-outbound-traffic
spec:
  policyType: Egress
  egress:
  - to:
    - projectSelector:
        projects:
          matchNames:
          - PROJECT
EOF

다음을 바꿉니다.

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

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

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

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

프로젝트를 만들면 모든 워크로드 간의 프로젝트 내 통신을 허용하는 기본 기본 ProjectNetworkPolicy 리소스가 암시적으로 생성됩니다. 이 정책은 동일한 프로젝트의 다른 워크로드로부터의 인바운드 트래픽을 허용합니다.

수신 워크로드 수준 프로젝트 내 정책을 만들려면 먼저 기본 기본 정책을 삭제해야 합니다. 그렇지 않으면 예기치 않은 동작이 발생할 수 있습니다.

  1. 기본 기본 정책을 삭제하려면 다음 명령어를 실행합니다.

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. 인그레스 워크로드 수준 프로젝트 내 정책을 만들려면 다음 커스텀 리소스를 만들고 적용하세요.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-workload-level-intra-project-inbound-traffic
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloadSelector:
              labelSelector:
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

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

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

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

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-workload-level-intra-project-outbound-traffic
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            workloads
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloadSelector:
              labelSelector:
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

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

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

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

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

프로젝트를 만들면 모든 워크로드 간의 프로젝트 내 통신을 허용하는 기본 기본 ProjectNetworkPolicy 리소스가 암시적으로 생성됩니다. 이 정책은 동일한 프로젝트의 다른 워크로드로부터의 인바운드 트래픽을 허용합니다.

단일 영역 인그레스 워크로드 수준 프로젝트 내 정책을 만들려면 먼저 기본 기본 정책을 삭제해야 합니다. 그렇지 않으면 예기치 않은 동작이 발생할 수 있습니다.

  1. 기본 기본 정책을 삭제하려면 다음 명령어를 실행합니다.

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    
  2. 단일 영역 인그레스 워크로드 수준 프로젝트 내 트래픽 네트워크 정책을 만들려면 다음 커스텀 리소스를 만들어 적용하세요.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-single-zone-intra-project-inbound-traffic
    spec:
      policyType: Ingress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
                ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloadSelector:
              labelSelector:
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
                    ZONE_PEER_LABEL_KEY: ZONE_PEER_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • PROJECT: 프로젝트의 이름
    • SUBJECT_LABEL_KEY: 주제 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 app, tier, role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 라벨이 app: backend인 워크로드가 트래픽을 수신합니다.
    • PEER_LABEL_KEY: 피어 워크로드를 선택하는 데 사용되는 라벨의 키입니다.
    • PEER_LABEL_VALUE: PEER_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_PEER_LABEL_KEY: 피어와 연결된 영역을 선택하는 데 사용되는 라벨의 키입니다.
    • ZONE_PEER_LABEL_VALUE: ZONE_PEER_LABEL_KEY와 연결된 값입니다.

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

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

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: allow-single-zone-intra-project-outbound-traffic
    spec:
      policyType: Egress
      subject:
        subjectType: UserWorkload
        userWorkloadSelector:
          labelSelector:
            workloads:
              matchLabels:
                SUBJECT_LABEL_KEY: SUBJECT_LABEL_VALUE
                ZONE_SUBJECT_LABEL_KEY: ZONE_SUBJECT_LABEL_VALUE
      egress:
      - to:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
            workloadSelector:
              labelSelector:
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
                    ZONE_PEER_LABEL_KEY: ZONE_PEER_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • PROJECT: 프로젝트의 이름
    • SUBJECT_LABEL_KEY: 주제 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 app, tier, role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 라벨이 app: backend인 워크로드가 트래픽을 수신합니다.
    • PEER_LABEL_KEY: 피어 워크로드를 선택하는 데 사용되는 라벨의 키입니다.
    • PEER_LABEL_VALUE: PEER_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_PEER_LABEL_KEY: 피어와 연결된 영역을 선택하는 데 사용되는 라벨의 키입니다.
    • ZONE_PEER_LABEL_VALUE: ZONE_PEER_LABEL_KEY와 연결된 값입니다.

표준 클러스터의 프로젝트 내 정책 만들기

표준 클러스터는 프로젝트 범위의 Kubernetes 클러스터로, 더 많은 제어 기능, 유연성, 클러스터 관리자 권한을 제공합니다. 프로젝트 내 정책을 만들면 기본적으로 표준 클러스터에서 상속됩니다. 이 정책은 동일한 프로젝트에 있는 표준 클러스터 내의 모든 통신을 허용합니다.

표준 클러스터의 인그레스 프로젝트 내 정책 만들기

프로젝트를 만들면 모든 워크로드 간의 프로젝트 내 통신을 허용하는 기본 기본 ProjectNetworkPolicy 리소스가 암시적으로 생성됩니다. 이 정책은 동일한 프로젝트의 다른 워크로드로부터의 인바운드 트래픽을 허용하고 프로젝트 내 표준 클러스터의 모든 워크로드 간 클러스터 내 통신도 허용합니다.

표준 클러스터의 인그레스 프로젝트 내 정책을 만들려면 먼저 기본 기본 정책을 삭제해야 합니다. 그렇지 않으면 예기치 않은 동작이 발생할 수 있습니다.

  1. 기본 기본 정책을 삭제하려면 다음 명령어를 실행합니다.

    kubectl --kubeconfig GLOBAL_API_SERVER delete pnp base-policy-allow-intra-project-traffic -n PROJECT
    

    다음 매니페스트를 적용하여 기본 정책을 다시 추가할 수 있습니다.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: PROJECT
      name: base-policy-allow-intra-project-traffic
    spec:
      policyType: Ingress
      ingress:
      - from:
        - projectSelector:
            projects:
              matchNames:
              - PROJECT
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • PROJECT: 프로젝트의 이름
  2. 표준 클러스터에서 수신 클러스터 내 포드 간 정책을 만들려면 다음 커스텀 리소스를 만들어 적용하세요.

    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-intra-cluster-traffic
    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:
        - projectSelector:
            projects:
              matchNames:
              - STANDARD_CLUSTER_PROJECT
            workloadSelector:
              labelSelector:
                clusters:
                  matchLabels:
                    kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
                namespaces:
                  matchLabels:
                    kubernetes.io/metadata.name: PEER_NAMESPACE
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • STANDARD_CLUSTER_PROJECT: 표준 클러스터 프로젝트의 이름입니다.
    • STANDARD_CLUSTER_NAME: 표준 클러스터의 이름입니다.
    • SUBJECT_NAMESPACE: 표준 클러스터의 주제 네임스페이스입니다.
    • PEER_NAMESPACE: 표준 클러스터의 피어 네임스페이스입니다.
    • SUBJECT_LABEL_KEY: 주제 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 app, tier, role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 라벨이 app: backend인 워크로드가 트래픽을 수신합니다.
    • PEER_LABEL_KEY: 피어 워크로드를 선택하는 데 사용되는 라벨의 키입니다.
    • PEER_LABEL_VALUE: PEER_LABEL_KEY와 연결된 값입니다.
  3. 표준 클러스터에서 수신 클러스터 내 노드-포드 정책을 만들려면 다음 커스텀 리소스를 만들고 적용하세요.

    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-node-to-pod-traffic
    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: NODE_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    다음을 바꿉니다.

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

Standard 클러스터의 이그레스 프로젝트 내 정책 만들기

  1. 표준 클러스터에서 클러스터 내 포드 간 정책을 만들려면 다음 커스텀 리소스를 만들고 적용하세요.

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ProjectNetworkPolicy
    metadata:
      namespace: STANDARD_CLUSTER_PROJECT
      name: allow-egress-to-intra-cluster-traffic
    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:
        - projectSelector:
            projects:
              matchNames:
              - STANDARD_CLUSTER_PROJECT
            workloadSelector:
              labelSelector:
                clusters:
                  matchLabels:
                    kubernetes.io/metadata.name: STANDARD_CLUSTER_NAME
                namespaces:
                  matchLabels:
                    kubernetes.io/metadata.name: PEER_NAMESPACE
                workloads:
                  matchLabels:
                    PEER_LABEL_KEY: PEER_LABEL_VALUE
    EOF
    

    다음을 바꿉니다.

    • GLOBAL_API_SERVER: 전역 API 서버의 kubeconfig 경로입니다. 자세한 내용은 전역 및 영역별 API 서버를 참고하세요. API 서버의 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.
    • STANDARD_CLUSTER_PROJECT: 표준 클러스터 프로젝트의 이름입니다.
    • STANDARD_CLUSTER_NAME: 표준 클러스터의 이름입니다.
    • SUBJECT_NAMESPACE: 표준 클러스터의 주제 네임스페이스입니다.
    • PEER_NAMESPACE: 표준 클러스터의 피어 네임스페이스입니다.
    • SUBJECT_LABEL_KEY: 주제 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면 app, tier, role입니다.
    • SUBJECT_LABEL_VALUE: SUBJECT_LABEL_KEY와 연결된 값입니다. 예를 들어 SUBJECT_LABEL_KEYapp이고 SUBJECT_LABEL_VALUEbackend이면 라벨 app: backend이 있는 워크로드가 트래픽을 전송합니다.
    • PEER_LABEL_KEY: 피어 워크로드를 선택하는 데 사용되는 라벨의 키입니다.
    • PEER_LABEL_VALUE: PEER_LABEL_KEY와 연결된 값입니다.
    1. 표준 클러스터에서 이그레스 클러스터 내 포드-노드 정책을 만들려면 다음 커스텀 리소스를 만들고 적용하세요.
    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-pod-to-node-traffic
    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: NODE_IP
        ports:
        - protocol: TCP
          port: PORT
    EOF
    

    다음을 바꿉니다.

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