쿠버네티스(K8s): 빠른 학습 가이드

쿠버네티스란 무엇인가?

쿠버네티스(Kubernetes)는 K8s로도 줄여서 불리며, 컨테이너화된 애플리케이션과 워크로드의 배포, 확장, 관리를 자동화하고 조율하기 위한 오픈 소스 플랫폼입니다. 온프레미스, 클라우드, 에지 등 모든 환경에서 컨테이너로 실행되는 앱에 내장된 유연성, 확장성, 안정성, 고가용성 및 이동성을 갖춘 컴퓨팅 인프라를 제공합니다.

쿠버네티스는 배포, 부하 분산, 수평적 확장, 롤아웃 및 롤백, 자체 복구를 포함하여 대규모 컨테이너화된 워크로드를 관리하는 데 관련된 가장 일반적인 작업을 자동화합니다.

많은 조직에서는 이미 일부 앱이나 대부분의 앱에 Kubernetes를 프로덕션에 사용하고 있으며, 다른 조직에서는 Kubernetes를 평가하고 있습니다. 쿠버네티스의 인기로 인해 쿠버네티스는 컨테이너 오케스트레이션 및 관리 분야의 사실상 표준이 되었습니다.

쿠버네티스의 이점

Kubernetes 도입이 급속히 확대되고 있는 이유는 다음과 같은 데 도움이 되기 때문입니다.

  • 애플리케이션 릴리스 수명 주기를 가속화하고 단순화합니다.
  • 퍼블릭, 프라이빗, 하이브리드 클라우드 및 멀티 클라우드 환경에서 워크로드 이동성을 활성화합니다.
  • 자원 활용의 효율성을 향상시키세요
  • 확장성과 프로덕션 준비성을 보다 쉽게 달성하세요
  • 비즈니스 SLA를 충족하기 위해 환경을 최적화하세요

쿠버네티스와 마이크로서비스

기존 모놀리스 애플리케이션을 더 작고 느슨하게 결합된 부분인 마이크로서비스 로 리팩토링하면 새로운 앱 기능과 업데이트를 더 빠르게 출시하고 더 쉽게 확장할 수 있으므로 비즈니스 민첩성이 향상됩니다. 클라우드 기반 마이크로서비스 아키텍처를 도입하면 기본 컴퓨팅 인프라를 발전시킬 필요성이 커지므로, 물리적 시스템과 가상 머신에서 컨테이너로의 전환이 마이크로서비스를 실행하는 가장 효율적인 방법 중 하나로 여겨집니다.

마이크로서비스와 컨테이너의 수가 늘어남에 따라, 컨테이너 관리를 자동화해야 할 필요성도 커집니다. 바로 여기서 쿠버네티스가 등장합니다.

쿠버네티스 대 도커

쿠버네티스는 컨테이너화된 앱을 대규모로 조율하고 실행합니다. 하지만 배포 및 실행을 위해 애플리케이션 코드를 컨테이너화된 포맷으로 패키징하는 수단을 제공하지는 않습니다(컨테이너 이미지에는 앱 코드와 필요한 런타임, 라이브러리, 기타 소프트웨어 종속성이 포함됨). 포드를 실행하려면 쿠버네티스에서 모든 노드에 컨테이너 런타임이 설치되어 있어야 합니다. 쿠버네티스는 원래 Docker Engine을 컨테이너 런타임으로 사용했습니다. 그러나 Kubernetes 1.24부터 컨테이너 런타임은 Docker Engine이 준수하지 않는 컨테이너 런타임 인터페이스(CRI)를 준수해야 합니다. 두 가지 인기 있는 CRI 호환 컨테이너 런타임은 CRI-O와 containerd(원래 Docker 프로젝트)입니다.

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

쿠버네티스 아키텍처

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

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

Kubernetes 포드

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

쿠버네티스 노드

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

쿠버네티스 클러스터

쿠버네티스 클러스터는 풀링된 컴퓨팅 리소스가 여러 포드에서 공유되는 노드 그룹입니다. 클러스터에는 두 가지 유형의 노드가 있습니다.

  • 워커 노드 - 포드에서 컨테이너화된 앱 실행
  • 마스터 노드 - 작업자 노드와 포드를 조정하고 관리하는 Kubernetes 제어 평면을 실행합니다.

일반적으로 Kubernetes 클러스터에는 높은 가용성과 장애 내구성을 위해 각 유형의 노드가 두 개 이상 있습니다.

쿠버네티스 배포

쿠버네티스 배포는 클러스터의 Pod 복제본(또는 인스턴스) 세트로 앱을 실행하는 방법을 설명합니다. 배포는 다음을 정의합니다.

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

쿠버네티스의 앱 연결

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

쿠버네티스 네트워킹

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

쿠버네티스 서비스

Kubernetes 서비스는 클러스터에서 하나 이상의 Pod로 실행되는 앱 또는 마이크로서비스를 네트워크에서 액세스할 수 있도록("노출") 합니다. 쿠버네티스 서비스는 동일한 기능(예: 웹 서비스)을 수행하는 지정된 포드의 논리적 그룹으로 앱을 나타냅니다. 서비스의 모든 포드에 동일한 선택기(또는 레이블)를 적용하여 해당 서비스에서의 멤버십을 표시합니다. 쿠버네티스는 새로운 Pod가 배포되거나 실행 중인 Pod가 종료될 때 서비스의 Pod 세트를 추적하기 위해 레이블을 사용합니다.

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

쿠버네티스 인그레스

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

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

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

NGINX는 통신이 빠르고 안정적이며 안전하도록 부하 분산, 인증, 권한 부여, 액세스 제어, 암호화, 관찰성 및 트래픽 분할(서킷 브레이커, A/B 테스트, 블루-그린 및 카나리아 배포) 서비스를 제공합니다. NGINX 사용자 정의 리소스는 빈번한 앱 릴리스를 지원하기 위해 다중 테넌트 개발 및 DevOps 팀에서 셀프 서비스 거버넌스를 지원합니다.

쿠버네티스 게이트웨이 API

Gateway API는 Kubernetes에서 서비스 네트워킹을 개선하고 표준화하기 위해 고안된 오픈 소스 프로젝트입니다. Kubernetes 커뮤니티에서 관리하는 Gateway API 사양은 Kubernetes Ingress API에서 발전하여 프로덕션 환경에서 Ingress 리소스의 제한을 해결하기 위해 개발되었습니다. 여기에는 요청 처리를 위한 세부적인 정책을 정의하고 여러 팀과 역할에 걸쳐 구성에 대한 제어를 위임하는 기능이 포함됩니다.

블로그의 NGINX Gateway Fabric에 대해 알아야 할 5가지 에서 NGINX의 Gateway API 구현에 대해 자세히 알아보세요.

서비스 메시

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

블로그의 NGINX Gateway Fabric 버전 1.0 발표에서 Ingress 컨트롤러와 서비스 메시 사용 사례를 하나의 도구로 효과적으로 결합하도록 설계된 NGINX Gateway Fabric을 통한 통합 앱 전송에 대해 자세히 알아보세요.

쿠버네티스 보안

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

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

보안 애플리케이션의 경우, 인증, 권한 부여, 액세스 제어, 암호화, 모니터링 및 가시성을 제공하기 위해 에지와 Kubernetes 클러스터 내에서 강력한 보안 제어를 구현하고, 선택적으로 웹 애플리케이션 방화벽과 서비스 거부 보호 기능을 클러스터 간 및 클러스터 간 모든 통신에 적용합니다.

프로덕션에서의 쿠버네티스

쿠버네티스 도입 초기에는 DIY(Do-It-Yourself) 방식이 지배적이었지만 많은 조직에서 구축하고 운영하는 것이 복잡하고 힘들었습니다. 이러한 이유로 조직에서는 프로덕션 배포를 위해 다양한 기술 구성 요소를 통합하고 유지 관리 라이프사이클을 간소화하며 하이브리드 및 멀티 클라우드 환경에 배포할 수 있는 클라우드 관리형 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) 방어 솔루션입니다.

NGINX App Protect WAF 및 DoS가 포함된 NGINX Ingress Controller의 무료 30일 체험판을 요청하여 시작하세요.