Kubernetes 네트워킹이란 무엇인가요?

알고이 알프스에서 혼자 하이킹하는 남자

작성자

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Kubernetes 네트워킹이란 무엇인가요?

Kubernetes 네트워킹은 컨테이너화된 애플리케이션의 통신, 확장성, 보안, 외부 액세스를 지원하는 네트워크 인프라를 제공합니다.

네트워크는 복잡하며, Kubernetes 클러스터의 내부(예: 파드, 노드, 컨테이너, 서비스)와 외부(예: 외부 트래픽)에 있는 모든 주요 구성 요소 간의 통신을 포함합니다.

이러한 구성 요소는 다음과 같은 별개의 네트워킹 방법 네 가지를 사용하여 통신합니다.

1. 컨테이너 간 네트워킹

2. 파드 간 네트워킹

3. 파드와 서비스 간 네트워킹

4. 외부와 서비스 간 네트워킹

고속도로 조감도

클라우드에 집중 


AI 시대의 멀티클라우드 설정을 최적화하는 방법에 대한 전문가의 안내가 담긴 주간 Think 뉴스레터를 받아보세요.

쿠버네티스란 무엇인가요?

Kubernetes라는 이름은 조타수 또는 조종사를 의미하는 그리스어에서 유래했습니다. Google의 내부 컨테이너 오케스트레이션 플랫폼인 Borg를 기반으로 하는 Kubernetes는 2014년에 오픈 소스 도구로 대중에게 소개되었습니다.

같은 해에 Google은 클라우드 네이티브 컴퓨팅의 벤더 중립적인 오픈 소스 허브인 Cloud Native Computing Foundation에 Kubernetes를 기부했습니다. 그 이후로 Kubernetes는 전 세계적으로 컨테이너 기반 워크로드를 실행하는 데 가장 널리 사용되는 컨테이너 오케스트레이션 도구가 되었습니다.

"k8s" 또는 "kube"라고도 하는 Kubernetes는 코드와 모든 종속성을 패키지로 묶는 소프트웨어의 표준 단위인 컨테이너 관리를 자동화하도록 명시적으로 설계되었습니다. 해당 오케스트레이션 도구는 온프레미스, 프라이빗 클라우드, 퍼블릭 클라우드 또는 하이브리드 클라우드 등 어떤 인프라 환경에서도 빠르고 안정적으로 실행할 수 있다는 점에서 높은 평가를 받고 있습니다.

물리적 하드웨어를 가상화하는 가상 머신(VM)과 달리 컨테이너는 운영 체제(예: Linux 또는 Windows)를 가상화합니다. 각 컨테이너에는 애플리케이션의 라이브러리와 종속성만 담겨 있습니다. 컨테이너는 호스트와 동일한 운영 체제 커널을 공유하므로 가볍고 빠르며 이동성이 뛰어난 것으로 간주됩니다.

Kubernetes와 그 서비스, 지원, 도구의 에코시스템은 현대 클라우드 인프라 및 애플리케이션 현대화를 위한 기반이 되었습니다. Amazon Web Services (AWS), Google, Microsoft, IBM, Red Hat을 비롯한 모든 주요 클라우드 제공업체는 자사의 클라우드 플랫폼 내에 Kubernetes를 통합하여 서비스형 플랫폼(PaaS)서비스형 인프라(IaaS) 기능을 강화하고 있습니다.

NS1 Connect

IBM NS1 Connect

IBM NS1 Connect로 네트워크 복원력을 강화하세요. 이 비디오에서는 애플리케이션 복원력과 성능을 위한 IBM NS1 Connect의 가치에 대해 설명합니다.

Kubernetes 아키텍처

Kubernetes 아키텍처는 다음과 같은 기본 구성 요소로 이뤄져 있습니다.

클러스터

Kubernetes 클러스터는 컨테이너형 애플리케이션을 실행하기 위해 함께 작동하는 물리적 또는 가상 머신(노드)의 집합입니다. 클러스터는 Kubernetes 아키텍처의 기초를 형성합니다.

마스터 노드

마스터 노드는 단일 컴퓨팅 호스트(가상 또는 물리적 머신 중 하나)를 나타냅니다. 이들은 Kubernetes 제어 플레인 구성 요소를 호스팅하고 애플리케이션 예약 및 확장을 담당합니다.

마스터 노드는 Kubernetes 클러스터에서 모든 컴퓨팅, 네트워크, 스토리지 리소스를 관리함으로써 컨테이너형 애플리케이션과 서비스가 클러스터의 작업자 노드에 동등하게 배포되도록 합니다.

작업자 노드

작업자 노드는 컨테이너를 실행하고 마스터 노드가 할당한 모든 작업을 수행합니다. 또한 팟으로 그룹화된 애플리케이션 컨테이너를 호스팅합니다.

팟(Pod)

파드는 동일한 컴퓨팅 리소스와 네트워크를 공유하는 하나 이상의 컨테이너(예: Linux 또는 Docker)로 구성된 그룹으로, 확장성 단위로도 기능하는 클러스터 배포 단위입니다.

예를 들어 파드의 컨테이너에 트래픽 볼륨이 많이 발생하는 경우, Kubernetes는 해당 파드를 클러스터의 다른 노드로 복제할 수 있습니다. Kubernetes는 트래픽 볼륨이 감소하면 파드를 종료할 수도 있습니다.

기타 Kubernetes 구성 요소는 다음과 같습니다.

배포: Kubernetes의 배포는 애플리케이션 워크로드를 실행하기 위해 파드 집합을 관리합니다. 배포는 클러스터에서 실행되어야 하는 파드의 복제본 수를 식별합니다. 파드가 실패하면 배포가 새 파드를 생성합니다.

이 중요한 기능은 복제본 파드 수를 확장하고, 코드 업데이트를 롤링하고, 가용성을 유지하는 데 도움이 됩니다. 배포는 Kubernetes 전용 커맨드 라인 도구인 kubectl을 사용하여 수행됩니다.

서비스: Kubernetes 서비스는 논리적 파드 집합과 이에 액세스하는 방법을 정의하는 추상화 계층입니다. 서비스는 클러스터 내의 하나 이상의 파드에서 실행되는 네트워크 애플리케이션을 노출하며, 파드를 로드 밸런싱하기 위한 추상적인 방법을 제공합니다.

애플리케이션 프로그래밍 인터페이스(API) 서버: Kubernetes의 API 서버는 Kubernetes API(Kubernetes 클러스터를 관리, 생성, 구성하는 데 사용되는 인터페이스)를 노출하며 모든 명령과 쿼리의 시작점 역할을 합니다.

네트워킹 용어 및 개념

기본적인 컴퓨터 네트워킹은 케이블(유선) 또는 Wi-Fi를 통해 컴퓨팅 장치를 두 대 이상 연결하여 데이터를 공유하고 리소스를 교환하는 과정이 포함됩니다.

물리적 네트워킹에서 물리적 서버는 인터넷에 연결하기 위해 스위치, 라우터, 이더넷 케이블 등 물리적 네트워크 장비에 연결됩니다.

가상 네트워킹, 소프트웨어 정의 네트워크(SDN)에서는 가상 이더넷 장치 및 가상 인터페이스와 같은 구성 요소가 베어 메탈 서버 또는 가상 머신에 설치되어 인터넷에 연결됩니다. Kubernetes 배포는 SDN을 사용하여 클러스터 간의 네트워크 통신을 구성하고 관리합니다.

Kubernetes 네트워킹에 대해 자세히 알아보기 전에 기본 네트워킹 용어를 검토해 보는 것이 좋습니다.

네트워크 호스트
: 네트워크 호스트는 네트워크에 연결되어 네트워크의 다른 호스트나 노드에 정보, 애플리케이션 또는 서비스를 제공하는 모든 컴퓨터를 말합니다.

인터넷 프로토콜(IP) 주소:
IP 주소 는 IP를 사용하여 통신하는 네트워크에 연결된 모든 디바이스에 할당된 고유 번호입니다. 디바이스의 호스트 네트워크와 호스트 네트워크에서의 디바이스 위치를 식별합니다.

로컬 호스트:
로컬 호스트는 개인 IP 주소 역할을 하는 기본 호스트 이름으로, 사용하는 컴퓨터나 장치를 직접 가리킵니다.

포트:
포트는 네트워크 장치 간의 특정 연결을 식별합니다. 숫자는 각 포트를 식별합니다. 컴퓨터는 포트 번호를 사용하여 어떤 애플리케이션, 서비스 또는 프로세스가 특정 메시지를 받아야 하는지를 결정합니다.

네트워크 주소 변환(NAT):
NAT는 내부 또는 개인 주소를 공용 또는 글로벌 라우팅 가능한 IP 주소로 변경하여 안전한 인터넷 액세스를 가능하게 합니다. NAT를 사용하면 하나의 고유한 IP 주소를 사용하여 전체 컴퓨팅 장치 그룹을 나타낼 수 있습니다.

노드 에이전트: 
노드 에이전트는 호스트 시스템에서 애플리케이션 서버를 모니터하고 관리 요청을 서버로 라우팅하는 관리 에이전트입니다.

네트워크 네임스페이스:
네트워크 네임스페이스는 네트워크 디바이스 간에 격리를 제공하는 네트워크 인터페이스 및 라우팅 테이블 명령의 모음입니다.

프록시 또는 프록시 서버: 
프록시는 사용자와 인터넷 간의 게이트웨이를 제공합니다.

Kubernetes 네트워킹은 어떻게 작동하나요?

Kubernetes는 머신 클러스터에 분산된 네트워크 평면을 사용하여 분산 시스템을 실행하기 위해 만들어졌습니다. Kubernetes 클러스터 네트워킹은 구성 요소 간의 상호 연결성을 제공할 뿐 아니라, 소프트웨어 정의 네트워킹을 통해 데이터가 자유롭고 효율적으로 이동할 수 있는 원활한 환경을 조성합니다.

Kubernetes 네트워킹의 또 다른 특징은 플랫 네트워크 구조로, 이는 다른 하드웨어에 의존하지 않고도 모든 구성 요소를 연결할 수 있다는 뜻입니다. Kubernetes에서 클러스터의 모든 팟은 어떤 노드에서 실행 중인지에 관계없이 다른 모든 팟과 통신할 수 있습니다. 플랫 네트워크는 리소스를 공유하는 효율적인 방법을 제공하며 동적 포트 할당이 필요하지 않습니다.

전반적으로 Kubernetes 네트워킹은 복잡성을 추상화하여, 개발자와 운영자가 복잡한 네트워크 구성을 처리하는 대신 애플리케이션을 구축하고 유지 관리하는 데 집중할 수 있도록 합니다.

Kubernetes 네트워킹 모델

Kubernetes는 분산형 환경 전반에서 컨테이너형 애플리케이션을 오케스트레이션하는 데 따르는 문제를 해결하는 데 도움이 되는 네트워킹 모델을 제공합니다. 각 노드의 컨테이너 런타임은 네트워크 모델을 구현하고 다음 규칙을 준수합니다.

각 파드에는 클러스터 내에서 라우팅할 수 있는 자체 IP 주소가 있습니다. 이 기능을 사용하면 파드와 매핑 포트 간에 링크를 만들 필요가 없습니다.

각 파드에는 고유한 IP 주소가 있으므로 NAT가 필요하지 않습니다. 모든 파드는 NAT 없이 클러스터의 다른 모든 파드와 통신할 수 있습니다.

노드의 에이전트(예: 각 노드에서 실행되는 기본 노드 에이전트인 kubelet)는 해당 특정 노드의 모든 파드와 통신할 수 있습니다.

Kubernetes 네트워킹 모델은 다음과 같은 네 가지 기본 유형의 Kubernetes 통신에 적용됩니다.

1. 컨테이너 간 네트워킹

컨테이너는 Kubernetes 네트워크에서 가장 작은 단위입니다. 기본 네트워킹 구성에서 컨테이너는 로컬 호스트를 통해 단일 파드 내에서 통신합니다.

이러한 통신은 동일한 파드 내의 컨테이너가 스토리지, IP 주소, 포트 공간과 같은 네트워킹 리소스를 포함하는 동일한 네트워크 네임스페이스를 공유하기 때문에 가능합니다.

2. 파드 간 네트워킹

파드 간 통신에는 동일한 노드에 있는 파드 간의 통신과 서로 다른 노드에 있는 파드 간의 통신이 포함됩니다. Kubernetes 클러스터 내의 각 파드는 고유한 IP 주소를 가지므로 해당 파드가 있는 노드에 관계없이 파드 간에 직접 통신할 수 있습니다.

또한 각 Kubernetes 클러스터는 파드 IP 주소 외에 도메인 이름 시스템 서비스(DNS 서비스)를 자동으로 제공합니다. 파드 및 서비스에 이름이 할당되는 DNS 서비스는 관리자가 읽기 쉬운 이름을 생성하여 서비스 검색을 위한 가벼운 메커니즘을 제공합니다.

3. 파드와 서비스 간 네트워킹

Kubernetes의 서비스는 논리적 팟 집합을 정의하고 해당 팟에 대한 외부 트래픽 노출, 로드 밸런싱, 서비스 검색을 가능하게 하는 추상화입니다. 서비스는 팟과 서비스 간 및 외부와 서비스 간 통신을 모두 가능하게 합니다.

Kubernetes 네트워킹 모델에 따르면 팟 IP 주소는 임시적입니다. 따라서 팟이 충돌하거나 삭제되고 그 자리에 새 팟이 생성되면, 새 팟은 새 IP 주소를 받을 가능성이 높습니다.

팟과 서비스 간 통신에서 ClusterIP는 팟 집합에 안정적인 가상 IP 주소를 제공하는 서비스 유형입니다. 이 내부 IP는 클러스터 내에서만 연결할 수 있으며 팟과 서비스 간의 내부 통신에 사용할 수 있습니다.

클러스터의 모든 노드에 설치된 kube-proxy는 호스트에서 네트워크 규칙을 유지 관리하고 서비스 및 팟의 변경 사항을 모니터링합니다. 팟이 생성되거나 파괴되면, kube-proxy는 해당 변경 사항을 반영하여 서비스 IP로 전송되는 트래픽이 올바르게 라우팅되도록 iptables(트래픽 라우팅을 위해 Linux 커널 방화벽에서 규칙을 생성하는 데 사용되는 유틸리티 프로그램)를 업데이트합니다.

4. 외부와 서비스 간 네트워킹

외부와 서비스 간 네트워킹은 외부 서비스 또는 데이터베이스와 같은 서비스를 Kubernetes 클러스터 외부에서 노출하고 액세스하는 것을 의미합니다.

Kubernetes는 클러스터로의 외부 트래픽을 용이하게 하는 여러 서비스를 다음과 같이 제공합니다.

ClusterIP: 
ClusterIP는 내부 통신을 위한 기본 Kubernetes 서비스이며, 외부 트래픽은 kube-proxy를 통해 액세스할 수 있습니다. ClusterIP는 노트북에서 서비스에 액세스하거나 서비스를 디버깅할 때 유용할 수 있습니다.

NodePort: 
NodePort는 각 노드 IP의 정적 포트에 서비스를 노출하여 클러스터 외부에서 서비스에 액세스할 수 있도록 합니다. NodePort는 외부와 서비스 간 네트워킹을 수행하는 가장 기본적인 방법이며 앱에 대한 공개 액세스를 테스트하는 등의 테스트 목적으로 자주 사용됩니다.

LoadBalancer:
외부와 서비스 네트워킹을 위한 표준인 LoadBalancer는 클라우드 제공업체의 로드 밸런서를 사용하여 서비스를 외부에 노출하고 서비스에 공용 IP 주소를 할당합니다. 그런 다음 외부 로드 밸런서의 트래픽이 백엔드 파드로 전달됩니다.

ExternalName:
 외부 이름 서비스를 사용하면 DNS 클러스터에 노출하지 않고 DNS 이름으로 외부 서비스에 액세스할 수 있습니다. 이러한 유형의 서비스는 클러스터 내에서 호스팅되지 않는 메시징 서비스와 같은 외부 서비스에 안정적인 DNS 이름을 제공하는 데 도움이 됩니다.

인그레스:
Kubernetes 인그레스는 클러스터 내의 서비스에 대한 외부 액세스를 둘러싼 라우팅 규칙 모음입니다. 인그레스 컨트롤러는 Kubernetes 서비스와 외부 서비스 간의 네트워크 브리지 역할을 하는 로드 밸런서입니다.

Kubernetes 네트워크 정책

Kubernetes 네트워크 정책은 Kubernetes 네트워킹에서 필수적인 역할을 하는 애플리케이션 구성입니다. 이러한 정책을 통해 관리자와 개발자는 파드 간 또는 파드와 다른 네트워크 엔드포인트 간의 통신 방식을 지정하는 규칙을 정의할 수 있습니다.

네트워크 정책은 Kubernetes 네트워크 정책 API를 사용하여 적용되며 다음과 같은 기본 구성 요소로 이뤄집니다.

파드 셀렉터:
파드 셀렉터는 레이블과 셀렉터를 기반으로 정책이 적용될 파드를 지정합니다.

인그레스:
인그레스는 파드로 들어오는 트래픽에 대한 규칙을 정의합니다.

이그레스:
이그레스는 파드에서 외부로 나가는 트래픽에 대한 규칙을 정의합니다.

Kubernetes 네트워크 정책은 어떤 파드가 서로 통신할 수 있는지를 제어하는 규칙을 정의하여 보안 정책을 정의하고 관리하는 데 도움을 줌으로써 무단 액세스를 방지하고 악의적인 공격을 차단합니다.

또한 네트워크 정책은 파드와 서비스 간의 격리를 보장하여 해당 파드 또는 서비스만 허용된 피어 집합과 통신할 수 있도록 합니다. 예를 들어 DevOps 또는 다른 팀이 동일한 Kubernetes 클러스터를 공유하면서도 서로 다른 프로젝트를 진행하는 멀티 테넌시 상황에서는 격리가 중요합니다.

특정 규정 준수 요구 사항이 있는 회사의 경우 네트워크 정책은 네트워크 액세스 제어를 지정하고 시행하는 데 도움이 됩니다. 이는 규제 표준을 충족하는 데 도움을 주고 클러스터가 조직 정책을 엄수하도록 보장합니다.

컨테이너 네트워크 인터페이스(CNI) 및 네트워크 플러그인

컨테이너 네트워크 인터페이스(CNI)는 Kubernetes 네트워킹과 관련된 또 다른 필수 기능입니다. Cloud Native Computing Foundation이 생성 및 유지 관리하고 Kubernetes와 기타 컨테이너 런타임(RedHat OpenShift 및 Apache Mesos 등)에서 사용하는 CNI는 네트워크 플러그인이 컨테이너 네트워킹을 활성화하는 방법을 정의하는 표준화된 사양 및 API 집합입니다.

CNI 플러그인은 동일 노드 내와 노드 간 모두에서 파드 간 통신이 가능하도록 IP 주소 할당, 네트워크 네임스페이스 생성, 네트워크 라우트 설정 등의 작업을 수행합니다.

Kubernetes는 기본 CNI를 제공하지만, Calico, Flannel, Weave를 비롯한 수많은 서드파티 CNI 플러그인은 컨테이너 기반 네트워킹 환경에서 구성 및 보안을 처리하도록 설계되었습니다.

오버레이 네트워크 또는 직접 라우팅과 같이 각각 다른 기능과 네트워킹 접근 방식을 가질 수 있지만, 모두 Kubernetes와 호환되는 CNI 사양을 준수합니다.

Kubernetes 튜토리얼

Kubernetes로 작업을 시작하거나 Kubernetes 및 Kubernetes 에코시스템 도구로 기존 기술을 향상시키고 싶다면 다음 튜토리얼 중 하나를 체험해 보십시오.

관련 솔루션
네트워킹 솔루션

IBM의 네트워킹 솔루션은 오늘날의 디지털 비즈니스에 맞게 조정된 고성능 애플리케이션 중심 연결성을 제공합니다.

네트워킹 솔루션 살펴보기
IBM Cloud 네트워크 보안

IBM Cloud 네트워크 보안을 통해 악의적인 활동으로부터 클라우드 인프라와 서버를 보호하세요.

클라우드 네트워크 보안 살펴보기
IBM Cloud

IBM Cloud는 규제 대상 산업을 위해 설계된 엔터프라이즈 클라우드 플랫폼으로, AI를 지원하는 안전한 개방형 하이브리드 솔루션을 제공합니다.

클라우드 솔루션 살펴보기
다음 단계 안내

최첨단 DNS 관리 및 클라우드 네트워킹 솔루션으로 비즈니스 역량을 강화하세요. IBM의 선도적인 서비스를 통해 애플리케이션의 안정성을 개선하고 네트워크 성능을 최적화하세요.

클라우드 네트워킹 솔루션 살펴보기 DNS Services 알아보기