IPv4/IPv6 이중 스택

IPv4/IPv6 이중 스택 (IPv4/IPv6 dual-stack)

IPv4/IPv6 이중 스택 네트워킹은 PodsServices에 IPv4와 IPv6 주소를 모두 할당할 수 있게 해줘요.

IPv4/IPv6 이중 스택 네트워킹은 1.21부터 쿠버네티스 클러스터에서 기본으로 활성화되며, IPv4와 IPv6 주소를 동시에 할당할 수 있게 해줘요.

출처: 문서

본문

지원되는 기능 (Supported Features)

쿠버네티스 클러스터의 IPv4/IPv6 이중 스택은 다음 기능을 제공해요:

  • 이중 스택 파드 네트워킹(파드당 단일 IPv4와 IPv6 주소 할당)
  • IPv4와 IPv6가 활성화된 Services
  • IPv4와 IPv6 인터페이스 양쪽을 통한 파드의 클러스터 밖(예: 인터넷) 이그레스 라우팅

사전 요구 사항 (Prerequisites)

IPv4/IPv6 이중 스택 쿠버네티스 클러스터를 활용하려면 다음 사전 요구 사항이 필요해요.

IPv4/IPv6 이중 스택 구성하기

IPv4/IPv6 이중 스택을 구성하려면 이중 스택 클러스터 네트워크 할당을 설정해요:

  • kube-apiserver:
  • kube-controller-manager:
  • kube-proxy:
  • kubelet:

참고:

IPv4 CIDR 예시: 10.244.0.0/16 (물론 자신의 주소 범위를 제공해야 해요)

IPv6 CIDR 예시: fdXY:IJKL:MNOP:15::/64 (형식을 보여주지만 유효한 주소는 아니에요 - RFC 4193 참고)

서비스 (Services)

IPv4, IPv6, 또는 둘 다를 사용할 수 있는 Services를 만들 수 있어요.

Service의 주소 패밀리는 첫 번째 서비스 클러스터 IP 범위(kube-apiserver에 --service-cluster-ip-range 플래그로 구성)의 주소 패밀리를 기본값으로 해요.

Service를 정의할 때 선택적으로 이중 스택으로 구성할 수 있어요. 원하는 동작을 지정하려면 .spec.ipFamilyPolicy 필드를 다음 값 중 하나로 설정해요:

  • SingleStack: 단일 스택 서비스. 제어 플레인은 첫 번째 구성된 서비스 클러스터 IP 범위를 사용해 Service에 클러스터 IP를 할당해요.
  • PreferDualStack: 이중 스택이 활성화되면 Service에 IPv4와 IPv6 클러스터 IP를 모두 할당해요. 이중 스택이 활성화되지 않았거나 지원되지 않으면 단일 스택 동작으로 폴백해요.
  • RequireDualStack: 이중 스택이 활성화되면 IPv4와 IPv6 주소 범위 양쪽에서 Service .spec.clusterIPs 를 할당해요. 이중 스택이 활성화되지 않았거나 지원되지 않으면 Service API 객체 생성이 실패해요.

단일 스택에 사용할 IP 패밀리를 정의하거나 이중 스택의 IP 패밀리 순서를 정의하려면 Service에 선택적 필드 .spec.ipFamilies 를 설정해 주소 패밀리를 선택할 수 있어요.

참고:

.spec.ipFamilies 는 다음 배열 값 중 하나로 설정할 수 있어요:

  • ["IPv4"]
  • ["IPv6"]
  • ["IPv4","IPv6"] (이중 스택)
  • ["IPv6","IPv4"] (이중 스택)

첫 번째로 나열한 패밀리가 기존 .spec.clusterIP 필드에 사용돼요.

이중 스택 Service 구성 시나리오

이 예시들은 다양한 이중 스택 Service 구성 시나리오의 동작을 보여줘요.

새 Service의 이중 스택 옵션
기존 Service의 이중 스택 기본값

이 예시들은 Service가 이미 존재하는 클러스터에 이중 스택이 새로 활성화될 때의 기본 동작을 보여줘요. (기존 클러스터를 1.21 이상으로 업그레이드하면 이중 스택이 활성화돼요.)

Service를 단일 스택과 이중 스택 사이에서 전환하기

Service는 단일 스택에서 이중 스택으로, 이중 스택에서 단일 스택으로 변경할 수 있어요.

셀렉터 없는 헤드리스 Service

셀렉터 없는 헤드리스 Services.spec.ipFamilyPolicy 가 명시적으로 설정되지 않은 경우, .spec.ipFamilyPolicy 필드는 기본적으로 RequireDualStack 이 돼요.

Service 유형 LoadBalancer

Service용 이중 스택 로드 밸런서를 프로비저닝하려면:

  • .spec.type 필드를 LoadBalancer 로 설정해요
  • .spec.ipFamilyPolicy 필드를 PreferDualStack 또는 RequireDualStack 으로 설정해요

참고:

이그레스 트래픽 (Egress traffic)

공개적으로 라우팅할 수 없는 IPv6 주소를 사용하는 파드에서 오프 클러스터 목적지(예: 공개 인터넷)에 도달하기 위해 이그레스 트래픽을 활성화하려면, 투명 프록시(transparent proxying)나 IP 마스커레이딩(masquerading) 같은 메커니즘을 통해 파드가 공개적으로 라우팅되는 IPv6 주소를 사용할 수 있게 해야 해요. ip-masq-agent 프로젝트는 이중 스택 클러스터에서 IP 마스커레이딩을 지원해요.

참고:

Windows 지원

Windows의 쿠버네티스는 단일 스택 "IPv6-only" 네트워킹을 지원하지 않아요. 그러나 단일 패밀리 서비스가 있는 파드·노드용 이중 스택 IPv4/IPv6 네트워킹은 지원돼요.

l2bridge 네트워크로 IPv4/IPv6 이중 스택 네트워킹을 사용할 수 있어요.

참고:

Windows의 다양한 네트워크 모드에 대해 더 읽으려면 Windows의 네트워킹 주제를 참고해요.

더 알아보기 (Learn more)