이 페이지에서는 포드에 대한 다중 네트워크 지원을 사용하여 Google Kubernetes Engine(GKE) 클러스터의 노드 및 포드에 다중 인터페이스를 사용 설정하는 방법을 보여줍니다.
이 페이지를 읽기 전에 일반적인 네트워킹 개념, 이 기능과 관련된 용어 및 개념, 포드의 다중 네트워크 지원에 대한 요구사항 및 제한사항을 숙지해야 합니다.
자세한 내용은 포드의 다중 네트워크 지원 정보를 참조하세요.
요구사항 및 제한사항
포드에 대한 다중 네트워크 지원에는 다음 요구사항과 제한사항이 있습니다.
요구사항
- GKE Standard 버전 1.28 이상
- GKE Autopilot 버전 1.29.5-gke.1091000 이상 또는 버전 1.30.1-gke.1280000 이상
- 포드에 대한 다중 네트워크 지원은 Compute Engine에 대한 다중 NIC와 동일한 VM 수준 사양을 사용합니다.
- 포드에 대한 다중 네트워크 지원에는 GKE Dataplane V2가 필요합니다.
- 포드에 대한 다중 네트워크 지원은 버전 m101 이상을 실행하는 Container-Optimized OS 노드에만 제공됩니다.
일반 제한
- 이중 스택 네트워킹에 사용 설정된 클러스터에서는 포드에 대한 다중 네트워크 지원이 작동하지 않습니다.
- 공유 VPC는 GKE 버전 1.28 이상에서만 지원됩니다.
- 멀티 포드 CIDR은 GKE 버전 1.29 이상에서 기본 포드 네트워크에 대해서만 지원됩니다.
- 단일 GKE 클러스터 내의 모든 포드 네트워크는 중복되는 CIDR 범위를 가질 수 없습니다.
- 포드에 대한 다중 네트워크 지원을 사용 설정하면 노드 풀을 만든 후 노드 네트워크 인터페이스 또는 포드 네트워크를 추가하거나 삭제할 수 없습니다. 이 설정을 변경하려면 노드 풀을 다시 만들어야 합니다.
- 기본적으로 포드 내부의 포드 네트워크 추가 인터페이스에서는 인터넷 액세스를 사용할 수 없습니다. 하지만 Cloud NAT를 사용하여 수동으로 사용 설정할 수 있습니다.
- API를 통해 여러 인터페이스가 있는 포드 내에서 기본 게이트웨이를 변경할 수 없습니다. 기본 게이트웨이는 기본 포드 네트워크에 연결되어야 합니다.
- 포드 네트워크 또는 인터페이스를 추가하더라도 기본 포드 네트워크는 항상 포드에 포함되어야 합니다.
- 관리형 Hubble이 구성된 경우 다중 네트워크 기능을 구성할 수 없습니다.
- 공유 VPC를 사용하려면 GKE 클러스터에서 버전 1.28.4 이상을 실행해야 합니다.
- 공유 VPC 배포의 경우 노드에 연결된 모든 네트워크 인터페이스(NIC)가 호스트 프로젝트와 동일한 프로젝트에 속해야 합니다.
- 기기 유형 네트워크 객체의 이름은 41자(영문 기준) 이하여야 합니다. 각 UNIX 도메인 소켓의 전체 경로가 상응하는 네트워크 이름을 포함하여 구성됩니다.
Linux에는 소켓 경로 길이(107바이트 미만)에 대한 제한사항이 있습니다.
디렉터리, 파일 이름 프리픽스,
.sock
확장자를 고려하면 네트워크 이름은 최대 41자로 제한됩니다.
기기 및 데이터 영역 개발 키트(DPDK) 제한사항
Device
유형 NIC로 포드에 전달된 VM NIC는 동일한 노드의 다른 포드에서 사용할 수 없습니다.- DPDK 모드를 사용하는 포드는 권한 모드로 실행되어야 VFIO 기기에 액세스할 수 있습니다.
- Autopilot 모드는 DPDK를 지원하지 않습니다.
- DPDK 모드에서 기기는 노드 리소스로 취급되며 포드의 첫 번째 컨테이너 (비초기화)에만 연결됩니다. 여러 개의 DPDK 기기를 동일한 포드의 컨테이너에 분할하려면 이러한 컨테이너를 별도의 포드에서 실행해야 합니다.
확장 제한
GKE는 클러스터를 확장할 수 있는 유연한 네트워크 아키텍처를 제공합니다. 클러스터에 노드 네트워크와 포드 네트워크를 추가할 수 있습니다. 다음과 같이 클러스터를 확장할 수 있습니다.
- 각 GKE 노드 풀에 노드 네트워크를 최대 7개까지 추가할 수 있습니다. 이는 Compute Engine VM에 대한 확장 한도와 동일합니다.
- 각 포드에 연결된 추가 네트워크는 7개 미만이어야 합니다.
- 단일 노드 풀 내의 8개의 노드 네트워크에서 포드 네트워크를 최대 35개까지 구성할 수 있습니다. 다음과 같은 다양한 조합으로 분류할 수 있습니다.
- 포드 네트워크가 각각 5개씩 있는 7개의 노드 네트워크
- 포드 네트워크가 각각 7개씩 있는 5개의 노드 네트워크
- 30개의 포드 네트워크가 있는 1개의 노드 네트워크. 서브넷당 보조 범위의 한도는 30개입니다.
- 클러스터당 최대 50개의 포드 네트워크를 구성할 수 있습니다.
- 노드당 최대 32개의 다중 네트워크 포드를 구성할 수 있습니다.
- 인터페이스가 여러 개인 노드를 최대 5,000개까지 추가할 수 있습니다.
- 모든 포드에서 최대 100,000개의 추가 인터페이스를 사용할 수 있습니다.
다중 네트워크 포드 배포
다중 네트워크 포드를 배포하려면 다음을 수행합니다.
- 추가 VPC, 서브넷(노드 네트워크), 보조 범위(포드 네트워크)를 준비합니다.
- Google Cloud CLI 명령어를 사용하여 다중 네트워크가 사용 설정된 GKE 클러스터 만들기
- Google Cloud CLI 명령어를 사용하여 추가 노드 네트워크 및 포드 네트워크에 연결된 새 GKE 노드 풀을 만듭니다.
- 포드 네트워크를 만들고 Kubernetes API를 사용하여 다중 네트워크 객체에서 올바른 VPC, 서브넷, 보조 범위를 참조합니다.
- 워크로드 구성에서 Kubernetes API를 사용하여 준비된 네트워크를 참조하는 Kubernetes 객체를 만듭니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
- 요구사항 및 제한사항을 검토합니다.
추가 VPC 준비
Google Cloud는 GKE 클러스터의 초기 생성 시 사용되는 GKE 노드 풀과 연결된 클러스터를 만드는 동안 기본 포드 네트워크를 만듭니다. 기본 포드 네트워크는 모든 클러스터 노드 및 포드에서 사용할 수 있습니다. 노드 풀 내에서 다중 네트워크 기능을 사용하려면 Layer 3
및 Device
유형 네트워크를 지원하는 기존 VPC나 새 VPC를 준비해야 합니다.
추가 VPC를 준비하려면 다음 요구사항을 고려하세요.
Layer 3
및Netdevice
유형 네트워크:Layer 3
유형 네트워크를 사용하는 경우 보조 범위를 만듭니다.- 보조 범위의 CIDR 크기가 노드 풀의 노드 수와 원하는 노드당 포드 수를 충족할 만큼 큰지 확인합니다.
- 기본 포드 네트워크와 마찬가지로 다른 포드 네트워크에서 IP 주소 오버프로비저닝을 사용합니다. 보조 IP 주소 범위는 노드당 포드 수보다 노드당 IP 주소 수가 2배 많아야 합니다.
Device
유형 네트워크 요구사항: VPC에 일반 서브넷을 만듭니다. 보조 서브넷은 필요하지 않습니다.
노드 풀에서 다중 네트워크 기능을 사용 설정하려면 추가 연결을 설정할 VPC를 준비해야 합니다. 기존 VPC를 사용하거나 노드 풀에 대해 새 VPC를 만들 수 있습니다.
Layer 3
유형 기기를 지원하는 VPC 네트워크 만들기
Layer 3
유형 기기를 지원하는 VPC 네트워크를 만들려면 다음 단계를 수행합니다.
- 보조 범위의 CIDR 크기가 노드 풀의 노드 수와 원하는 노드당 포드 수를 충족할 만큼 큰지 확인합니다.
기본 포드 네트워크와 마찬가지로 다른 포드 네트워크에서 IP 주소 오버프로비저닝을 사용합니다. 보조 IP 주소 범위는 노드당 포드 수보다 노드당 IP 주소 수가 2배 많아야 합니다.
gcloud
gcloud compute networks subnets create SUBNET_NAME \
--project=PROJECT_ID \
--range=SUBNET_RANGE \
--network=NETWORK_NAME \
--region=REGION \
--secondary-range=SECONDARY_RANGE_NAME=<SECONDARY_RANGE_RANGE>
다음을 바꿉니다.
SUBNET_NAME
: 서브넷의 이름입니다.PROJECT_ID
: 서브넷이 생성된 VPC 네트워크를 포함하는 프로젝트의 ID입니다.SUBNET_RANGE
: CIDR 표기법으로 표시된 새 서브넷의 기본 IPv4 주소 범위입니다.NETWORK_NAME
: 새 서브넷이 포함된 VPC 네트워크의 이름입니다.REGION
: 새 서브넷이 생성되는 Google Cloud 리전입니다.SECONDARY_RANGE_NAME
: 보조 범위의 이름입니다.SECONDARY_IP_RANGE
: CIDR 표기법으로 표시된 보조 IPv4 주소 범위입니다.
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름 필드에 네트워크의 이름을 입력합니다. 예를 들면
l3-vpc
입니다.최대 전송 단위(MTU) 드롭다운에서 적절한 MTU 값을 선택합니다.
서브넷 생성 모드 섹션에서 커스텀을 선택합니다.
서브넷 추가를 클릭합니다.
새 서브넷 섹션에서 서브넷에 다음 구성 매개변수를 지정합니다.
이름을 입력합니다. 예를 들면
l3-subnet
입니다.리전을 선택합니다.
IP 주소 범위를 입력합니다. 이 범위는 서브넷의 기본 IPv4 범위입니다.
RFC 1918 주소가 아닌 범위를 선택하는 경우 범위가 기존 구성과 충돌하지 않는지 확인합니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.
서브넷의 보조 범위를 정의하려면 보조 IP 범위 만들기를 클릭합니다.
RFC 1918 주소가 아닌 범위를 선택하는 경우 범위가 기존 구성과 충돌하지 않는지 확인합니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.
비공개 Google 액세스: 서브넷을 만들 때 또는 나중에 서브넷을 수정하여 서브넷에 비공개 Google 액세스를 사용 설정할 수 있습니다.
흐름 로그: 서브넷을 만들 때 또는 나중에 서브넷을 수정하여 서브넷에 VPC 흐름 로그를 사용 설정할 수 있습니다.
완료를 클릭합니다.
방화벽 규칙 섹션의 IPv4 방화벽 규칙에서 사전 정의된 방화벽 규칙을 0개 이상 선택합니다.
이 규칙은 인스턴스에 연결하는 일반적인 사용 사례를 다룹니다. 네트워크를 만든 후 자체 방화벽 규칙을 만들 수 있습니다. 사전 정의된 각 규칙 이름은 만들려는 VPC 네트워크의 이름으로 시작합니다.
IPv4 방화벽 규칙에서
allow-custom
이라는 사전 정의된 인그레스 방화벽 규칙을 수정하려면 수정을 클릭합니다.서브넷을 수정하고 IPv4 범위를 추가하며 프로토콜 및 포트를 지정할 수 있습니다.
나중에 서브넷을 추가하는 경우에는
allow-custom
방화벽 규칙이 자동으로 업데이트되지 않습니다. 새 서브넷에 대한 방화벽 규칙이 필요한 경우 규칙을 추가하려면 방화벽 구성을 업데이트해야 합니다.동적 라우팅 모드 섹션의 VPC 네트워크의 경우. 자세한 내용은 동적 라우팅 모드를 참조하세요. 나중에 동적 라우팅 모드를 변경할 수 있습니다.
만들기를 클릭합니다.
Netdevice
또는 DPDK
유형 기기를 지원하는 VPC 네트워크 만들기
gcloud
gcloud compute networks subnets create SUBNET_NAME \
--project=PROJECT_ID \
--range=SUBNET_RANGE \
--network=NETWORK_NAME \
--region=REGION \
--secondary-range=SECONDARY_RANGE_NAME=<SECONDARY_RANGE_RANGE>
다음을 바꿉니다.
SUBNET_NAME
: 서브넷의 이름입니다.PROJECT_ID
: 서브넷이 생성된 VPC 네트워크를 포함하는 프로젝트의 ID입니다.SUBNET_RANGE
: CIDR 표기법으로 표시된 새 서브넷의 기본 IPv4 주소 범위입니다.NETWORK_NAME
: 새 서브넷이 포함된 VPC 네트워크의 이름입니다.REGION
: 새 서브넷이 생성되는 Google Cloud 리전입니다.SECONDARY_RANGE_NAME
: 보조 범위의 이름입니다.SECONDARY_IP_RANGE
: CIDR 표기법으로 표시된 보조 IPv4 주소 범위입니다.
콘솔
Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 만들기를 클릭합니다.
이름 필드에 네트워크의 이름을 입력합니다. 예를 들면
netdevice-vpc
또는dpdk-vpc
입니다.최대 전송 단위(MTU) 드롭다운에서 적절한 MTU 값을 선택합니다.
서브넷 생성 모드 섹션에서 커스텀을 선택합니다.
새 서브넷 섹션에서 서브넷에 다음 구성 매개변수를 지정합니다.
이름을 입력합니다. 예를 들면
netdevice-subnet
또는dpdk-vpc
입니다.리전을 선택합니다.
IP 주소 범위를 입력합니다. 이 범위는 서브넷의 기본 IPv4 범위입니다.
RFC 1918 주소가 아닌 범위를 선택하는 경우 범위가 기존 구성과 충돌하지 않는지 확인합니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.
비공개 Google 액세스: 서브넷을 만들 때 또는 나중에 서브넷을 수정하여 서브넷에 비공개 Google 액세스를 사용할지 여부를 선택합니다.
흐름 로그: 서브넷을 만들 때 또는 나중에 서브넷을 수정하여 서브넷에 VPC 흐름 로그를 사용 설정할 수 있습니다.
완료를 클릭합니다.
방화벽 규칙 섹션의 IPv4 방화벽 규칙에서 사전 정의된 방화벽 규칙을 0개 이상 선택합니다.
이 규칙은 인스턴스에 연결하는 일반적인 사용 사례를 다룹니다. 네트워크를 만든 후 자체 방화벽 규칙을 만들 수 있습니다. 사전 정의된 각 규칙 이름은 만들려는 VPC 네트워크의 이름으로 시작합니다.
IPv4 방화벽 규칙에서
allow-custom
이라는 사전 정의된 인그레스 방화벽 규칙을 수정하려면 수정을 클릭합니다.서브넷을 수정하고 IPv4 범위를 추가하며 프로토콜 및 포트를 지정할 수 있습니다.
나중에 서브넷을 추가하는 경우에는
allow-custom
방화벽 규칙이 자동으로 업데이트되지 않습니다. 새 서브넷에 대한 방화벽 규칙이 필요한 경우 규칙을 추가하려면 방화벽 구성을 업데이트해야 합니다.동적 라우팅 모드 섹션의 VPC 네트워크의 경우. 자세한 내용은 동적 라우팅 모드를 참조하세요. 나중에 동적 라우팅 모드를 변경할 수 있습니다.
만들기를 클릭합니다.
다중 네트워크 기능이 있는 GKE 클러스터 만들기
클러스터에 다중 네트워킹을 사용 설정하면 해당 클러스터의 API 서버에 필요한 CustomResourceDefinition(CRD)이 추가됩니다. 또한 다중 네트워크 객체를 조정하고 관리하는 네트워크 컨트롤러 관리자를 배포합니다. 클러스터 구성을 만든 후에는 수정할 수 없습니다.
다중 네트워크 기능이 있는 GKE Autopilot 클러스터 만들기
다중 네트워크 기능이 있는 GKE Autopilot 클러스터를 만들려면 다음을 수행합니다.
gcloud container clusters create-auto CLUSTER_NAME \
--cluster-version=CLUSTER_VERSION \
--enable-multi-networking
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터의 이름CLUSTER_VERSION
: 클러스터의 버전
--enable-multi-networking
플래그는 이 클러스터의 API 서버에서 다중 네트워킹 커스텀 리소스 정의(CRD)를 사용 설정하며 다중 네트워크 객체의 조정 및 수명 주기 관리를 포함하는 네트워크 컨트롤러 관리자를 배포합니다.
다중 네트워크 기능이 있는 GKE Standard 클러스터 만들기
gcloud
다중 네트워크 기능이 있는 GKE Standard 클러스터를 만들려면 다음을 수행합니다.
gcloud container clusters create CLUSTER_NAME \
--cluster-version=CLUSTER_VERSION \
--enable-dataplane-v2 \
--enable-ip-alias \
--enable-multi-networking
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터의 이름CLUSTER_VERSION
: 클러스터의 버전
이 명령어에는 다음 플래그가 포함됩니다.
--enable-multi-networking:
이 클러스터의 API 서버에서 다중 네트워킹 커스텀 리소스 정의(CRD)를 사용 설정하며 다중 네트워크 객체의 조정 및 수명 주기 관리를 포함하는 네트워크 컨트롤러 관리자를 배포합니다.--enable-dataplane-v2:
GKE Dataplane V2를 사용 설정합니다. 이 플래그는 다중 네트워크를 사용 설정하는 데 필요합니다.
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
add_box만들기를 클릭합니다.
Standard 클러스터를 구성합니다. 자세한 내용은 영역 클러스터 만들기 또는 리전 클러스터 만들기를 참조하세요. 클러스터를 만드는 동안 적절한 네트워크 및 노드 서브넷을 선택합니다.
탐색창의 클러스터에서 네트워킹을 클릭합니다.
Dataplane V2 사용 설정 체크박스를 선택합니다.
다중 네트워크 사용 설정을 선택합니다.
만들기를 클릭합니다.
추가 VPC에 연결된 GKE Standard 노드 풀 만들기
포드 네트워크 만들기에서 만든 노드 네트워크(VPC 및 서브넷) 및 포드 네트워크(보조 범위)에 연결된 노드가 포함된 노드 풀을 만듭니다.
새 노드 풀을 만들고 GKE 클러스터의 추가 네트워크에 연결하려면 다음 안내를 따르세요.
gcloud
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--additional-node-network network=NETWORK_NAME,subnetwork=SUBNET_NAME \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=POD_IP_RANGE,max-pods-per-node=NUMBER_OF_PODS \
--additional-node-network network=highperformance,subnetwork=subnet-highperf
다음을 바꿉니다.
POOL_NAME
을 새 노드 풀 이름으로 바꿉니다.CLUSTER_NAME
을 노드 풀을 추가할 기존 클러스터의 이름으로 바꿉니다.NETWORK_NAME
을 노드 풀의 노드를 연결할 네트워크 이름으로 바꿉니다.SUBNET_NAME
을 노드에 사용할 네트워크 내 서브넷 이름으로 바꿉니다.POD_IP_RANGE
를 서브넷 내의 포드 IP 주소 범위로 바꿉니다.NUMBER_OF_PODS
의 노드당 최대 포드 수입니다.
이 명령어에는 다음 플래그가 포함됩니다.
--additional-node-network
: 추가 네트워크 인터페이스, 네트워크, 서브네트워크의 세부정보를 정의합니다. 이는 노드 풀 노드에 연결할 수 있도록 노드 네트워크를 지정하는 데 사용됩니다. 다른 VPC에 연결하려면 이 매개변수를 지정합니다. 이 파라미터를 지정하지 않으면 클러스터와 연결된 기본 VPC가 사용됩니다.Layer 3
유형 네트워크의 경우 GKE 클러스터 내에Network
객체로 노출되는 포드 네트워크를 정의하는additional-pod-network
플래그를 지정합니다.--additional-node-network
플래그를 사용할 때는 네트워크와 서브네트워크를 필수 매개변수로 제공해야 합니다. 네트워크 값과 서브네트워크 값을 쉼표로 구분하고 공백을 사용하지 마세요.--additional-pod-network
: 포드 네트워크에 사용할 보조 범위의 세부정보를 지정합니다.Device
유형 네트워크를 사용하는 경우에는 이 파라미터가 필요하지 않습니다. 이 인수는subnetwork
,pod-ipv4-range
,max-pods-per-node
키 값을 지정합니다.--additional-pod-network
를 사용할 때는pod-ipv4-range
및max-pods-per-node
값을 쉼표로 구분하고 공백 없이 제공해야 합니다.subnetwork
: 노드 네트워크를 포드 네트워크에 연결합니다. 서브네트워크는 선택사항입니다. 지정하지 않으면 추가 포드 네트워크가 클러스터 생성 중에 제공되는 기본 서브네트워크와 연결됩니다.--max-pods-per-node
:max-pods-per-node
를 지정해야 하고 2의 거듭제곱이어야 합니다. 최솟값은 4입니다.max-pods-per-node
는 노드 풀의max-pods-per-node
값보다 크지 않아야 합니다.
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
탐색창에서 클러스터를 클릭합니다.
Kubernetes 클러스터 섹션에서 만든 클러스터를 클릭합니다.
페이지 상단에서 노드 풀을 만들려면 add_box 노드 풀 추가를 클릭합니다.
노드 풀 세부정보 섹션에서 다음을 완료합니다.
- 노드 풀에 이름을 입력합니다.
- 노드 풀에서 만들 노드 수를 입력합니다.
탐색창의 노드 풀에서 노드를 클릭합니다.
이미지 유형 드롭다운 목록에서 containerd를 포함한 Container-Optimized OS(cos_containerd)를 선택합니다.
VM을 만들 때는 해당 VM에 사용할 수 있는 리소스를 결정하는 머신 제품군에서 머신 유형을 선택합니다. 예를 들어
e2-standard-4
와 같은 머신 유형에는 vCPU가 4개 포함되어 있으므로 총 4개의 VPC를 지원할 수 있습니다. 여러 머신 제품군에서 선택할 수 있으며 각 머신 제품군은 머신 시리즈와 각 시리즈 내의 사전 정의된 또는 커스텀 머신 유형으로 구성됩니다. 각 머신 유형은 서로 다르게 청구됩니다. 자세한 내용은 머신 유형 가격표를 참조하세요.탐색 창에서 네트워킹을 선택합니다.
노드 네트워킹 섹션에서 노드당 최대 포드 수를 지정합니다. 노드 네트워크 섹션에는 클러스터를 만드는 데 사용되는 VPC 네트워크가 표시됩니다. 이전에 설정된 VPC 네트워크 및 기기 유형과 상관 관계가 있는 추가 노드 네트워크를 지정해야 합니다.
노드 풀 연결을 만듭니다.
Layer 3
유형 기기의 경우:- 노드 네트워크 섹션에서 노드 네트워크 추가를 클릭합니다.
- 네트워크 드롭다운 목록에서 레이어 3 유형 기기를 지원하는 VPC를 선택합니다.
Layer 3
VPC용으로 만든 서브넷을 선택합니다.- 별칭 포드 IP 주소 범위 섹션에서 포드 IP 주소 범위 추가를 클릭합니다.
- 보조 서브넷을 선택하고 노드당 최대 포드 수를 표시합니다.
- 완료를 선택합니다.
Netdevice
및DPDK
유형 기기의 경우:- 노드 네트워크 섹션에서 노드 네트워크 추가를 클릭합니다.
- 네트워크 드롭다운 목록에서
Netdevice
또는DPDK
유형 기기를 지원하는 VPC를 선택합니다. Netdevice
또는DPDK
VPC용으로 만든 서브넷을 선택합니다.- 완료를 선택합니다.
만들기를 클릭합니다.
참고:
- 여러 추가 포드 네트워크가 동일한 노드 네트워크 내에 지정된 경우 동일한 서브넷에 있어야 합니다.
- 서브넷의 동일한 보조 범위를 여러 번 참조할 수 없습니다.
예시
다음 예시에서는 두 개의 추가 네트워크인 datapalane(Layer 3
유형 네트워크)과 highperformance(netdevice 유형 네트워크)을 노드에 연결하는 pool-multi-net이라는 노드 풀을 만듭니다. 이 예시에서는 이미 cluster-1
이라는 GKE 클러스터를 만들었다고 가정합니다.
gcloud container node-pools create pool-multi-net \
--project my-project \
--cluster cluster-1 \
--zone us-central1-c \
--additional-node-network network=dataplane,subnetwork=subnet-dp \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-blue,max-pods-per-node=8 \
--additional-node-network network=highperformance,subnetwork=subnet-highperf
노드 네트워크 및 포드 네트워크 인터페이스를 추가로 지정하려면 다음 예시와 같이 --additional-node-network
및 --additional-pod-network
매개변수를 여러 번 정의합니다.
--additional-node-network network=dataplane,subnetwork=subnet-dp \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-blue,max-pods-per-node=8 \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-green,max-pods-per-node=8 \
--additional-node-network network=managementdataplane,subnetwork=subnet-mp \
--additional-pod-network subnetwork=subnet-mp,pod-ipv4-range=sec-range-red,max-pods-per-node=4
다음 예시와 같이 노드 풀의 기본 VPC 인터페이스에서 직접 포드 네트워크를 추가로 지정합니다.
--additional-pod-network subnetwork=subnet-def,pod-ipv4-range=sec-range-multinet,max-pods-per-node=8
포드 네트워크 만들기
Kubernetes 객체를 정의하고 VPC, 서브넷, 보조 범위와 같은 해당 Compute Engine 리소스에 연결하여 포드가 액세스할 포드 네트워크를 정의합니다.
포드 네트워크를 만들려면 클러스터에서 네트워크 CRD 객체를 정의해야 합니다.
Layer 3
VPC 네트워크 구성
YAML
Layer 3
VPC의 경우 Network
및 GKENetworkParamSet
객체를 만듭니다.
다음 샘플 매니페스트를
blue-network.yaml
로 저장합니다.apiVersion: networking.gke.io/v1 kind: Network metadata: name: blue-network spec: type: "L3" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: "l3-vpc"
매니페스트는
Layer 3
유형의blue-network
라는Network
리소스를 정의합니다.Network
객체는 네트워크와 Compute Engine 리소스를 연결하는l3-vpc
이라는GKENetworkParamSet
객체를 참조합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f blue-network.yaml
다음 매니페스트를
dataplane.yaml
로 저장합니다.apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: "l3-vpc" spec: vpc: "l3-vpc" vpcSubnet: "subnet-dp" podIPv4Ranges: rangeNames: - "sec-range-blue"
이 매니페스트는
dataplane
이라는GKENetworkParamSet
객체를 지정하고 VPC 이름을dataplane
으로, 서브넷 이름을subnet-dp
로 설정하고sec-range-blue
라는 포드의 보조 IPv4 주소 범위를 설정합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f dataplane.yaml
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
탐색창에서 Network Function Optimizer를 클릭합니다.
페이지 상단에서 add_box 만들기를 클릭하여 포드 네트워크를 만듭니다.
시작하기 전에 섹션에서 세부정보를 확인합니다.
다음: 포드 네트워크 위치를 클릭합니다.
포드 네트워크 위치 섹션의 클러스터 드롭다운에서 다중 네트워킹 및 GKE Dataplane V2가 사용 설정된 GKE 클러스터를 선택합니다.
다음: VPC 네트워크 참조를 클릭합니다.
VPC 네트워크 참조 섹션의 VPC 네트워크 참조 드롭다운에서
Layer 3
다중 NIC 포드에 사용되는 VPC 네트워크를 선택합니다.다음: 포드 네트워크 유형을 클릭합니다.
포드 네트워크 유형 섹션에서 L3을 선택하고 포드 네트워크 이름을 입력합니다.
다음: 포드 네트워크 보조 범위를 클릭합니다.
포드 네트워크 보조 범위 섹션에 보조 범위를 입력합니다.
다음: 포드 네트워크 경로를 클릭합니다.
포드 네트워크 경로 섹션에서 커스텀 경로를 정의하려면 경로 추가를 선택합니다.
포드 네트워크 만들기를 클릭합니다.
DPDK 네트워크 구성
YAML
DPDK VPC의 경우 Network
및 GKENetworkParamSet
객체를 만듭니다.
다음 샘플 매니페스트를
dpdk-network.yaml
로 저장합니다.apiVersion: networking.gke.io/v1 kind: Network metadata: name: dpdk-network spec: type: "Device" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: "dpdk"
이 매니페스트는
Device
유형의dpdk-network
라는Network
리소스를 정의합니다.Network
리소스는 구성에 대해dpdk
라는GKENetworkParamSet
객체를 참조합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f dpdk-network.yaml
GKENetworkParamSet
객체의 경우 다음 매니페스트를dpdk.yaml
로 저장합니다.apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: "dpdk" spec: vpc: "dpdk" vpcSubnet: "subnet-dpdk" deviceMode: "DPDK-VFIO"
이 매니페스트는
dpdk
라는GKENetworkParamSet
객체를 정의하고 VPC 이름을dpdk
로, 서브넷 이름을subnet-dpdk
로, deviceMode 이름을DPDK-VFIO
로 설정합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f dpdk-network.yaml
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
탐색창에서 Network Function Optimizer를 클릭합니다.
페이지 상단에서 add_box 만들기를 클릭하여 포드 네트워크를 만듭니다.
시작하기 전에 섹션에서 세부정보를 확인합니다.
다음: 포드 네트워크 위치를 클릭합니다.
포드 네트워크 위치 섹션의 클러스터 드롭다운에서 다중 네트워킹 및 GKE Dataplane V2가 사용 설정된 GKE 클러스터를 선택합니다.
다음: VPC 네트워크 참조를 클릭합니다.
VPC 네트워크 참조 섹션의 VPC 네트워크 참조 드롭다운에서 dpdk 다중 NIC에 사용되는 VPC 네트워크를 선택합니다.
다음: 포드 네트워크 유형을 클릭합니다.
포드 네트워크 유형 섹션에서 DPDK-VFIO(기기)를 선택하고 포드 네트워크 이름을 입력합니다.
다음: 포드 네트워크 보조 범위를 클릭합니다. 포드 네트워크 보조 범위 섹션을 사용할 수 없습니다.
다음: 포드 네트워크 경로를 클릭합니다. 포드 네트워크 경로 섹션에서 경로 추가를 선택하여 커스텀 경로를 정의합니다.
포드 네트워크 만들기를 클릭합니다.
netdevice 네트워크 구성
netdevice
VPC의 경우 Network
및 GKENetworkParamSet
객체를 만듭니다.
YAML
다음 샘플 매니페스트를
netdevice-network.yaml
로 저장합니다.apiVersion: networking.gke.io/v1 kind: Network metadata: name: netdevice-network spec: type: "Device" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: "netdevice"
이 매니페스트는
Device
유형의netdevice-network
라는Network
리소스를 정의합니다.netdevice
라는GKENetworkParamSet
객체를 참조합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f netdevice-network.yaml
다음 매니페스트를
netdevice.yaml
로 저장합니다.apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: netdevice spec: vpc: netdevice vpcSubnet: subnet-netdevice deviceMode: NetDevice
이 매니페스트는
netdevice
라는GKENetworkParamSet
리소스를 정의하고 VPC 이름을netdevice
으로, 서브넷 이름을subnet-netdevice
로 설정하고, 기기 모드를NetDevice
로 지정합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f netdevice.yaml
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
탐색창에서 Network Function Optimizer를 클릭합니다.
페이지 상단에서 add_box 만들기를 클릭하여 포드 네트워크를 만듭니다.
시작하기 전에 섹션에서 세부정보를 확인합니다.
다음: 포드 네트워크 위치를 클릭합니다.
포드 네트워크 위치 섹션의 클러스터 드롭다운에서 다중 네트워킹 및 GKE Dataplane V2가 사용 설정된 GKE 클러스터를 선택합니다.
다음: VPC 네트워크 참조를 클릭합니다.
VPC 네트워크 참조 섹션의 VPC 네트워크 참조 드롭다운에서 netdevice 다중 NIC에 사용되는 VPC 네트워크를 선택합니다.
다음: 포드 네트워크 유형을 클릭합니다.
포드 네트워크 유형 섹션에서 NetDevice(기기)를 선택하고 포드 네트워크 이름을 입력합니다.
다음: 포드 네트워크 보조 범위를 클릭합니다. 포드 네트워크 보조 범위 섹션을 사용할 수 없습니다.
다음: 포드 네트워크 경로를 클릭합니다. 포드 네트워크 경로 섹션에서 커스텀 경로를 정의하려면 경로 추가를 선택합니다.
포드 네트워크 만들기를 클릭합니다.
네트워크 경로 구성
네트워크 경로를 구성하면 특정 네트워크에 대한 커스텀 경로를 정의할 수 있으며, 이 경로는 포드에 설정되어 트래픽을 포드 내의 해당 인터페이스로 전달합니다.
YAML
다음 매니페스트를
red-network.yaml
로 저장합니다.apiVersion: networking.gke.io/v1 kind: Network metadata: name: red-network spec: type: "L3" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: "management" routes: - to: "10.0.2.0/28"
이 매니페스트는
Layer 3
유형 및 해당 네트워크 인터페이스를 통한 커스텀 경로 '10.0.2.0/28'의red-network
네트워크 리소스를 정의합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f red-network.yaml
Console
Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.
add_box만들기를 클릭합니다.
탐색창에서 Network Function Optimizer를 클릭합니다.
Kubernetes 클러스터 섹션에서 만든 클러스터를 클릭합니다.
페이지 상단에서 add_box 만들기를 클릭하여 포드 네트워크를 만듭니다.
포드 네트워크 경로 섹션에서 커스텀 경로를 정의합니다.
포드 네트워크 만들기를 클릭합니다.
준비된 Network
참조
워크로드 구성에서 Kubernetes API를 사용하여 준비된 Network
Kubernetes 객체를 참조합니다.
포드를 특정 네트워크에 연결
포드를 지정된 네트워크에 연결하려면 포드 구성 내부에 Network
객체의 이름을 주석으로 포함해야 합니다. 연결을 설정하려면 주석에 default
Network
와 선택한 추가 네트워크를 모두 포함해야 합니다.
다음 샘플 매니페스트를
sample-l3-pod.yaml
로 저장합니다.apiVersion: v1 kind: Pod metadata: name: sample-l3-pod annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"} ] spec: containers: - name: sample-l3-pod image: busybox command: ["sleep", "10m"] ports: - containerPort: 80 restartPolicy: Always
이 매니페스트는 각각
default
및blue-network
네트워크와 연결된eth0
및eth1
의 두 네트워크 인터페이스를 포함하는sample-l3-pod
라는 포드를 생성합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f sample-l3-pod.yaml
포드를 여러 네트워크에 연결
다음 샘플 매니페스트를
sample-l3-netdevice-pod.yaml
로 저장합니다.apiVersion: v1 kind: Pod metadata: name: sample-l3-netdevice-pod annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"}, {"interfaceName":"eth2","network":"netdevice-network"} ] spec: containers: - name: sample-l3-netdevice-pod image: busybox command: ["sleep", "10m"] ports: - containerPort: 80 restartPolicy: Always
이 매니페스트는 각각
default
,blue-network
,netdevice
네트워크와 연결된eth0
,eth1
,eth2
의 세 네트워크 인터페이스를 포함하는sample-l3-netdevice-pod
라는 포드를 생성합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f sample-l3-netdevice-pod.yaml
템플릿의 주석 섹션에 있는 모든 ReplicaSet(배포 또는 DaemonSet)에서 동일한 주석을 사용할 수 있습니다.
다중 인터페이스가 있는 포드의 샘플 구성
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default
link/ether 2a:92:4a:e5:da:35 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.60.45.4/24 brd 10.60.45.255 scope global eth0
valid_lft forever preferred_lft forever
10: eth1@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default qlen 1000
link/ether ba:f0:4d:eb:e8:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.16.1.2/32 scope global eth1
valid_lft forever preferred_lft forever
확인
--enable-dataplane-v2
가 사용 설정된 경우에만--enable-multi-networking
으로 클러스터를 만듭니다.- 클러스터 및 노드 풀을 만들 때 클러스터의 모든 노드 풀이 Container-Optimized OS 이미지를 실행하는지 확인합니다.
- 클러스터에 다중 네트워킹이 사용 설정된 경우에만
--additional-node-network
또는--additional-pod-network
로 노드 풀이 생성되었는지 확인합니다. - 동일한 서브넷이 노드 풀의
--additional-node-network
인수로 두 번 지정되지 않았는지 확인합니다. - 동일한 보조 범위가 노드 풀의
--additional-pod-network
인수로 지정되지 않았는지 확인합니다. - 허용되는 최대 노드 수, 포드 수, IP 주소 수를 고려하여 네트워크 객체에 지정된 확장 제한을 따르세요.
- 특정 서브넷과 보조 범위를 참조하는
GKENetworkParamSet
객체가 하나만 있는지 확인합니다. - 각 네트워크 객체가 서로 다른
GKENetworkParamSet
객체를 참조하는지 확인합니다. Device
네트워크를 사용하는 특정 서브넷으로 생성된 네트워크 객체가 보조 범위가 있는 다른 네트워크와 동일한 노드에서 사용되지 않는지 확인합니다. 런타임에서만 이를 확인할 수 있습니다.- 노드 풀에 할당된 여러 보조 범위에 IP 주소가 겹치지 않는지 확인합니다.
GKE에서 멀티 네트워킹 매개변수 문제 해결
클러스터 및 노드 풀을 만들 때 Google Cloud는 유효한 다중 네트워킹 매개변수만 허용되는지 확인하기 위해 특정 검사를 구현합니다. 이렇게 하면 클러스터에 네트워크가 올바르게 설정됩니다.
다중 네트워크 워크로드를 만들지 못한 경우 포드 상태와 이벤트를 확인하여 자세한 정보를 확인할 수 있습니다.
kubectl describe pods samplepod
출력은 다음과 비슷합니다.
Name: samplepod
Namespace: default
Status: Running
IP: 192.168.6.130
IPs:
IP: 192.168.6.130
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal NotTriggerScaleUp 9s cluster-autoscaler pod didn't trigger scale-up:
Warning FailedScheduling 8s (x2 over 9s) default-scheduler 0/1 nodes are available: 1 Insufficient networking.gke.io.networks/my-net.IP. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod
다음은 포드 생성 실패의 일반적인 이유입니다.
- 다중 네트워킹 리소스 요구사항이 충족되지 않아 포드를 예약할 수 없습니다.
- 지정된 네트워크를 식별할 수 없습니다.
Kubernetes 네트워크 생성 문제 해결
네트워크를 성공적으로 만들면 구성된 네트워크에 액세스해야 하는 노드에 네트워크 상태 주석이 추가됩니다.
주석을 관찰하려면 다음 명령어를 실행합니다.
kubectl describe node NODE_NAME
NODE_NAME
을 허브 이름으로 바꿉니다.
출력은 다음과 비슷합니다.
networking.gke.io/network-status: [{"name":"default"},{"name":"dp-network"}]
출력에 노드에서 사용할 수 있는 각 네트워크가 나열됩니다. 노드에 예상 네트워크 상태가 표시되지 않으면 다음을 수행합니다.
노드가 네트워크에 액세스할 수 있는지 확인
네트워크가 노드의 네트워크 상태 주석에 표시되지 않으면 다음을 수행합니다.
- 노드가 다중 네트워킹에 대해 구성된 풀의 일부인지 확인합니다.
- 노드 인터페이스에 구성 중인 네트워크에 대한 인터페이스가 있는지 확인합니다.
- 노드의 네트워크 상태가 누락되고 네트워크 인터페이스가 하나만 있는 경우에도 다중 네트워킹이 사용 설정된 노드 풀을 만들어야 합니다.
- 구성 중인 네트워크의 인터페이스가 노드에 포함되어 있지만 네트워크 상태 주석에 표시되지 않으면
Network
및GKENetworkParamSet
(GNP) 리소스를 확인합니다.
Network
및 GKENetworkParamSet
리소스 확인
Network
및 GKENetworkParamSet
(GNP) 리소스 상태에는 구성 오류를 보고하는 조건 필드가 포함됩니다. GNP는 다른 리소스의 유효성에 의존하지 않으므로 먼저 GNP를 확인하는 것이 좋습니다.
조건 필드를 검사하려면 다음 명령어를 실행합니다.
kubectl get gkenetworkparamsets GNP_NAME -o yaml
GNP_NAME
을 GKENetworkParamSet
리소스 이름으로 바꿉니다.
Ready
조건이 true이면 구성이 유효하고 출력은 다음과 유사합니다.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
...
spec:
podIPv4Ranges:
rangeNames:
- sec-range-blue
vpc: dataplane
vpcSubnet: subnet-dp
status:
conditions:
- lastTransitionTime: "2023-06-26T17:38:04Z"
message: ""
reason: GNPReady
status: "True"
type: Ready
networkName: dp-network
podCIDRs:
cidrBlocks:
- 172.16.1.0/24
Ready
조건이 false이면 출력에 이유가 표시되고 다음과 유사합니다.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
...
spec:
podIPv4Ranges:
rangeNames:
- sec-range-blue
vpc: dataplane
vpcSubnet: subnet-nonexist
status:
conditions:
- lastTransitionTime: "2023-06-26T17:37:57Z"
message: 'subnet: subnet-nonexist not found in VPC: dataplane'
reason: SubnetNotFound
status: "False"
type: Ready
networkName: ""
유사한 메시지가 표시되면 GNP가 올바르게 구성되었는지 확인합니다. 이미 구성되어 있다면 Google Cloud 네트워크 구성이 올바른지 확인합니다. Google Cloud 네트워크 구성을 업데이트한 후 GNP 리소스를 다시 만들어 재동기화를 수동으로 트리거해야 할 수 있습니다. 이는 Google Cloud API의 무한 폴링을 방지하기 위한 것입니다.
GNP가 준비되면 Network
리소스를 확인합니다.
kubectl get networks NETWORK_NAME -o yaml
NETWORK_NAME
을 Network
리소스 이름으로 바꿉니다.
유효한 구성의 출력은 다음과 유사합니다.
apiVersion: networking.gke.io/v1
kind: Network
...
spec:
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: dp-gnp
type: L3
status:
conditions:
- lastTransitionTime: "2023-06-07T19:31:42Z"
message: ""
reason: GNPParamsReady
status: "True"
type: ParamsReady
- lastTransitionTime: "2023-06-07T19:31:51Z"
message: ""
reason: NetworkReady
status: "True"
type: Ready
reason: NetworkReady
는 네트워크 리소스가 올바르게 구성되었음을 나타냅니다.reason: NetworkReady
는 네트워크 리소스가 특정 노드에서 사용 가능하거나 사용 중이라는 의미는 아닙니다.- 구성 오류 또는 오류가 있는 경우 조건의
reason
필드에서 문제의 정확한 원인을 지정합니다. 이 경우 구성을 적절하게 조정합니다. - GKE는 parametersRef 필드가 클러스터에 있는
GKENetworkParamSet
리소스로 설정된 경우 ParamsReady 필드를 채웁니다.GKENetworkParamSet
유형 parametersRef를 지정했지만 조건이 표시되지 않으면 이름, 종류, 그룹이 클러스터 내에 있는 GNP 리소스와 일치하는지 확인합니다.