VPC 기반 클러스터

이 페이지에서는 Google Kubernetes Engine(GKE)의 VPC 기반 클러스터에 대한 일반적인 내용을 간략하게 설명합니다.

개요

GKE에서는 한 포드에서 다른 포드로 트래픽을 라우팅하는 방법에 따라 클러스터를 구분할 수 있습니다. 별칭 IP 주소 범위를 사용하는 클러스터를 VPC 기반 클러스터라고 부릅니다. VPC 네트워크의 커스텀 정적 경로를 사용하는 클러스터를 경로 기반 클러스터라고 부릅니다.

VPC 기반 클러스터의 이점

VPC 기반 클러스터에는 다음과 같은 여러 가지 이점이 있습니다.

  • 포드 IP 주소는 기본적으로 연결된 클러스터의 VPC 네트워크와 기타 VPC 네트워크 내에서 VPC 네트워크 피어링을 통해 라우팅됩니다.

  • pod IP 주소는 클러스터에서 pod가 생성되기 전에 VPC 네트워크에서 예약되어 있습니다. 이를 통해 VPC 네트워크의 다른 리소스와의 충돌을 방지하고 IP 주소 할당을 보다 효율적으로 계획할 수 있습니다.

  • 포드 IP 주소 범위는 커스텀 정적 경로에 의존하지 않으며, 시스템 생성 및 커스텀 정적 경로 할당량을 소비하지 않습니다. 대신 자동 생성된 서브넷 경로가 VPC 기반 클러스터의 라우팅을 처리합니다.

  • 클러스터 노드의 IP 주소 대신 포드 IP 주소 범위에만 적용되는 방화벽 규칙을 만들 수 있습니다.

  • 일반적으로 포드 IP 주소 범위와 서브넷 보조 IP 주소 범위는 Cloud Router를 사용하여 Cloud VPN 또는 Cloud Interconnect와 연결된 온프레미스 네트워크에서 액세스할 수 있습니다.

기본 클러스터 네트워크 모드

VPC 네이티브는 GKE 버전 1.21.0-gke.1500 이상의 모든 클러스터에 대한 기본 네트워크 모드입니다. 이전 버전의 경우 기본 클러스터 네트워크 모드는 클러스터를 만드는 방법에 따라 달라집니다.

다음 표에서는 GKE 클러스터 버전 및 클러스터 만들기 방법에 대한 기본 클러스터 네트워크 모드를 보여줍니다.

GKE 버전 클러스터 생성 방법 클러스터 네트워크 모드
모든 버전 Google Cloud 콘솔 VPC 네이티브
1.21.0-gke.1500 이상 Kubernetes Engine API 또는 Google Cloud CLI VPC 네이티브
1.21.0-gke.1500 이전 Kubernetes Engine API 또는 Google Cloud CLI 경로 기반

또한 클러스터를 만들 때 --no-enable-ip-alias 플래그를 지정하여 경로 기반 클러스터를 만들 수 있습니다.

VPC 기반 클러스터의 IP 주소 범위

VPC 기반 클러스터를 만들 때 VPC 네트워크에 서브넷을 지정합니다. 클러스터는 고유한 서브넷 IP 범위 세 개를 사용합니다.

  • 모든 노드 IP 주소에 서브넷의 기본 IP 주소 범위를 사용합니다.
  • 모든 pod IP 주소에 보조 IP 범위 한 개를 사용합니다.
  • 모든 서비스(클러스터 IP) 주소에 다른 보조 IP 주소 범위를 사용합니다.

다음 표에서는 노드, pod, 서비스의 IP 주소 범위를 요약해서 보여줍니다.

범위 설명 예시
노드

노드 IP 주소는 클러스터와 연결된 서브넷의 기본 IP 주소 범위에서 할당됩니다.

포드의 노드 IP 주소와 서브넷의 보조 IP 주소 범위 크기 모두 클러스터에서 지원할 수 있는 노드 수를 제한합니다. 자세한 내용은 노드 제한 범위를 참조하세요.

900 노드 클러스터를 만들려는 경우 클러스터 서브넷의 기본 IP 주소 범위는 최소한 /22(2(32-22) = 210 = 1,024개 주소)여야 합니다. 기본 IP 주소 범위마다 IP 주소 4개가 예약되어 있으므로 주소 1,024개 중 1,020개를 사용할 수 있습니다.

자세한 내용은 서브넷 기본 IP 주소 범위포드의 서브넷 보조 IP 주소 범위를 참조하세요.

포드

포드 IP 주소는 포드의 클러스터 서브넷 보조 IP 주소 범위에서 가져와 집니다. 노드당 최대 Pod 수를 다르게 설정하지 않으면 GKE는 /24 별칭 IP 범위(주소 256개)를 Pod가 실행되는 각 노드에 할당합니다. 각 노드에서는 별칭 IP 주소 256개를 사용하여 Pod를 최대 110개까지 지원합니다.

노드당 Pod를 최대 110개까지 지원하는 900 노드 클러스터의 경우 Pod에서는 IP 주소가 900 × 256 = 230,400개 필요합니다. 각 노드에는 넷마스크의 크기가 /24인 별칭 IP 범위가 할당됩니다. 이 클러스터에는 Pod의 보조 IP 범위에서 서브넷 마스크가 /14 이하인 서브넷이 필요합니다. 이 보조 IP 범위 범위는 포드에 IP 주소를 2(32-14) = 218 = 262,144개 제공합니다.

자세한 내용은 포드의 서브넷 보조 IP 주소 범위를 참조하세요.

서비스

서비스의 클러스터 서브넷 보조 IP 주소 범위에서 서비스(클러스터 IP) 주소를 가져옵니다. 이 범위는 클러스터에 호스팅하는 모든 Kubernetes 서비스의 주소를 제공할 만큼 충분히 커야 합니다.

서비스를 최대 3,000개까지 실행하는 클러스터의 경우 클러스터 IP 주소 3,000개가 필요합니다. 보조 범위 크기는 /20 이상이어야 합니다. /20 IP 주소 범위에는 IP 주소가 2(32-20) = 212 = 4,096개 있습니다.

자세한 내용은 서비스의 서브넷 보조 IP 주소 범위를 참조하세요.

내부 IP 주소

VPC 기반 클러스터의 서브넷에 사용하는 IP 주소는 서브넷 범위가 유효해야 합니다. 유효한 범위에는 비공개 IP 주소(RFC 1918 및 기타 주소)와 비공개로 재사용되는 공개 IP 주소가 포함됩니다. 유효한 서브넷 범위에 대한 자세한 내용은 VPC 문서의 유효한 범위제한된 범위를 참조하세요.

이러한 범위 사용 설정에 대한 안내는 비RFC 1918 비공개 IP 주소 범위 사용을 참조하세요.

비공개 클러스터에서 이러한 범위를 사용하는 방법에 대한 안내는 비공개로 사용되는 공개 IP 주소 범위 사용 설정을 참조하세요.

보조 범위 할당 방법

다음 두 가지 방법 중 하나를 사용하여 pod IP 범위와 서비스(ClusterIP) 주소 범위를 VPC 기반 클러스터에 할당할 수 있습니다.

GKE에서 관리(기본값)

GKE는 서브넷의 보조 범위를 만들고 관리할 수 있습니다. 클러스터를 만들 때 Pod 및 서비스 모두에 전체 CIDR 범위 또는 넷마스크 크기를 지정합니다. 예를 들어 포드에는 10.1.0.0/16을, 서비스에는 10.2.0.0/20을 지정하거나 포드에는 /16을, 서비스에는 /20을 지정할 수 있습니다.

클러스터와 서브넷을 동시에 만들 경우 포드와 서비스 IP 주소 범위는 GKE에서 관리됩니다.

사용자 관리

서브넷의 보조 IP 주소 범위를 만든 후 이 범위를 사용하는 클러스터를 만들 수 있습니다. 보조 범위를 수동으로 만들 경우에는 직접 관리해야 합니다.

만들 수 있는 최소 IP 주소 범위는 /28입니다. 하지만 하나 이상의 노드를 만들 수 있도록 충분히 큰 범위를 사용해야 합니다. 사용 가능한 최소 범위는 노드당 최대 포드 수에 따라 다릅니다. 노드당 최대 포드 값에 대해 최소 사용 가능한 CIDR 범위는 IP 주소 할당 최적화의 표를 참조하세요.

포드의 IP 주소 범위를 소진한 경우 더 큰 포드 주소 범위로 새 클러스터를 만들거나 노드 풀에 대한 --max-pods-per-node를 줄인 후 노드 풀을 다시 만들어야 합니다.

경로 기반 클러스터와의 차이점

pod와 서비스(ClusterIP) 주소의 할당 방식은 경로 기반 클러스터에서 사용되는 방식과 다릅니다. pod와 서비스에 단일 CIDR을 함께 지정하는 대신 클러스터의 서브넷에 pod와 서비스에 각각 하나씩 보조 IP 주소 범위 두 개를 선택하거나 만들어야 합니다.

공유 VPC 고려사항

공유 VPC 환경에서 VPC 기반 클러스터를 만들 때 공유 VPC 호스트 프로젝트의 네트워크 관리자 역할이 있는 프로젝트 소유자, 편집자 또는 Identity and Access Management(IAM) 주 구성원이 클러스터의 서브넷 및 보조 IP 주소 범위를 수동으로 지정해야 합니다. 클러스터를 만드는 서비스 프로젝트 관리자에게는 최소한 공유 VPC 네트워크의 호스트 프로젝트의 서브넷에 대한 서브넷 수준 권한이 있어야 합니다.

공유 VPC 환경에서 보조 IP 주소 범위는 GKE에서 관리될 수 없습니다. 클러스터를 만들기 전에 공유 VPC 호스트 프로젝트의 네트워크 관리자가 서브넷과 보조 IP 주소 범위를 만들어야 합니다. 공유 VPC 네트워크에서 VPC 기반 클러스터를 설정하는 방법의 예시는 공유 VPC로 클러스터 설정을 참조하세요.

IP 주소 범위 계획

다음 섹션의 정보를 사용하여 클러스터에서 사용하는 서브넷의 기본 IP 주소 범위와 보조 IP 주소 범위의 크기를 계산할 수 있습니다.

서브넷 기본 IP 주소 범위

모든 서브넷에는 기본 IP 주소 범위가 있어야 합니다. Google Cloud 리소스가 서브넷을 사용하는 경우에도 언제든지 기본 IP 주소 범위를 확장할 수 있습니다. 단, 서브넷을 만든 후에는 서브넷의 기본 IP 주소 체계를 줄이거나 변경할 수 없습니다. 기본 IP 주소 범위의 처음 IP 주소 두 개와 마지막 IP 주소 두 개는 Google Cloud에서 예약되어 있습니다.

다음 표에서는 서브넷의 기본 IP 주소 범위의 크기를 고려하여 서브넷을 사용하는 모든 클러스터에 만들 수 있는 최대 노드 수를 보여줍니다.

서브넷 기본 IP 범위 최대 노드 수
/29
서브넷 기본 IP 범위의 최소 크기
노드 4개
/28 노드 12개
/27 노드 28개
/26 노드 60개
/25 노드 124개
/24 노드 252개
/23 노드 508개
/22 노드 1,020개
/21 노드 2,044개
/20
자동 모드 네트워크에서 서브넷 기본 IP 범위의 기본 크기
노드 4,092개
/19 노드 8,188개
/8
서브넷 기본 IP 범위의 최대 크기
노드 16,777,212개

유용한 수식

다음 수식을 사용하여 다음을 수행할 수 있습니다.

  • 주어진 넷마스크가 지원할 수 있는 최대 노드 수 N을 계산합니다. 유효 범위가 8~29(양 끝 값 포함)인 S를 넷마스크 크기에 사용합니다.

    N = 2(32 -S) - 4

  • 노드를 최대 S개까지 지원하는 데 필요한 넷마스크 크기 N를 계산합니다.

    S = 32 - ⌈log2(N + 4)⌉

    ⌈⌉Ceiling(최소 정수) 함수로, 다음 정수로 올림 처리합니다. 넷마스크 크기 S의 유효 범위는 8~29(양 끝 값 포함)입니다.

pod의 서브넷 보조 IP 주소 범위

pod의 보조 IP 주소 범위를 신중하게 계획합니다. 서브넷의 보조 IP 주소 범위를 바꿀 수 있지만, 바꾸면 클러스터가 불안정해질 수 있으므로 지원되지 않습니다.

그러나 연속되지 않은 다중 포드 CIDR을 사용하여 추가 포드 IP 주소 범위를 만들 수 있습니다.

다음 표에서는 포드에서 사용하는 서브넷의 보조 IP 주소 범위 크기를 고려하여 서브넷을 사용하는 모든 클러스터에 만들 수 있는 최대 노드 수와 최대 포드 수를 보여줍니다. 이 표에서는 노드당 최대 Pod 수110개(기본값이자 최대한으로 가능한 Pod 밀도)로 가정합니다.

Pod의 서브넷 보조 IP 범위 최대 pod IP 주소 수 최대 노드 수 최대 포드 수
/24
보조 범위 할당 방법을 사용자가 관리할 경우에 가능한 최소 포드 IP 범위
주소 256개 노드 1개 포드 110개
/23
보조 범위 할당 방법을 사용자가 관리할 경우에만 가능
주소 512개 노드 2개 포드 220개
/22
보조 범위 할당 방법을 사용자가 관리할 경우에만 가능
주소 1,024개 노드 4개 포드 440개
/21
보조 범위 할당 방법을 GKE에서 관리할 경우에 가능한 최소 포드 IP 범위
주소 2,048개 노드 8개 Pod 880개
/20 주소 4,096개 노드 16개 Pod 1,760개
/19 주소 8,192개 노드 32개 Pod 3,520개
/18 주소 16,384개 노드 64개 Pod 7,040개
/17 주소 32,768개 노드 128개 Pod 14,080개
/16 주소 65,536개 노드 256개 Pod 28,160개
/15 주소 131,072개 노드 512개 포드 56,320개
/14
보조 범위 할당 방법을 GKE에서 관리할 경우 포드의 서브넷 보조 IP 범위 기본 크기
주소 262,144개 노드 1,024개 Pod 112,640개
/13 주소 524,288개 노드 2,048개 Pod 225,280개
/12 주소 1,048,576개 노드 4,096개 포드 450,560개
/11
주소 2,097,152개 노드 8,192개 포드 901,120개
/10
주소 4,194,304개 노드 16,384개 포드 1,802,240개
/9
가능한 최대 포드 주소 범위
주소 8,388,608개 노드 32,768개 포드 3,604,480개

노드당 최대 포드 수를 변경한 경우 다음 수식을 사용하여 포드가 지원할 수 있는 서브넷의 보조 IP 주소 범위에 포함되는 최대 노드 및 포드 수를 계산할 수 있습니다.

  1. 각 노드 pod 범위의 넷마스크 크기 M을 계산합니다.
    M = 31 - ⌈log2(Q)⌉ 각 항목의 의미는 다음과 같습니다.

    • Q는 노드당 Pod 수입니다.
    • ⌈⌉는 Ceiling(최소 정수) 함수로 다음 정수로 올림 처리합니다.
  2. pod의 서브넷 보조 IP 주소 범위에서 지원할 수 있는 최대 노드 수 N을 계산합니다.
    N = 2(M - S) 각 항목의 의미는 다음과 같습니다.

    • M은 첫 번째 단계에서 계산된 pod의 각 노드 별칭 IP 주소 범위의 넷마스크 크기입니다.
    • S는 서브넷 보조 IP 주소 범위의 서브넷 마스크 크기입니다.
  3. pod의 서브넷 보조 IP 주소 범위에서 지원할 수 있는 최대 pod 수 P를 계산합니다.
    P = N × Q 각 항목의 의미는 다음과 같습니다.

    • N은 이전 단계에서 계산된 최대 노드 수입니다.
    • Q는 노드당 Pod 수입니다.

서비스의 서브넷 보조 IP 주소 범위

서비스의 보조 IP 주소 범위를 신중하게 계획합니다. 또한 서브넷 보조 IP 주소 범위이므로 클러스터가 생성된 후 이 범위를 변경할 수 없습니다.

노드 및 포드 IP 주소 범위와 달리 각 클러스터는 서비스에 대해 서브넷 보조 IP 주소 범위가 고유해야 하며, 공유 기본 또는 보조 IP 범위에서 가져올 수 없습니다.

멀티 클러스터 서비스를 사용하는 경우 ServiceImport 객체가 서비스의 보조 IP 범위에 속한 IP 주소를 사용합니다.

다음 표에서는 서비스의 서브넷 보조 IP 주소 범위 크기를 고려하여 서브넷을 사용하여 단일 클러스터에서 만들 수 있는 최대 서비스 수를 보여줍니다.

서비스의 보조 IP 범위 최대 서비스 수
/28
보조 범위 할당 방법을 사용자가 관리할 경우에 가능한 최소 서비스 주소 범위
서비스 16개
/27
보조 범위 할당 방법을 GKE에서 관리할 경우에 가능한 최소 서비스 주소 범위
서비스 32개
/26 서비스 64개
/25 서비스 128개
/24 서비스 256개
/23 서비스 512개
/22 서비스 1,024개
/21 서비스 2,048개
/20
보조 범위 할당 방법을 GKE에서 관리할 경우 서비스의 서브넷 보조 IP 범위 기본 크기
서비스 4,096개
/19 서비스 8,192개
/18 서비스 16,384개
/17 서비스 32,768개
/16
가능한 최대 서비스 주소 범위
서비스 65,536개

노드 제한 범위

주어진 GKE 클러스터의 최대 Pod 수와 최대 서비스 수는 클러스터의 보조 범위 크기에 따라 제한됩니다. 클러스터의 최대 노드 수는 클러스터 서브넷의 기본 IP 주소 범위 클러스터의 Pod 주소 범위의 크기에 따라 제한됩니다.

콘솔에서는 다음과 같은 오류 메시지를 표시하여 서브넷의 기본 IP 주소 범위 또는 클러스터의 포드 IP 주소 범위(포드의 서브넷 보조 IP 주소 범위)가 소진되었음을 나타냅니다.

Instance [node name] creation failed: IP space of [cluster subnet] is
exhausted

기본 서브넷을 확장하여 노드에 IP 주소를 추가하거나 연속되지 않은 다중 포드 CIDR을 사용하여 포드에 새 IP 주소를 추가할 수 있습니다. 자세한 내용은 포드의 IP 여유 공간 부족을 참조하세요.

이중 스택 네트워킹

이중 스택 네트워킹을 사용하면 GKE에서 다음 객체에 IP 주소(ipFamilies)를 할당하는 방법을 정의할 수 있습니다.

  • 포드 및 노드의 경우 GKE가 IPv4 및 IPv6 주소를 모두 할당할 수 있습니다.
  • 서비스의 경우 GKE가 단일 스택(IPv4 또는 IPv6만) 또는 이중 스택 주소를 할당합니다.

GKE 버전 1.24.1부터는 독립형 및 공유 VPC 네트워크에서 GKE 클러스터에 대해 이중 스택 네트워킹을 사용 설정할 수 있습니다. 또한 이중 스택 네트워킹이 사용 설정된 네트워크 정책을 적용할 수도 있습니다.

이점

이중 스택 네트워킹의 이점은 다음과 같습니다.

  • 엔드 투 엔드 IPv6 통신을 사용 설정합니다.
  • NAT 또는 IP 터널링보다 나은 성능을 지원합니다. 이것은 IPv6에서 IPv4로의 변환이 없기 때문입니다.

제한 및 한도

GKE의 이중 스택 네트워킹에는 다음과 같은 제한 및 한도가 있습니다.

  • 이중 스택 네트워킹은 GKE Dataplane V2가 사용 설정된 VPC 기반 클러스터에서만 사용할 수 있습니다.
  • 이중 스택 네트워킹은 커스텀 모드 VPC의 서브넷에만 지원됩니다. 자세한 내용은 VPC 네트워크의 Google Cloud 유형을 참조하세요.
  • 이중 스택 네트워킹은 알파 Compute Engine API 액세스가 허용되는 프로젝트에서만 지원됩니다. 자세한 내용은 계정팀 또는 gke-ipv6-feedback@google.com에 문의하세요.
  • 포드 또는 노드에 대한 단일 스택 IPv6 주소가 지원되지 않습니다.
  • LoadBalancer 서비스에 IPv6가 지원되지 않습니다.
  • Windows 노드에 IPv6가 지원되지 않습니다.
  • 기존 클러스터에 IPv6가 지원되지 않습니다.

공개 또는 비공개 IPv6 클러스터를 만들려면 먼저 위에 표시된 제한 및 한도를 고려하세요. 자세한 내용은 이중 스택 네트워킹을 사용하여 VPC 기반 클러스터를 만드는 방법을 참조하세요.

공개 및 비공개 IPv6 클러스터

다음 표에서는 이중 스택 네트워킹 동작 및 구성을 사용하는 공개 및 비공개 IPv6 클러스터를 요약해서 보여줍니다.

클러스터 유형 IP 주소 할당 서브넷 범위 구성
공개

GKE가 다음을 할당합니다.

  • 인터넷으로 라우팅할 수 있는 외부 IPv6 주소
  • 노드에 대한 비공개 및 공개 IPv4 주소
시작: 2600:1900/28 --ipv6-access-type 플래그를 EXTERNAL로 설정하여 서브넷을 만듭니다.
비공개

GKE가 다음을 할당합니다.

  • 인터넷으로 라우팅할 수 없는 내부 IPv6 주소
  • 노드에 대한 비공개 IPv4 주소만

비공개 클러스터는 Cloud NAT를 사용하여 공개 인터넷에 액세스할 수 있습니다. 하지만 Cloud NAT는 IPv6 주소를 지원하지 않습니다.

시작: fd20::/20(전체 ULA 범위의 하위 집합: fc00::/7).

--ipv6-access-type 플래그를 INTERNAL로 설정하여 서브넷을 만듭니다.

비공개 IPv6 서브넷 유형은 고유한 로컬 IPv6 유니캐스트 주소(ULA)를 사용하는 커스텀 모드 VPC 네트워크에만 만들 수 있습니다. 자세한 내용은 VPC 네트워크 사용 방법을 참조하세요.

아키텍처

이중 스택 네트워킹으로 클러스터를 만들면 Google Cloud 및 GKE가 다음 범위를 할당합니다.

  • Google Cloud는 각 서브넷에 대한 /64 범위를 기본 범위로 예약합니다.
  • Google Cloud는 기본 노드 IP 주소 범위로 사용하기 위해 기본 범위에서 /96 노드당 범위를 예약합니다.
  • GKE는 해당 노드의 포드 IP 주소 범위로 사용하기 위해 기본 노드 IP 주소 범위에서 /112 노드당 범위를 예약합니다. 이중 스택 네트워킹에서 포드는 IPv4 주소로 예약된 포드의 보조 범위가 아니라 노드와 비슷한 전체 포드 IP 주소 범위에서 IPv6 주소를 가져옵니다.

    전체 포드 IP 주소 범위는 기본 노드 IP 범위에서 겹치지 않는 범위로 구성됩니다. 따라서 이 포드 IP 범위는 연속적이지 않습니다.

  • 각 클러스터는 서비스에 사용하도록 /112 범위로 할당됩니다. 이 범위는 GKE의 보조 서비스 IP 주소 범위에 예약된 Google 비공개 주소 범위의 /64 범위입니다.

다음 다이어그램은 Google Cloud 및 GKE 할당 IPv6 주소를 보여줍니다.

다이어그램에서 VPC 서브넷의 기본 범위는 2600:1900:0:1::/64이고 GKE 서비스의 예약된 범위는 2600:2D00:0:4::0:0/64입니다. 클러스터의 각 노드에는 기본 노드 IP 주소 범위에 대한 /96 범위와 포드 IP 주소 범위에 대한 /112 범위가 포함됩니다. 또한 클러스터에는 /112 보조 서비스 IP 주소 범위가 포함됩니다.

서비스

ClusterIP 또는 NodePort 유형의 IPv6 서비스를 만들 수 있습니다.

ClusterIP 또는 NodePort 유형의 서비스로 배포를 노출할 수 있습니다. 각 배포에 대해 ipFamiliesipFamilyPolicy 필드를 IPv4, IPv6 또는 이중 스택 서비스로 정의할 수 있습니다. 자세한 내용은 배포 설정 방법 예시를 참조하세요.

다음 단계