이 페이지에서는 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
리소스가 암시적으로 생성됩니다. 이 정책은 동일한 프로젝트의 다른 워크로드로부터의 인바운드 트래픽을 허용합니다.
수신 워크로드 수준 프로젝트 내 정책을 만들려면 먼저 기본 기본 정책을 삭제해야 합니다. 그렇지 않으면 예기치 않은 동작이 발생할 수 있습니다.
기본 기본 정책을 삭제하려면 다음 명령어를 실행합니다.
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: allow-intra-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 workloads: matchLabels: TARGET_LABEL_KEY: TARGET_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_KEY
이app
이고SUBJECT_LABEL_VALUE
이backend
이면 라벨이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 name: allow-intra-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 workloads: matchLabels: TARGET_LABEL_KEY: TARGET_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_KEY
이app
이고SUBJECT_LABEL_VALUE
이backend
이면 라벨이app: backend
인 워크로드가 트래픽 소스입니다.TARGET_LABEL_KEY
: 대상 워크로드를 선택하는 데 사용되는 라벨의 키입니다.TARGET_LABEL_VALUE
:TARGET_LABEL_KEY
와 연결된 값입니다. 허용된 트래픽의 대상이 되는 워크로드를 지정합니다.
단일 영역 워크로드 수준 프로젝트 내 정책 만들기
워크로드 수준 네트워크 정책은 단일 영역에서 PNP를 적용할 수 있습니다. 단일 영역 내의 워크로드에 특정 라벨을 추가하여 해당 영역의 프로젝트 내 또는 여러 프로젝트 간 개별 워크로드 간 통신을 제어할 수 있습니다.
단일 영역 인그레스 워크로드 수준 프로젝트 내 정책 만들기
프로젝트를 만들면 모든 워크로드 간의 프로젝트 내 통신을 허용하는 기본 기본 ProjectNetworkPolicy
리소스가 암시적으로 생성됩니다. 이 정책은 동일한 프로젝트의 다른 워크로드로부터의 인바운드 트래픽을 허용합니다.
단일 영역 인그레스 워크로드 수준 프로젝트 내 정책을 만들려면 먼저 기본 기본 정책을 삭제해야 합니다. 그렇지 않으면 예기치 않은 동작이 발생할 수 있습니다.
기본 기본 정책을 삭제하려면 다음 명령어를 실행합니다.
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: allow-single-zone-intra-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 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
: 프로젝트의 이름SUBJECT_LABEL_KEY
: 소스 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면app
,tier
,role
입니다.SUBJECT_LABEL_VALUE
:SUBJECT_LABEL_KEY
와 연결된 값입니다. 허용된 트래픽의 소스인 워크로드를 지정합니다. 예를 들어SUBJECT_LABEL_KEY
이app
이고SUBJECT_LABEL_VALUE
이backend
이면 라벨이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_KEY
이zone
이고ZONE_SUBJECT_LABEL_VALUE
이us-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 name: allow-single-zone-intra-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 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
: 프로젝트의 이름SUBJECT_LABEL_KEY
: 소스 워크로드를 선택하는 데 사용되는 라벨의 키입니다. 예를 들면app
,tier
,role
입니다.SUBJECT_LABEL_VALUE
:SUBJECT_LABEL_KEY
와 연결된 값입니다. 허용된 트래픽의 소스인 워크로드를 지정합니다. 예를 들어SUBJECT_LABEL_KEY
이app
이고SUBJECT_LABEL_VALUE
이backend
이면 라벨이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_KEY
이zone
이고ZONE_SUBJECT_LABEL_VALUE
이us-central1-a
이면 라벨이zone: us-central1-a
인 워크로드가 트래픽 소스입니다.ZONE_TARGET_LABEL_KEY
: 대상 영역을 선택하는 데 사용되는 라벨의 키입니다.ZONE_TARGET_LABEL_VALUE
:ZONE_TARGET_LABEL_KEY
와 연결된 값입니다. 허용된 트래픽의 대상이 되는 영역을 지정합니다.