topics Kubernetes 네트워킹 Kubernetes 네트워킹이란 무엇인가요?
IBM Cloud Kubernetes Service 살펴보기
서로 다른 형태를 네트워크로 연결

게시: 2023년 11월 21일
기고자: Stephanie Susnjara, Ian Smalley

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

Kubernetes 네트워킹은 컨테이너형 애플리케이션의 통신, 확장성, 보안, 외부 액세스를 지원하는 네트워크 인프라를 제공합니다. 네트워크는 복잡하며, Kubernetes 클러스터의 내부(예: 팟, 노드, 컨테이너, 서비스)와 외부(예: 외부 트래픽)에 있는 모든 주요 구성 요소 간의 통신을 포함합니다.

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

1. 컨테이너 간 네트워킹

2. 팟 간 네트워킹

3. 팟과 서비스 간 네트워킹

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

애플리케이션 기반 컨테이너 탄력성 자동화

애플리케이션 성능을 보장하면서 시장 출시 속도를 높이려는 플랫폼 및 DevOps 엔지니어에게 적합합니다.

관련 내용

IBM 뉴스레터 구독하기

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

Kubernetes라는 이름은 조타수 또는 조종사를 의미하는 그리스어에서 유래했습니다. Google의 내부 컨테이너 오케스트레이션 플랫폼인 Borg를 기반으로 하는 Kubernetes는 2014년에 오픈 소스 도구로 대중에게 소개되었습니다. 같은 해에 Google은 클라우드 네이티브 컴퓨팅의 벤더 중립적인 오픈 소스 허브인 Cloud Native Computing Foundation(ibm.com 외부 링크)에 Kubernetes를 기부했습니다. 그 이후로 Kubernetes는 전 세계적으로 컨테이너 기반 워크로드를 실행하는 데 가장 널리 사용되는 컨테이너 오케스트레이션 도구가 되었습니다.

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

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

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

Kubernetes 아키텍처

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

클러스터

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

마스터 노드

마스터 노드는 단일 컴퓨팅 호스트(가상 또는 물리적 머신 중 하나)를 나타냅니다. 이들은 Kubernetes 제어 플레인 구성 요소를 호스팅하고 애플리케이션 예약 및 확장을 담당합니다. 마스터 노드는 Kubernetes 클러스터에서 모든 컴퓨팅, 네트워크, 스토리지 리소스를 관리함으로써 컨테이너형 애플리케이션과 서비스가 클러스터의 작업자 노드에 동등하게 배포되도록 합니다.

작업자 노드

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

팟(Pod)

팟은 동일한 컴퓨팅 리소스와 네트워크를 공유하는 하나 이상의 컨테이너(예: Linux 또는 Docker)로 구성된 그룹입니다. 확장성 단위로도 기능하는 클러스터 배포 단위입니다. 예를 들어 팟의 컨테이너에 트래픽 볼륨이 많이 발생하는 경우, Kubernetes는 해당 팟을 클러스터의 다른 노드로 복제할 수 있습니다. Kubernetes는 트래픽 볼륨이 감소하면 팟을 종료할 수도 있습니다.

추가 Kubernetes 구성 요소는 다음과 같습니다.

  • 배포: Kubernetes의 배포는 애플리케이션 워크로드를 실행하기 위해 팟 집합을 관리합니다. 배포는 클러스터에서 실행되어야 하는 팟의 복제본 수를 식별합니다. 팟이 실패하면 배포가 새 팟을 생성합니다. 이 중요한 기능은 복제본 팟 수를 확장하고, 코드 업데이트를 롤링하고, 가용성을 유지하는 데 도움이 됩니다. 배포는 쿠버네티스 전용 커맨드 라인 도구인 kubectl을 사용하여 수행됩니다. 
  • 서비스: Kubernetes 서비스는 논리적 팟 집합과 이에 액세스하는 방법을 정의하는 추상화 계층입니다. 서비스는 클러스터 내의 하나 이상의 팟에서 실행되는 네트워크 애플리케이션을 노출합니다. 팟을 로드 밸런싱하기 위한 추상적인 방법을 제공합니다. 
  • API 서버: Kubernetes의 API 서버는 Kubernetes API(Kubernetes 클러스터를 관리, 생성, 구성하는 데 사용되는 인터페이스)를 노출하며 모든 명령과 쿼리의 시작점 역할을 합니다.
네트워킹 용어 및 개념

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

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

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

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

  • 네트워크 호스트: 네트워크 호스트는 네트워크에 연결되어 네트워크의 다른 호스트나 노드에 정보, 애플리케이션 또는 서비스를 제공하는 모든 컴퓨터를 말합니다.
  • 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 에코시스템 도구로 기존 기술을 향상시키고 싶다면 다음 튜토리얼 중 하나를 체험해 보십시오.

Kubernetes 튜토리얼: 인증 실습

IBM Cloud® Kubernetes Service에서 클러스터 배포 및 운영에 대한 대화식 브라우저 기반 교육.다운로드 또는 구성이 필요하지 않습니다.

8 Kubernetes 팁과 요령 IBM Developer에 대한 Kubernetes 튜토리얼 Kubernetes를 사용하여 IBM Cloud에 마이크로서비스 앱 배포하기
관련 솔루션
IBM Cloud® Kubernetes Service

네이티브 Kubernetes 환경에서 안전한 고가용성 클러스터를 배포하십시오.

IBM Cloud Kubernetes Service 살펴보기

Red Hat OpenShift® on IBM Cloud®

Red Hat OpenShift on IBM Cloud를 통해 OpenShift 개발자는 빠르고 안전하게 엔터프라이즈 워크로드를 컨테이너화하여 Kubernetes 클러스터에 배포할 수 있습니다.

Red Hat OpenShift on IBM Cloud 살펴보기

IBM Cloud® Code Engine

완전 관리형 서버리스 플랫폼인 IBM Cloud Code Engine은 컨테이너, 애플리케이션 코드 또는 일괄 처리 작업을 완전 관리형 컨테이너 런타임에서 실행할 수 있게 해줍니다.

IBM Cloud Code Engine 살펴보기
리소스 개발자를 위한 IBM Cloud 교육

IBM Cloud Professional Developer 인증에 포함된 과정을 통해 Kubernetes 기술을 구축합니다.

쇼는 계속되어야 합니다

Red Hat® OpenShift® on IBM Cloud®로 예술 작품을 선보이는 학생들.

엔터프라이즈의 컨테이너

컨테이너는 어디서나 워크로드를 구축하고 관리할 수 있게 해주는 하이브리드 클라우드 전략의 일환입니다.

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

Kubernetes는 컨테이너형 애플리케이션의 배포, 관리, 확장을 예약하고 자동화하기 위한 컨테이너 오케스트레이션 플랫폼입니다.

컨테이너란 무엇인가요?

컨테이너는 애플리케이션 코드가 라이브러리 및 종속 요소와 함께 공통된 방식으로 패키징되어 어디서나 코드를 실행할 수 있도록 하는 실행 가능한 소프트웨어 단위입니다.

컨테이너 오케스트레이션이란 무엇인가요?

컨테이너 오케스트레이션은 컨테이너형 애플리케이션의 프로비저닝, 배포, 관리를 자동화하고 간소화합니다.

다음 단계 안내

IBM Cloud Kubernetes Service를 확인하고 무료로 클러스터를 받으십시오. 무료 IBM Cloud 계정을 생성하기만 하면 30일 동안 사용해 볼 수 있는 클러스터를 받을 볼 수 있습니다. 가격 옵션을 자세히 알아보고 싶으십니까? Kubernetes 클러스터를 구성하고 가격을 책정하여 견적을 받아 보십시오.

클러스터 무료로 받기 요금제 보기