자동으로 생성되는 방화벽 규칙

이 페이지에서는 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 주소로 전송하도록 허용합니다. 예를 들어 이 규칙에서 허용하는 트래픽은 다음과 같습니다.

  • kubelet과 같은 시스템 데몬에서 클러스터의 노드 및 포드 IP 주소 대상으로 전송되는 패킷
  • hostNetwork:true를 사용하여 포드에서 실행되는 소프트웨어에서 클러스터의 노드 및 포드 IP 주소 대상으로 전송되는 패킷
노드 IP 주소 범위 또는 이 노드 IP 주소 범위의 상위 집합:
  • 자동 모드 VPC 네트워크: GKE에서 10.128.0.0/9 CIDR을 사용합니다. 이 범위에 자동으로 생성되는 서브네트워크에 대한 현재 및 미래의 모든 서브넷 기본 IPv4 주소 범위가 포함되기 때문입니다.
  • 커스텀 모드 VPC 네트워크: GKE에서 클러스터 서브넷의 기본 IPv4 주소 범위를 사용합니다.
GKE는 클러스터의 서브넷에서 기본 IPv4 범위를 확장할 경우 이 방화벽 규칙의 소스 IPv4 범위를 업데이트하지 않습니다. 클러스터의 서브넷에서 기본 IPv4 범위를 확장하는 경우 필요한 인그레스 방화벽 규칙을 수동으로 만들어야 합니다.
노드 태그 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 이중 스택 네트워크 클러스터 전용입니다. 클러스터의 노드와 포드 간의 트래픽을 허용합니다.

subnetIpv6CidrBlock에 할당된 동일한 IP 주소 범위입니다.

노드 태그 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 externalTrafficPolicyCluster로 설정된 경우 외부 패스 스루 네트워크 부하 분산기 서비스의 상태 점검을 허용합니다.
  • 35.191.0.0/16
  • 130.211.0.0/22
  • 209.85.152.0/22
  • 209.85.204.0/22
LoadBalancer 가상 IP 주소 TCP: 10256
k8s-[loadbalancer-hash]-http-hc externalTrafficPolicyLocal로 설정된 경우 외부 패스 스루 네트워크 부하 분산기 서비스의 상태 점검을 허용합니다.
  • 35.191.0.0/16
  • 130.211.0.0/22
  • 209.85.152.0/22
  • 209.85.204.0/22
노드 태그 spec.healthCheckNodePort로 정의된 TCP 포트입니다. 지정되지 않은 경우 Kubernetes 컨트롤 플레인은 노드 포트 범위에서 상태 점검 포트를 할당합니다.

자세한 내용은 상태 점검 포트를 참조하세요.

k8s-[cluster-id]-node-hc externalTrafficPolicyCluster로 설정된 경우 내부 패스 스루 네트워크 부하 분산기 서비스의 상태 점검을 허용합니다.
  • 35.191.0.0/16
  • 130.211.0.0/22
  • 209.85.152.0/22
  • 209.85.204.0/22
노드 태그 TCP: 10256
[loadbalancer-hash]-hc externalTrafficPolicyLocal로 설정된 경우 내부 패스 스루 네트워크 부하 분산기 서비스의 상태 점검을 허용합니다.
  • 35.191.0.0/16
  • 130.211.0.0/22
  • 209.85.152.0/22
  • 209.85.204.0/22
노드 태그 spec.healthCheckNodePort로 정의된 TCP 포트입니다. 지정되지 않은 경우 Kubernetes 컨트롤 플레인은 노드 포트 범위에서 상태 점검 포트를 할당합니다.

자세한 내용은 상태 점검 포트를 참조하세요.

k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash] 다음 중 하나가 사용 설정된 경우 인그레스 트래픽이 서비스에 도달하도록 허용합니다.
  • GKE 하위 설정
  • 백엔드 서비스 기반 외부 패스 스루 네트워크 부하 분산기
  • 이러한 VPC 방화벽 규칙의 자동 생성을 사용 중지할 수 있습니다. 자세한 내용은 자동 방화벽 규칙 생성 관리를 참조하세요.
  • 소스는 spec.loadBalancerSourceRanges에서 가져옵니다. spec.loadBalancerSourceRanges가 생략된 경우 기본값은 0.0.0.0/0입니다.

    자세한 내용은 방화벽 규칙 및 소스 IP 주소 허용 목록을 참조하세요.

    LoadBalancer 가상 IP 주소 서비스 매니페스트에 지정된 포트의 TCP 및 UDP입니다.
    k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw externalTrafficPolicyLocal로 설정되고 다음이 사용 설정되면 서비스의 상태 점검이 허용됩니다.
  • GKE 하위 설정
  • 백엔드 서비스 기반 외부 패스 스루 네트워크 부하 분산기
    • 35.191.0.0/16
    • 130.211.0.0/22
    • 209.85.152.0/22
    • 209.85.204.0/22
    LoadBalancer 가상 IP 주소 spec.healthCheckNodePort로 정의된 TCP 포트입니다. 지정되지 않은 경우 Kubernetes 컨트롤 플레인은 노드 포트 범위에서 상태 점검 포트를 할당합니다.

    자세한 내용은 상태 점검 포트를 참조하세요.

    k8s2-[cluster-id]-l4-shared-hc-fw externalTrafficPolicyCluster로 설정되고 다음이 사용 설정되면 서비스의 상태 점검이 허용됩니다.
  • GKE 하위 설정
  • 백엔드 서비스 기반 외부 패스 스루 네트워크 부하 분산기
    • 35.191.0.0/16
    • 130.211.0.0/22
    • 209.85.152.0/22
    • 209.85.204.0/22
    노드 태그 TCP: 10256
    gke-[cluster-name]-[cluster-hash]-mcsd 컨트롤 플레인이 멀티 클러스터 서비스에 대해 클러스터 노드에서 kubelet 및 metrics-server에 액세스하도록 허용합니다. 이 규칙의 우선순위는 900입니다. 상태 점검 IP 주소 노드 태그 TCP, UDP, SCTP, ICMP, ESP, AH

    GKE 게이트웨이 방화벽 규칙

    GKE는 게이트웨이HTTPRoute 리소스를 만들 때 다음 게이트웨이 방화벽 규칙을 만듭니다.

    이름 목적 소스 대상(목적지 정의) 프로토콜 및 포트
    • gkegw1-l7-[network]-[region/global]
    • gkemcg1-l7-[network]-[region/global]

    네트워크 엔드포인트 그룹(NEG)상태 점검을 허용합니다.

    첫 번째 게이트웨이 리소스가 생성되면 게이트웨이 컨트롤러가 이 규칙을 만듭니다. 추가 게이트웨이 리소스가 생성되면 게이트웨이 컨트롤러가 이 규칙을 업데이트할 수 있습니다.

    노드 태그 TCP: 모든 컨테이너 대상 포트(NEG용)

    GKE 인그레스 방화벽 규칙

    GKE는 인그레스를 만들 때 다음 인그레스 방화벽 규칙을 만듭니다.

    이름 목적 소스 대상(목적지 정의) 프로토콜 및 포트
    k8s-fw-l7-[random-hash]

    NodePort 서비스 또는 네트워크 엔드포인트 그룹(NEG)상태 확인을 허용합니다.

    첫 번째 인그레스 리소스가 생성되면 인그레스 컨트롤러가 이 규칙을 만듭니다. 추가 인그레스 리소스가 생성되면 인그레스 컨트롤러가 이 규칙을 업데이트할 수 있습니다.

    GKE v1.17.13-gke.2600 이상:
    • 35.191.0.0/16
    • 130.211.0.0/22
    • 사용자 정의 프록시 전용 서브넷 범위(내부 애플리케이션 부하 분산기용)
    노드 태그 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 방화벽 규칙에서 사용하는 것과 동일한 대상 태그로 설정합니다.

    다음 단계