이 페이지에서는 Google Kubernetes Engine(GKE)이 기본적으로 Google Cloud에서 자동으로 생성하는 인그레스 허용 VPC 방화벽 규칙을 설명합니다.
적용 가능한 방화벽 및 이그레스 방화벽
GKE는 가상 프라이빗 클라우드(VPC) 방화벽 규칙을 사용하여 포드와 노드 간에 들어오는 트래픽과 나가는 트래픽을 제어합니다. 기본적으로 GKE는 노드와 포드 간의 통신과 같은 필수 트래픽과 Kubernetes 컨트롤 플레인으로의 트래픽을 허용하기 위해 특정 방화벽 규칙을 자동으로 만들고 관리합니다. GKE는 기본적으로 LoadBalancer 서비스에 대한 인그레스 허용 VPC 방화벽 규칙을 자동으로 만들지만 이 동작을 사용 중지하여 방화벽 규칙 또는 정책을 수동으로 관리하거나 고급 방화벽 기능을 활용할 수 있습니다.
GKE에서 만든 인그레스 허용 방화벽 규칙은 클러스터의 노드에 적용되는 유일한 방화벽 규칙이 아닙니다. 인그레스 및 이그레스에 적용 가능한 전체 방화벽 규칙은 계층식 방화벽 정책, 전역 네트워크 방화벽 정책, 리전 네트워크 방화벽 정책의 규칙과 기타 VPC 방화벽 규칙에서 정의됩니다.
조직의 네트워크 관리자 및 보안 엔지니어와 함께 클러스터, 워크로드, 서비스의 구성을 계획하고 설계하며, 방화벽 정책 및 규칙 평가 순서를 파악하여 우선 적용되는 방화벽 규칙을 알아둡니다.
GKE는 우선순위가 가장 낮은 묵시적으로 허용되는 이그레스 방화벽 규칙을 사용하므로 인그레스 VPC 방화벽 규칙만 만듭니다.
클러스터의 VPC 네트워크에서 이그레스 거부 방화벽 규칙을 구성한 경우 노드, 포드, 클러스터의 컨트롤 플레인 간 통신을 허용하는 이그레스 허용 규칙을 만들어야 할 수 있습니다.
예를 들어 모든 프로토콜과 포트, 모든 대상 IP 주소에 대해 이그레스 거부 방화벽 규칙을 만든 경우 GKE에서 자동으로 만드는 인그레스 규칙 외에 이그레스 허용 방화벽 규칙을 만들어야 합니다. 컨트롤 플레인 엔드포인트에 대한 연결은 항상 TCP 대상 포트 443
을 사용하지만, 클러스터의 노드와 포드 간 연결은 모든 프로토콜과 대상 포트를 사용할 수 있습니다.
다음 도구는 트래픽을 허용하거나 거부하는 방화벽 규칙을 확인하는 데 유용합니다.
방화벽 규칙
GKE는 기본적으로 다음 리소스를 만들 때 자동으로 방화벽 규칙을 만듭니다.
- GKE 클러스터
- GKE 서비스
- GKE 게이트웨이 및 HTTPRoutes
- GKE 인그레스
별도로 지정하지 않으면 자동으로 생성되는 모든 방화벽 규칙의 우선순위는 1,000이며 이는 방화벽 규칙의 기본값입니다. 방화벽 동작을 보다 세부적으로 제어하려면 우선순위가 높은 방화벽 규칙을 만들면 됩니다. 우선순위가 더 높은 방화벽 규칙은 자동으로 생성된 방화벽 규칙보다 먼저 적용됩니다.
GKE 클러스터 방화벽 규칙
GKE는 클러스터를 만들 때 다음 인그레스 방화벽 규칙을 만듭니다.
이름 | 목적 | 소스 | 대상(목적지 정의) | 프로토콜 및 포트 | 우선순위 |
---|---|---|---|---|---|
gke-[cluster-name]-[cluster-hash]-master |
컨트롤 플레인 비공개 엔드포인트 연결에 VPC 네트워크 피어링을 사용하는 Autopilot 및 Standard 클러스터. 컨트롤 플레인이 클러스터 노드의 Kubelet 및 metric-server에 액세스할 수 있도록 허용합니다. | 컨트롤 플레인 IP 주소 범위(/28) | 노드 태그 | TCP: 443(metrics-server) 및 TCP: 10250(kubelet) | 1000 |
gke-[cluster-name]-[cluster-hash]-vms
|
Kubernetes 네트워킹 모델에 필요한 클러스터 내 통신에 사용됩니다. 노드에서 실행되는 소프트웨어가 노드 IP 주소와 일치하는 소스를 사용하여 패킷을 클러스터의 목적지 포드 IP 및 노드 IP 주소로 전송하도록 허용합니다. 예를 들어 이 규칙에서 허용하는 트래픽은 다음과 같습니다.
|
노드 IP 주소 범위 또는 이 노드 IP 주소 범위의 상위 집합:
|
노드 태그 | TCP: 1-65535, UDP: 1-65535, ICMP | 1000 |
gke-[cluster-name]-[cluster-hash]-all |
Kubernetes 네트워킹 모델에서 필요에 따라 클러스터의 모든 포드 간 트래픽을 허용합니다. |
pod CIDR 인접하지 않은 다중 포드 CIDR이 사용 설정된 클러스터의 경우 클러스터에서 사용되는 모든 포드 CIDR 블록이 사용됩니다. |
노드 태그 | TCP, UDP, SCTP, ICMP, ESP, AH | 1000 |
gke-[cluster-hash]-ipv6-all |
이중 스택 네트워크 클러스터 전용입니다. 클러스터의 노드와 포드 간의 트래픽을 허용합니다. |
|
노드 태그 | TCP, UDP, SCTP, IPv6용 ICMP, ESP, AH | 1000 |
gke-[cluster-name]-[cluster-hash]-inkubelet |
버전 1.23.6 이상을 실행하는 새 GKE 클러스터의 내부 포드 CIDR 및 노드 CIDR에서 포트 10255(kubelet 읽기 전용 포트)에 대한 액세스를 허용합니다. 1.26.4-gke.500 이상 버전을 실행하는 클러스터는 대신 kubelet 인증 포트(10250)를 사용합니다. 클러스터 내에서 10250을 차단하는 방화벽 규칙을 추가하지 마세요. |
내부 포드 CIDR 및 노드 CIDR |
노드 태그 | TCP: 10255 | 999 |
gke-[cluster-name]-[cluster-hash]-exkubelet |
버전 1.23.6 이상을 실행하는 새 GKE 클러스터에서 포트 10255에 대한 공개 액세스를 거부합니다. |
0.0.0.0/0 |
노드 태그 | TCP: 10255 | 1000 |
GKE 서비스 방화벽 규칙
GKE는 서비스를 만들 때 다음 인그레스 방화벽 규칙을 만듭니다. VPC 방화벽 규칙 만들기 관리를 통해 이러한 방화벽 규칙 중 일부가 만들어지지 않도록 할 수 있습니다.
이름 | 목적 | 소스 | 대상(목적지 정의) | 프로토콜 및 포트 |
---|---|---|---|---|
k8s-fw-[loadbalancer-hash] |
인그레스 트래픽이 서비스에 도달하도록 허용합니다. | 소스는 spec.loadBalancerSourceRanges 에서 가져옵니다. spec.loadBalancerSourceRanges 가 생략된 경우 기본값은 0.0.0.0/0 입니다.
자세한 내용은 방화벽 규칙 및 소스 IP 주소 허용 목록을 참조하세요. |
LoadBalancer 가상 IP 주소 | 서비스 매니페스트에 지정된 포트의 TCP 및 UDP입니다. |
k8s-[cluster-id]-node-http-hc |
externalTrafficPolicy 가 Cluster 로 설정된 경우 외부 패스 스루 네트워크 부하 분산기 서비스의 상태 점검을 허용합니다. |
|
LoadBalancer 가상 IP 주소 | TCP: 10256 |
k8s-[loadbalancer-hash]-http-hc |
externalTrafficPolicy 가 Local 로 설정된 경우 외부 패스 스루 네트워크 부하 분산기 서비스의 상태 점검을 허용합니다. |
|
노드 태그 | spec.healthCheckNodePort 로 정의된 TCP 포트입니다. 지정되지 않은 경우 Kubernetes 컨트롤 플레인은 노드 포트 범위에서 상태 점검 포트를 할당합니다.
자세한 내용은 상태 점검 포트를 참조하세요. |
k8s-[cluster-id]-node-hc |
externalTrafficPolicy 가 Cluster 로 설정된 경우 내부 패스 스루 네트워크 부하 분산기 서비스의 상태 점검을 허용합니다.
|
|
노드 태그 | TCP: 10256 |
[loadbalancer-hash]-hc |
externalTrafficPolicy 가 Local 로 설정된 경우 내부 패스 스루 네트워크 부하 분산기 서비스의 상태 점검을 허용합니다.
|
|
노드 태그 | spec.healthCheckNodePort 로 정의된 TCP 포트입니다. 지정되지 않은 경우 Kubernetes 컨트롤 플레인은 노드 포트 범위에서 상태 점검 포트를 할당합니다.
자세한 내용은 상태 점검 포트를 참조하세요. |
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash] |
다음 중 하나가 사용 설정된 경우 인그레스 트래픽이 서비스에 도달하도록 허용합니다.
|
소스는 spec.loadBalancerSourceRanges 에서 가져옵니다. spec.loadBalancerSourceRanges 가 생략된 경우 기본값은 0.0.0.0/0 입니다.
자세한 내용은 방화벽 규칙 및 소스 IP 주소 허용 목록을 참조하세요. |
LoadBalancer 가상 IP 주소 | 서비스 매니페스트에 지정된 포트의 TCP 및 UDP입니다. |
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw |
externalTrafficPolicy 가 Local 로 설정되고 다음이 사용 설정되면 서비스의 상태 점검이 허용됩니다.
|
|
LoadBalancer 가상 IP 주소 | spec.healthCheckNodePort 로 정의된 TCP 포트입니다. 지정되지 않은 경우 Kubernetes 컨트롤 플레인은 노드 포트 범위에서 상태 점검 포트를 할당합니다.
자세한 내용은 상태 점검 포트를 참조하세요. |
k8s2-[cluster-id]-l4-shared-hc-fw |
externalTrafficPolicy 가 Cluster 로 설정되고 다음이 사용 설정되면 서비스의 상태 점검이 허용됩니다.
|
|
노드 태그 | TCP: 10256 |
gke-[cluster-name]-[cluster-hash]-mcsd |
컨트롤 플레인이 멀티 클러스터 서비스에 대해 클러스터 노드에서 kubelet 및 metrics-server에 액세스하도록 허용합니다. 이 규칙의 우선순위는 900입니다. | 상태 점검 IP 주소 | 노드 태그 | TCP, UDP, SCTP, ICMP, ESP, AH |
GKE 게이트웨이 방화벽 규칙
GKE는 게이트웨이 및 HTTPRoute 리소스를 만들 때 다음 게이트웨이 방화벽 규칙을 만듭니다.
이름 | 목적 | 소스 | 대상(목적지 정의) | 프로토콜 및 포트 |
---|---|---|---|---|
|
네트워크 엔드포인트 그룹(NEG)의 상태 점검을 허용합니다. 첫 번째 게이트웨이 리소스가 생성되면 게이트웨이 컨트롤러가 이 규칙을 만듭니다. 추가 게이트웨이 리소스가 생성되면 게이트웨이 컨트롤러가 이 규칙을 업데이트할 수 있습니다. |
|
노드 태그 | TCP: 모든 컨테이너 대상 포트(NEG용) |
GKE 인그레스 방화벽 규칙
GKE는 인그레스를 만들 때 다음 인그레스 방화벽 규칙을 만듭니다.
이름 | 목적 | 소스 | 대상(목적지 정의) | 프로토콜 및 포트 |
---|---|---|---|---|
k8s-fw-l7-[random-hash] |
첫 번째 인그레스 리소스가 생성되면 인그레스 컨트롤러가 이 규칙을 만듭니다. 추가 인그레스 리소스가 생성되면 인그레스 컨트롤러가 이 규칙을 업데이트할 수 있습니다. |
|
노드 태그 | TCP: 30000-32767, TCP:80(내부 애플리케이션 부하 분산기용), TCP: 모든 컨테이너 대상 포트(NEG용) |
VPC 방화벽 규칙 생성 관리
기본적으로 GKE는 모든 LoadBalancer 서비스에 대해 인그레스 허용 VPC 방화벽 규칙을 자동으로 생성합니다. LoadBalancer 서비스의 방화벽 규칙을 직접 관리하려면 VPC 방화벽 규칙의 자동 생성을 사용 중지해야 합니다.
LoadBalancer 서비스에 대한 VPC 방화벽 규칙의 자동 생성은 다음 항목에만 적용됩니다.
방화벽 규칙을 사용 중지하는 방법은 GKE LoadBalancer 서비스에 대한 사용자 관리형 방화벽 규칙을 참조하세요.
공유 VPC
인그레스 또는 LoadBalancer 서비스를 사용하고 있고 공유 VPC 네트워크를 사용하는 공유 VPC에 클러스터가 있는 경우, 서비스 프로젝트의 GKE 서비스 계정으로 호스트 프로젝트에서 인그레스 허용 방화벽 규칙을 만들고 업데이트할 수 없습니다. GKE 서비스 계정에 방화벽 리소스를 만들고 관리할 수 있는 서비스 프로젝트 권한을 부여할 수 있습니다. 자세한 내용은 공유 VPC를 참조하세요.
확장된 서브넷에 필요한 방화벽 규칙
클러스터 서브넷의 기본 IPv4 범위를 확장하면 GKE는 gke-[cluster-name]-[cluster-hash]-vms
방화벽 규칙의 소스 범위를 자동으로 업데이트하지 않습니다. 클러스터의 노드는 서브넷 기본 IPv4 범위의 확장된 부분에서 IPv4 주소를 수신할 수 있으므로, 클러스터의 노드 간에 통신을 허용하도록 방화벽 규칙을 수동으로 만들어야 합니다.
만들어야 하는 인그레스 방화벽 규칙은 확장된 기본 서브넷 IPv4 소스 범위의 TCP 및 ICMP 패킷을 허용해야 하며, 최소한 클러스터의 모든 노드에 적용되어야 합니다.
클러스터의 노드에만 적용되는 인그레스 방화벽 규칙을 만들려면 방화벽 규칙의 대상을 클러스터의 자동으로 생성된 gke-[cluster-name]-[cluster-hash]-vms
방화벽 규칙에서 사용하는 것과 동일한 대상 태그로 설정합니다.
다음 단계
- GKE에서의 네트워킹 개요 읽어보기
- 애플리케이션의 네트워크 정책 구성 알아보기
- Google Cloud의 기타 자동 입력 방화벽 규칙 알아보기
- 공유 VPC를 사용하는 프로젝트에서 방화벽 규칙 만들기에 대해 자세히 알아보기