BGP로 클러스터에 연결한다고요?

NGINX | 2023년 2월 28일

강력한 Kubernetes 환경을 구축하고 관리하려면 네트워크 팀과 애플리케이션 팀 간의 원활한 협업이 필요합니다. 하지만 두 팀은 우선순위와 업무 방식이 대체로 크게 달라 갈등이 발생할 수 있으며, 이는 애플리케이션 개발 지연, 배포 지연, 심지어 네트워크 중단과 같은 심각한 결과로 이어질 수 있습니다.

공동의 목표를 향해 나아가는 두 팀이 모두 성공해야만 오늘날의 최신 애플리케이션을 적절한 보안과 확장성을 갖춰 제때 제공할 수 있습니다. 그렇다면 각 팀이 긴밀하게 협력하도록 지원하면서 각 팀의 역량과 전문성을 어떻게 활용할 수 있을까요?

당사의 백서 「클러스터로 안내해 주세요」에서는 네트워크 팀과 애플리케이션 팀이 충돌 없이 각자의 강점을 결합할 수 있도록 Kubernetes 서비스에 대한 외부 액세스를 지원하는 솔루션을 자세히 설명합니다.

Kubernetes 클러스터에서 앱을 외부에 노출하는 방법

이 솔루션은 특히 온프레미스에서 호스팅되는 Kubernetes 클러스터를 위한 것으로, 노드는 베어 메탈 또는 기존 Linux 가상 머신(VM)에서 실행되고 표준 레이어 2 스위치와 레이어 3 라우터가 데이터 센터 내 통신을 위한 네트워크를 제공합니다. 클라우드 공급자는 자사 데이터 센터의 핵심 네트워크나 관리형 Kubernetes 환경의 네트워크를 사용자가 제어하도록 허용하지 않으므로, 이 솔루션은 클라우드에서 호스팅되는 Kubernetes 클러스터에는 적용되지 않습니다.

온프레미스에서 호스팅되는 Kubernetes 클러스터의 다이어그램. 데이터 센터 내 통신을 위한 네트워크는 노드와 표준 레이어 2 스위치 및 레이어 3 라우터로 구성되어 있습니다.

솔루션의 구체적인 내용을 살펴보기에 앞서, Kubernetes 클러스터에서 애플리케이션을 외부에 노출하는 다른 표준 방식이 온프레미스 배포에 적합하지 않은 이유를 알아보겠습니다.

  • 서비스 – 동일한 앱을 실행하는 Pod를 하나로 묶습니다. 내부 Pod 간 통신에는 매우 유용하지만 클러스터 내부에서만 표시되므로 앱을 외부에 노출하는 데는 도움이 되지 않습니다.
  • NodePort – 클러스터의 모든 노드에서 특정 포트를 열고 트래픽을 해당 앱으로 전달합니다. 외부 사용자가 서비스에 액세스할 수 있게 해 주지만, 구성이 정적이고 잘 알려진 낮은 포트 번호 대신 높은 번호의 TCP 포트를 사용해야 하며 다른 앱과 포트 번호를 조율해야 하므로 이상적인 방식은 아닙니다. 또한 여러 앱이 공통 TCP 포트를 공유할 수도 없습니다.
  • LoadBalancer – 각 노드의 NodePort 정의를 사용하여 외부에서 Kubernetes 노드로 연결되는 네트워크 경로를 생성합니다. AWS, Google Cloud Platform, Microsoft Azure를 비롯한 대부분의 클라우드 제공업체에서 손쉽게 구성할 수 있고 안정적으로 작동하며 필요한 공용 IP 주소와 이에 대응하는 DNS A 레코드를 서비스에 제공하는 기능으로 지원하므로, 클라우드에서 호스팅되는 Kubernetes에 매우 적합합니다. 하지만 온프레미스 클러스터에는 이에 상응하는 기능이 없습니다.

온프레미스 Kubernetes 클러스터에 대한 외부 사용자 액세스 활성화

그러면 Kubernetes Ingress 객체가 남습니다. 이 객체는 클러스터 외부 사용자에서 클러스터 내부의 Pod로 흐르는 트래픽(남북 트래픽)을 위해 특별히 설계되었습니다. Ingress는 클러스터에 외부 HTTP/HTTPS 진입점, 즉 외부 사용자가 여러 서비스에 액세스할 수 있는 단일 IP 주소 또는 DNS 이름을 생성합니다. 바로 우리에게 필요한 기능입니다! Ingress 객체는 Ingress 컨트롤러로 구현되며, 이 솔루션에서는 엔터프라이즈급 F5 NGINX Ingress Controller를 사용합니다. 이 컨트롤러는 NGINX Plus를 기반으로 합니다.

이 솔루션의 또 다른 핵심 구성 요소가 경계 경로 프로토콜 (BGP)이라는 레이어 3 라우팅 프로토콜이라는 점이 의외일 수 있습니다. 하지만 훌륭한 솔루션이 반드시 복잡할 필요는 없습니다!

「클러스터로 연결하기」에서 설명한 솔루션은 실제로 네 가지 구성 요소로 이루어져 있습니다:

  1. iBGP 네트워크 – 내부 BGP(iBGP)는 데이터 센터의 자율 시스템(AS) 내에서 라우팅 정보를 교환하는 데 사용되며, 네트워크의 안정성과 확장성을 보장하는 데 도움이 됩니다. 대부분의 데이터 센터에는 이미 iBGP가 구축되어 있으며 네트워크 팀에서 이를 지원하고 있습니다.
  2. Project Calico CNI 네트워킹 – Project Calico는 온프레미스 데이터 센터의 환경을 유연하게 연결하는 동시에 트래픽 흐름을 세밀하게 제어할 수 있는 오픈 소스 네트워킹 솔루션입니다. Kubernetes 클러스터의 네트워킹에는 BGP가 활성화된 Project Calico의 CNI 플러그인을 사용합니다. 이를 통해 Pod에 할당되는 IP 주소 풀을 제어할 수 있어 네트워킹 문제를 신속하게 파악하는 데 도움이 됩니다.
  3. NGINX Plus 기반 NGINX Ingress Controller – NGINX Ingress Controller를 사용하면 Pod의 서비스 엔드포인트 IP 주소를 모니터링하고, 트래픽 처리를 중단하지 않고도 업스트림 서비스 목록을 자동으로 재구성할 수 있습니다. 또한 애플리케이션 팀은 능동 상태 확인, mTLS, JWT 기반 인증을 비롯한 NGINX Plus의 다양한 엔터프라이즈급 레이어 7 HTTP 기능을 활용할 수 있습니다.
  4. 에지의 리버스 프록시로서의 NGINX Plus – NGINX Plus는 Kubernetes 클러스터의 에지에서 리버스 프록시로 작동하며, 데이터 센터의 스위치 및 라우터와 Kubernetes 클러스터의 내부 네트워크 사이에 경로를 제공합니다. 이는 Kubernetes LoadBalancer 객체를 대체하는 역할을 하며 BGP에 Quagga를 사용합니다.

이 다이어그램은 솔루션 아키텍처와 솔루션 구성 요소가 통신에 사용하는 프로토콜을 보여 주며, 요청 처리 중 데이터가 교환되는 순서를 나타내는 것은 아닙니다.

솔루션 아키텍처와 솔루션 구성 요소 간 통신에 사용되는 프로토콜을 보여 주는 다이어그램

백서를 무료로 다운로드하세요

네트워크 팀과 애플리케이션 팀이 협력하여 구성 요소가 명확히 정의된 솔루션을 구현하면 최적의 성능과 안정성을 손쉽게 제공할 수 있습니다.

당사의 솔루션은 최신 네트워킹 도구와 프로토콜, 기존 아키텍처를 활용합니다. 비용 부담이 적고 구현, 관리 및 지원이 용이하도록 설계되어 업무를 간소화하고 팀 간 협업을 촉진합니다.

코드가 실제로 작동하는 모습을 확인하고 솔루션 배포 방법을 단계별로 알아보려면, 무료로 Get Me to the Cluster를 다운로드하세요.


공유
태그: F5 NGINX, 2023, Tech

관련 블로그 게시물

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
NGINX | 2023. 11. 30.

시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric

이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
NGINX | 2023. 03. 23.

F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법

앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
NGINX | 2021. 09. 27.

Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션

개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX | 2021. 07. 06.

진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법

NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX | 2021. 06. 30.

NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리

NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
NGINX | 2015. 03. 25.

Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유

Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.