네트워크 요구사항

이 문서에서는 베어메탈용 GKE를 설치하고 운영하기 위한 네트워킹 요구사항을 개략적으로 설명합니다.

외부 네트워크 요구사항

베어메탈용 GKE는 운영을 위해 인터넷 연결이 필요합니다. 베어메탈용 GKE는 Container Registry에서 클러스터 구성요소를 검색하고 클러스터는 Connect를 통해 등록됩니다.

HTTPS, 가상 사설망(VPN) 또는 Dedicated Interconnect 연결을 통해 공개 인터넷을 사용하여 Google에 연결할 수 있습니다.

관리 워크스테이션 및 클러스터 노드에 사용 중인 머신이 프록시 서버를 사용하여 인터넷에 액세스하는 경우 프록시 서버에서 특정 연결이 허용되어야 합니다. 자세한 내용은 프록시 뒤에 설치의 기본 요건 섹션을 참조하세요.

내부 네트워크 요구사항

베어메탈용 GKE는 클러스터 노드 간의 계층 2 또는 계층 3 연결로 작동할 수 있습니다. 부하 분산기 노드는 제어 영역 노드 또는 전용 노드 집합이 될 수 있습니다. 자세한 내용은 부하 분산기 선택 및 구성을 참조하세요.

MetalLB가 포함된 번들 계층 2 부하 분산(spec.loadBalancer.mode: bundledspec.loadBalancer.type: layer2)을 사용하는 경우 부하 분산기 노드에 계층 2 인접성이 필요합니다. 부하 분산기를 제어 영역 노드에서 실행하든 전용 부하 분산 노드 집합에서 실행하든 계층 2 인접성 요구사항이 적용됩니다. BGP를 사용한 번들 부하 분산은 계층 3 프로토콜을 지원하므로 엄격한 계층 2 인접성이 필요하지 않습니다.

부하 분산기 머신 요구사항은 다음과 같습니다.

  • 번들 계층 2 부하 분산의 경우 특정 클러스터의 모든 부하 분산기가 동일한 계층 2 도메인에 있습니다. 제어 영역 노드도 동일한 계층 2 도메인에 있어야 합니다.
  • 번들 계층 2 부하 분산의 경우 모든 가상 IP 주소(VIP)가 부하 분산기 머신 서브넷에 있고 서브넷의 게이트웨이로 라우팅할 수 있어야 합니다.
  • 사용자가 인그레스 부하 분산기 트래픽을 허용해야 합니다.

포드 네트워킹

베어메탈용 GKE 1.7.0 이상 버전을 사용하면 노드당 최대 250개의 포드를 구성할 수 있습니다. Kubernetes는 각 포드가 고유 IP 주소를 가질 수 있도록 각 노드에 클래스 없는 도메인 간 라우팅(CIDR) 블록을 할당합니다. CIDR 블록의 크기는 노드당 최대 포드 수에 해당합니다. 다음 표에는 노드당 구성된 최대 포드를 기준으로 Kubernetes가 각 노드에 할당하는 CIDR 블록의 크기가 나와 있습니다.

노드당 최대 포드 노드당 CIDR 블록 IP 주소 수
32 /26 64
33 – 64 /25 128
65 – 128 /24 256
129 - 250 /23 512

노드당 250개 포드를 실행하려면 Kubernetes가 각 노드에 /23 CIDR 블록을 예약해야 합니다. 클러스터가 clusterNetwork.pods.cidrBlocks 필드에 기본값 /16을 사용한다고 가정하면 클러스터의 한도는 (2(23-16))=128개 노드가 됩니다. 이 한도를 초과하여 클러스터를 확장하려면 clusterNetwork.pods.cidrBlocks의 값을 늘리거나 nodeConfig.podDensity.maxPodsPerNode의 값을 낮추면 됩니다. 이 방법에는 몇 가지 단점이 있습니다.

고가용성을 가진 단일 사용자 클러스터 배포

다음 다이어그램은 단일 네트워크 구성에서 베어메탈용 GDCV의 여러 주요 네트워킹 개념을 보여줍니다.

베어메탈용 GKE 일반 네트워크 구성

네트워크 요구사항을 충족하려면 다음 정보를 고려하세요.

  • 제어 영역 노드는 부하 분산기를 실행하며, 모두 레이어 2 연결이 있으며, 작업자 노드를 포함한 다른 연결에는 레이어 3 연결만 필요합니다.
  • 구성 파일은 워커 노드 풀의 IP 주소를 정의합니다. 구성 파일은 다음과 같은 목적으로 VIP를 정의합니다.
    • 서비스
    • 인그레스
    • Kubernetes API를 통한 제어 영역 액세스
  • Google Cloud 연결이 필요합니다.

포트 사용량

이 섹션에서는 클러스터 및 부하 분산기 노드에서 UDP 및 TCP 포트를 사용하는 방법을 보여줍니다.

제어 영역 노드

프로토콜Direction포트 범위용도사용 주체
UDP인바운드6081GENEVE 캡슐화자체
TCP인바운드22관리자 클러스터 노드 프로비저닝 및 업데이트관리자 워크스테이션
TCP인바운드6444Kubernetes API 서버전체
TCP인바운드2379 - 2380etcd 서버 클라이언트 APIkube-apiserver, etcd
TCP인바운드10250API kubelet자체 및 제어 영역
TCP인바운드10251kube-scheduler자체
TCP인바운드10252kube-controller-manager자체
TCP인바운드10256노드 상태 점검전체
TCP모두4240CNI 상태 확인전체

워커 노드

프로토콜Direction포트 범위용도사용 주체
TCP인바운드22사용자 클러스터 노드 프로비저닝 및 업데이트관리자 클러스터 노드
UDP인바운드6081GENEVE 캡슐화자체
TCP인바운드10250API kubelet자체 및 제어 영역
TCP인바운드10256노드 상태 점검전체
TCP인바운드30000~32767서비스 NodePort자체
TCP모두4240CNI 상태 확인전체

부하 분산기 노드

프로토콜Direction포트 범위용도사용 주체
TCP인바운드22사용자 클러스터 노드 프로비저닝 및 업데이트관리자 클러스터 노드
UDP인바운드6081GENEVE 캡슐화자체
TCP인바운드443*클러스터 관리전체
TCP모두4240CNI 상태 확인전체
TCP인바운드7946메탈 LB 상태 확인부하 분산기 노드
UDP인바운드7946메탈 LB 상태 확인부하 분산기 노드
TCP인바운드10256노드 상태 점검전체

* 이 포트는 controlPlaneLBPort 필드를 사용하여 클러스터 구성 파일에 구성할 수 있습니다.

멀티 클러스터 포트 요구사항

멀티 클러스터 구성에서 추가된 클러스터에 다음 포트가 포함되어야 관리자 클러스터와 통신할 수 있습니다.

프로토콜Direction포트 범위용도사용 주체
TCP인바운드22클러스터 노드 프로비저닝 및 업데이트모든 노드
TCP인바운드443*추가된 클러스터의 Kubernetes API 서버제어 영역 및 부하 분산기 노드

* 이 포트는 controlPlaneLBPort 필드를 사용하여 클러스터 구성 파일에 구성할 수 있습니다.

방화벽 포트 구성

Red Hat Enterprise Linux(RHEL) 또는 CentOS에서는 베어메탈용 GKE 실행을 위해 firewalld를 사용 중지할 필요가 없습니다. firewalld를 사용하려면 이 페이지의 포트 사용량에 설명된 대로 제어 영역, 작업자, 부하 분산기 노드에서 사용하는 UDP 및 TCP 포트를 열어야 합니다. 다음 예시 구성에서는 firewalld 명령줄 유틸리티인 firewall-cmd를 사용하여 포트를 여는 방법을 보여줍니다. 루트 사용자로 명령어를 실행해야 합니다.

제어 영역 노드 구성 예시

다음 명령어 블록은 제어 영역 노드를 실행하는 서버에서 필요한 포트를 여는 방법의 예시를 보여줍니다.

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250-10252/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=2379-2380/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

PODS_CIDRclusterNetwork.pods.cidrBlocks 필드에 구성된 포드에 예약된 CIDR 블록으로 바꿉니다. 포드의 기본 CIDR 블록은 192.168.0.0/16입니다.

워커 노드 예시 구성

다음 명령어 블록은 워커 노드를 실행하는 서버에서 필요한 포트를 여는 방법을 보여줍니다.

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

PODS_CIDRclusterNetwork.pods.cidrBlocks 필드에 구성된 포드에 예약된 CIDR 블록으로 바꿉니다. 포드의 기본 CIDR 블록은 192.168.0.0/16입니다.

부하 분산기 노드 예시 구성

다음 명령어 블록은 부하 분산기 노드를 실행하는 서버에서 필요한 포트를 여는 방법의 예시를 보여줍니다.

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=7946/tcp
firewall-cmd --permanent --zone=public --add-port=7946/udp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

PODS_CIDRclusterNetwork.pods.cidrBlocks 필드에 구성된 포드에 예약된 CIDR 블록으로 바꿉니다. 포드의 기본 CIDR 블록은 192.168.0.0/16입니다.

포트 구성 확인

포트 구성을 확인하려면 제어 영역, 작업자, 부하 분산기 노드에서 다음 단계를 따르세요.

  1. 다음 Network Mapper 명령어를 실행하여 어떤 포트가 열려 있는지 확인합니다.

    nmap localhost
    
  2. 다음 명령어를 실행하여 firewalld 구성 설정을 가져옵니다.

    firewall-cmd --zone=public --list-all-policies
    firewall-cmd --zone=public --list-ports
    firewall-cmd --zone=public --list-services
    firewall-cmd --zone=k8s-pods --list-all-policies
    firewall-cmd --zone=k8s-pods --list-ports
    firewall-cmd --zone=k8s-pods --list-services
    
  3. 필요한 경우 이전 섹션의 명령어를 다시 실행하여 노드를 올바르게 구성합니다. 루트 사용자로 명령어를 실행해야 할 수 있습니다.