Kubernetes(K8s)는 컨테이너화된 애플리케이션과 워크로드의 배포, 확장 및 관리를 자동화하고 오케스트레이션하는 오픈 소스 플랫폼입니다. 온프레미스, 클라우드, 엣지 등 어떤 환경에서든 컨테이너로 실행되는 앱에 유연성, 확장성, 안정성, 고가용성 및 이식성이 기본 제공되는 컴퓨팅 인프라를 제공합니다.

Kubernetes란 무엇인가요?

Kubernetes는 배포, 부하 분산, 수평적 확장, 롤아웃 및 롤백, 자가 복구 등 컨테이너화된 워크로드를 대규모로 관리할 때 필요한 가장 일반적인 작업을 자동화합니다.

많은 조직이 이미 일부 또는 대부분의 애플리케이션을 프로덕션 환경에서 Kubernetes로 운영하고 있으며, 도입을 검토 중인 조직도 있습니다. 이러한 인기에 힘입어 Kubernetes는 컨테이너 오케스트레이션 및 관리 분야의 사실상 표준으로 자리 잡았습니다.

Kubernetes의 이점

Kubernetes는 다음과 같은 이점을 제공하기 때문에 빠르게 도입되고 있습니다:

  • 애플리케이션 릴리스 수명 주기를 가속화하고 간소화
  • 퍼블릭, 프라이빗, 하이브리드 클라우드 및 멀티클라우드 환경 전반에서 워크로드 이동성 지원
  • 리소스 활용 효율성 향상
  • 확장성과 프로덕션 준비 상태를 더 쉽게 달성할 수 있도록 지원
  • 비즈니스 SLA를 충족하도록 환경 최적화

Kubernetes 및 마이크로서비스

기존 모놀리식 애플리케이션을 결합도가 낮은 더 작은 구성 요소인 마이크로서비스로 리팩터링하면 새로운 앱 기능과 업데이트를 더 빠르게 출시하고 더 쉽게 확장할 수 있어 비즈니스 민첩성이 향상됩니다. 클라우드 네이티브 마이크로서비스 아키텍처를 도입하려면 기반 컴퓨팅 인프라도 발전해야 하므로, 마이크로서비스를 실행하는 가장 효율적인 방법 중 하나로 물리적 시스템과 가상 머신에서 컨테이너로 전환하는 추세가 나타나고 있습니다.

마이크로서비스와 컨테이너의 수가 증가함에 따라 컨테이너 관리를 자동화해야 할 필요성도 커집니다. 바로 이 지점에서 Kubernetes가 중요한 역할을 합니다.

Kubernetes란 무엇인가요?

K8s로도 줄여 부르는 Kubernetes는 컨테이너화된 애플리케이션과 워크로드의 배포, 확장 및 관리를 자동화하고 오케스트레이션하는 오픈 소스 플랫폼입니다. 온프레미스, 클라우드, 엣지 등 모든 환경에서 컨테이너로 실행되는 앱을 위해 유연성, 확장성, 안정성, 고가용성 및 이식성이 기본 제공되는 컴퓨팅 인프라를 제공합니다.

Kubernetes는 배포, 부하 분산, 수평적 확장, 롤아웃 및 롤백, 자가 복구 등 컨테이너화된 워크로드를 대규모로 관리할 때 필요한 가장 일반적인 작업을 자동화합니다.

많은 조직이 이미 일부 또는 대부분의 애플리케이션에 Kubernetes를 프로덕션 환경에서 사용하고 있으며, 도입을 검토 중인 조직도 있습니다. 이러한 인기에 힘입어 Kubernetes는 컨테이너 오케스트레이션 및 관리의 사실상 표준으로 자리 잡았습니다.

Kubernetes의 이점

Kubernetes는 다음과 같은 이점을 제공하기 때문에 빠르게 도입되고 있습니다:

  • 애플리케이션 릴리스 수명 주기를 가속화하고 간소화
  • 퍼블릭, 프라이빗 및 하이브리드 클라우드와 멀티클라우드 환경 전반에서 워크로드 이동성 지원
  • 리소스 활용 효율성 향상
  • 확장성과 프로덕션 준비 상태를 더 쉽게 달성할 수 있도록 지원
  • 비즈니스 SLA를 충족하도록 환경 최적화

Kubernetes 및 마이크로서비스

기존의 모놀리식 애플리케이션을 마이크로서비스(https://www.f5.com/glossary/microservices-architecture)라고 하는 더 작고 느슨하게 결합된 구성 요소로 리팩터링하면 새로운 앱 기능과 업데이트를 더 빠르게 출시하고 더 쉽게 확장할 수 있어 비즈니스 민첩성이 향상됩니다. 클라우드 네이티브 마이크로서비스 아키텍처를 도입하려면 기반 컴퓨팅 인프라도 발전해야 하므로, 마이크로서비스를 실행하는 가장 효율적인 방법 중 하나로 물리적 시스템과 가상 머신에서 컨테이너로 전환하는 추세가 나타나고 있습니다.

마이크로서비스와 컨테이너의 수가 증가함에 따라 컨테이너 관리를 자동화해야 할 필요성도 커집니다. 바로 이때 Kubernetes가 중요한 역할을 합니다.

Kubernetes와 Docker 비교

Kubernetes는 컨테이너화된 애플리케이션을 대규모로 오케스트레이션하고 실행하지만, 애플리케이션 코드를 배포 및 실행할 수 있는 컨테이너 형식으로 패키징하는 수단은 제공하지 않습니다(컨테이너 이미지에는 애플리케이션 코드와 필요한 런타임, 라이브러리 및 기타 소프트웨어 종속성이 포함됩니다). 또한 Kubernetes에서 파드를 실행하려면 모든 노드에 컨테이너 런타임이 설치되어 있어야 합니다. Kubernetes는 원래 Docker Engine을 컨테이너 런타임으로 사용했습니다. 하지만 Kubernetes 1.24부터는 컨테이너 런타임이 Container Runtime Interface(CRI)를 준수해야 하며, Docker Engine은 이를 준수하지 않습니다. 널리 사용되는 CRI 호환 컨테이너 런타임으로는 CRI-O와 containerd(원래 Docker 프로젝트)가 있습니다.

앱을 컨테이너로 패키징하려면 Docker와 같은 도구가 필요합니다. Docker는 컨테이너화된 앱을 빌드하고 공유하며 실행하는 데 가장 널리 사용되는 도구 중 하나입니다. 앱을 온프레미스와 클라우드(Kubernetes 환경 포함)에서 바로 실행하고 배포할 수 있는 이식 가능한 컨테이너 이미지로 패키징하는 과정을 간소화하고 자동화합니다. Docker로 패키징된 컨테이너는 containerd 및 CRI-O 런타임에서 기본적으로 실행할 수 있습니다.

Kubernetes 아키텍처

Kubernetes 플랫폼은 하나의 클러스터로 결합되어 컴퓨팅 리소스 풀을 공유하는 노드들로 구성됩니다. 각 클러스터는 Kubernetes 아키텍처에서 배포 가능한 최소 단위인 파드를 관리합니다. 파드에는 하나 이상의 애플리케이션 컨테이너가 포함됩니다. 여러 파드가 그룹화되어 서비스를 구성합니다. Kubernetes 클러스터 내부의 애플리케이션에는 외부에서 여러 가지 방법으로 액세스할 수 있으며, 그중 Ingress 컨트롤러는 가장 널리 사용되고 효율적인 방법 중 하나입니다.

쿠버네티스 클러스터

Kubernetes 환경의 구성 요소를 자세히 살펴보겠습니다:

Kubernetes 파드

Kubernetes 파드는 Kubernetes에 배포할 수 있는 가장 작은 실행 단위입니다. 파드는 앱 컨테이너 이미지(또는 여러 이미지)를 위한 ‘가상 호스트’로서 기존 앱의 물리적 서버나 가상 머신과 같은 역할을 하며, 동일한 컴퓨팅, 스토리지 및 네트워킹 리소스를 공유하는 하나 이상의 컨테이너를 캡슐화합니다. 따라서 이러한 컨테이너는 비교적 긴밀하게 결합되어 있다고 볼 수 있습니다. 파드는 Kubernetes 노드에 배포되어 실행됩니다.

Kubernetes 노드

Kubernetes 노드는 컴퓨팅 인프라의 최소 단위입니다. 노드는 Pod를 배포, 실행, 확장 및 관리하는 데 필요한 프로세서, 메모리, 스토리지 및 네트워킹 리소스를 할당하는 가상 머신 또는 물리적 서버일 수 있습니다. 여러 노드가 결합되어 클러스터를 구성합니다.

Kubernetes 클러스터

Kubernetes 클러스터는 통합된 컴퓨팅 리소스를 여러 Pod가 공유하는 노드 그룹입니다. 클러스터에는 두 가지 유형의 노드가 있습니다:

  • 워커 노드 – Pod에서 컨테이너화된 앱을 실행합니다
  • 마스터 노드 – 워커 노드와 파드를 조정하고 관리하는 Kubernetes 컨트롤 플레인을 실행합니다

일반적으로 Kubernetes 클러스터에는 고가용성과 내결함성을 위해 각 유형별로 둘 이상의 노드가 있습니다.

Kubernetes 배포

Kubernetes 디플로이먼트는 클러스터에서 앱을 파드의 복제본(또는 인스턴스) 집합으로 실행하는 방법을 설명합니다. 디플로이먼트는 다음을 정의합니다:

  • 실행할 Pod 복제본 수
  • Pod 업데이트를 점진적으로 배포하는 방법
  • Pod 복제본을 이전 상태로 롤백하는 방법
  • Pod 복제본을 수평으로 확장하는 방법

Kubernetes의 애플리케이션 연결

Kubernetes는 클러스터에서 실행되는 컨테이너화된 앱에 네트워크 연결을 제공하기 위해 IPv4/IPv6 듀얼 스택을 지원합니다. Kubernetes 클러스터 내 앱과 주고받는 통신 및 클러스터 내 서비스 간 통신은 레이어 4(IP 주소, 포트)와 레이어 7(호스트 이름, URI[Uniform Resource Identifier])에서 관리되며, 라우팅, 부하 분산, 보안, 모니터링 및 가시성 기능을 포함합니다.

Kubernetes 인그레스 컨트롤러

Kubernetes 네트워킹

In the Kubernetes 네트워킹 모델에서는 각 파드에 클러스터의 프라이빗 주소 풀에서 동적으로 할당된 고유한 IP 주소가 있습니다. 동일한 클러스터의 모든 노드에서 실행되는 모든 파드는 동일한 IP 네트워크에 속하며, 해당 네트워크를 통해 서로 통신할 수 있습니다. 파드 내의 여러 컨테이너는 루프백 인터페이스를 통해 서로 통신합니다.

Kubernetes 서비스

Kubernetes 서비스는 클러스터에서 하나 이상의 Pod로 실행되는 앱 또는 마이크로서비스에 네트워크를 통해 액세스할 수 있도록 합니다(즉, 앱 또는 마이크로서비스를 네트워크에 '노출'합니다). Kubernetes 서비스는 웹 서비스 제공과 같이 동일한 기능을 수행하도록 지정된 Pod의 논리적 그룹으로 앱을 나타냅니다. 서비스에 속한 모든 Pod에는 동일한 셀렉터(또는 레이블)가 적용되어 해당 서비스의 구성원임을 표시합니다. Kubernetes는 새 Pod가 배포되거나 실행 중인 Pod가 종료될 때 이 레이블을 사용하여 서비스에 속한 Pod 집합을 추적합니다.

Kubernetes 서비스는 정의된 연결 정책에 따라 클러스터 내에서 서로 통신할 수 있으며, Ingress 컨트롤러 등을 사용하여 클러스터 외부에서도 액세스할 수 있도록 설정할 수 있습니다.

Kubernetes 인그레스

Kubernetes Ingress API의 일부인 Ingress 객체를 사용하면 HTTP와 같은 레이어 7(애플리케이션 계층) 프로토콜을 통해 Kubernetes에서 실행 중인 애플리케이션을 외부에 노출할 수 있습니다. Ingress 게이트웨이와 Ingress 컨트롤러는 Ingress 객체를 제어하고 사용자와 애플리케이션 간의 통신(사용자-서비스 간 또는 남북 방향 연결)을 관리하도록 설계된 도구입니다.

Ingress 객체는 설계상 사용자 지정 요청 처리 정책을 제한적으로만 지원합니다. 예를 들어 보안 정책을 정의하여 연결할 수 없습니다. 따라서 많은 공급업체는 변화하는 고객 요구 사항을 충족하기 위해 사용자 지정 리소스 정의(CRD)를 사용하여 Ingress 컨트롤러의 기능을 확장합니다.

예를 들어, NGINX Ingress Controller는 Kubernetes 클러스터의 에지에서 API 게이트웨이, 로드 밸런서 및 Ingress 기능의 성능, 복원력, 가동 시간, 보안 및 관측 가능성을 향상하기 위해 사용자 정의 리소스(VirtualServer, VirtualServerRoute, TransportServer 및 Policy)를 정의합니다.

NGINX는 통신이 빠르고 안정적이며 안전하게 이루어지도록 로드 밸런싱, 인증, 권한 부여, 액세스 제어, 암호화, 관측 가능성 및 트래픽 분할(서킷 브레이커, A/B 테스트, 블루-그린 및 카나리 배포) 서비스를 제공합니다. 또한 빈번한 앱 릴리스를 지원하기 위해 NGINX 사용자 지정 리소스를 통해 멀티테넌트 개발 및 DevOps 팀 전반에서 셀프서비스 거버넌스를 구현할 수 있습니다.

Kubernetes Gateway API

The Gateway API는 Kubernetes의 서비스 네트워킹을 개선하고 표준화하기 위한 오픈 소스 프로젝트입니다. Kubernetes 커뮤니티에서 관리하는 Gateway API 사양은 Kubernetes Ingress API에서 발전했으며, 요청 처리에 대한 세분화된 정책을 정의하고 여러 팀과 역할에 구성 제어 권한을 위임하는 기능 등 프로덕션 환경에서 Ingress 리소스가 지닌 한계를 해결합니다.

NGINX의 Gateway API 구현에 대한 자세한 내용은 블로그의 NGINX Gateway Fabric에 대해 알아야 할 5가지에서 확인하세요.

서비스 메시

A 서비스 메시는 Kubernetes 클러스터 내 서비스 간 통신(서비스 간 연결 또는 동서 방향 연결)을 제어하는 인프라 계층입니다. 서비스 메시의 가장 일반적인 사용 사례로는 K8s 클러스터 내 서비스 간 통신에 대한 mTLS 인증/암호화 및 관측 가능성 확보가 있습니다.

통합 애플리케이션 제공에 대해 자세히 알아보세요. NGINX Gateway Fabric는 Ingress 컨트롤러와 서비스 메시 사용 사례를 하나의 도구로 효과적으로 결합하도록 설계되었습니다. 자세한 내용은 블로그의 NGINX Gateway Fabric 버전 1.0 발표에서 확인하세요.

Kubernetes 보안

Kubernetes 보안은 Kubernetes 클러스터 내에서 실행되는 인프라(온프레미스 및 클라우드 컴퓨팅 리소스, 네트워크 통신, 관리 플레인)와 애플리케이션을 보호하기 위한 다계층 접근 방식입니다.

인프라를 보호하려면 클라우드 및 온프레미스 구현 환경을 보호하기 위한 일반적인 보안 권장 사항, 튜토리얼 및 모범 사례를 따르세요.

애플리케이션의 보안을 강화하려면 엣지와 Kubernetes 클러스터 내부에 강력한 보안 제어를 구현하여 클러스터로 들어오고 나가는 모든 통신과 클러스터 내부의 모든 통신에 인증, 권한 부여, 액세스 제어, 암호화, 모니터링 및 가시성을 제공하고, 필요에 따라 웹 애플리케이션 방화벽과 서비스 거부 공격 방지 기능을 적용하세요.

Kubernetes 보안

블로그에서 Kubernetes 보안에 대해 자세히 알아보세요. 트래픽 관리 도구를 사용하여 Kubernetes를 보호하는 6가지 방법.

프로덕션 환경의 Kubernetes

Kubernetes 도입 초기에는 자체 구축(DIY) 방식이 주를 이루었지만, 많은 조직이 이를 구축하고 운영하기에는 복잡하고 어렵습니다. 이에 따라 조직들은 프로덕션 배포를 위해 다양한 기술 구성 요소를 통합하여 유지 관리 수명 주기를 간소화하고 하이브리드 및 멀티 클라우드 환경 전반에 배포할 수 있는 클라우드 관리형 Kubernetes 플랫폼과 사전 패키징된 Kubernetes 배포판을 도입하고 있습니다.

관리형 및 사전 패키징된 Kubernetes 플랫폼의 몇 가지 예는 다음과 같습니다:

클라우드 관리형 Kubernetes:

사전 패키징된 Kubernetes 배포판:

NGINX가 제공하는 지원

NGINX의 Kubernetes 네이티브 연결 및 보안 스택은 온프레미스, 클라우드 및 엣지에서 실행되는 Kubernetes 애플리케이션의 복잡성을 줄이고 가동 시간을 늘리며, 대규모 환경에서도 상세한 실시간 가시성을 제공하여 고객 경험을 개선하는 데 도움이 됩니다.

Kubernetes용 연결성 스택 – 하이브리드 멀티 클라우드 환경 전반에서 Kubernetes 앱을 최적화하고 확장하며 안전하게 보호하세요.

  • NGINX Ingress Controller – 분산된 Kubernetes 환경 전반에서 더 나은 비즈니스 SLA를 달성하고 대규모 애플리케이션의 상태와 성능에 대한 인사이트를 확보할 수 있도록 지원하는 통합 API 게이트웨이, 로드 밸런서 및 Ingress 컨트롤러입니다.
  • NGINX Gateway Fabric – 하이브리드 멀티클라우드 Kubernetes 환경 전반에서 앱, 서비스 및 API 연결을 간소화하는 통합 앱 딜리버리 패브릭입니다.
  • NGINX App Protect – 애플리케이션과 API를 레이어 7 공격으로부터 보호하도록 설계된 종합적인 WAF 보안 및 서비스 거부(DoS) 방어 솔루션입니다.

Get started by requesting your 30일 무료 평가판을 요청하여 NGINX App Protect WAF 및 DoS가 포함된 NGINX Ingress Controller를 시작해 보세요.