BGP 사용하여 Kubernetes로 이동하기

강력한 Kubernetes 환경을 만들고 관리하려면 네트워크팀과 애플리케이션팀 간의 원활한 협업이 필요합니다. 이를 위해 BGP(Border Gateway Protocol)와 같은 중요한 네트워크 프로토콜을 자연스럽게 활용할 수 있습니다. 그러나 이들의 우선순위와 작업 스타일은 일반적으로 매우 다르기 때문에 앱 개발 속도 저하, deployment 지연, 심지어 네트워크 다운타임과 같은 잠재적으로 심각한 결과를 초래하는 충돌로 이어집니다.

현대적인 애플리케이션을 적절한 보안 및 확장성과 함께 제때 배포하기 위해서는 두 팀이 공동의 목표를 향해 협력하는 것이 중요합니다. 그렇다면 각 팀의 기술과 전문성을 효율적으로 활용하며 서로 협력할 수 있을까요?

목차

1. BGP란 무엇인가?
2. Kubernetes 클러스터에서 앱을 노출하는 방법
3. BGP, 온프레미스 Kubernetes 클러스터에 대한 외부 액세스 활성화
4. Whitepapaer 무료로 다운로드

1. BGP 란 무엇인가?

BGP (Border Gateway Protocol)는 인터넷에서 사용되는 라우팅 프로토콜로, 다수의 자율 시스템 간에 경로 정보를 교환하여 인터넷 트래픽을 전달하는 역할을 합니다. ISP나 대규모 기업에서 주로 사용되며, AS 간 최적의 경로를 찾아 데이터를 전송하여 안정적이고 효율적인 인터넷 연결을 제공합니다. BGP는 인터넷의 핵심 구성 요소 중 하나이며, 네트워크 관리자들이 중요한 프로토콜로 이해하고 있어야 합니다.

2. Kubernetes 클러스터에서 앱을 노출하는 방법

이 솔루션은 주로 온프레미스에서 호스팅되는 Kubernetes 클러스터에 대해 동작합니다. 이 클러스터는 물리 서버나 전통적인 Linux VM(가상 머신)에서 실행되며, 표준 Layer 2와 Layer 3을 사용하여 데이터 센터 내에서 통신을 제공합니다. 그러나 이 솔루션은 클라우드 호스팅된 Kubernetes 클러스터에는 적용되지 않습니다. 왜냐하면 클라우드 공급업체들은 그들의 데이터 센터 내의 핵심 네트워킹이나 관리형 Kubernetes 환경에서 네트워킹을 제어할 수 없기 때문입니다.

BGP - 데이터 센터에서 통신을 위한 네트워킹을 제공하는 노드와 표준 layer 2 스위치 및 layer 3 라우터가 있는 온프레미스에서 호스팅되는 Kubernetes 클러스터 다이어그램.

솔루션의 세부 사항을 검토하기 전에 Kubernetes 클러스터에서 애플리케이션을 노출하는 다른 표준 방법이 온프레미스 deployment에서 작동하지 않는 이유를 검토해 보겠습니다.

  • Service – 동일한 앱을 실행하는 Pod들을 그룹화합니다. 이는 내부 Pod 간 통신에 유용하지만 클러스터 내에서만 볼 수 있으므로 앱을 외부에 노출하는 데 도움이 되지 않습니다.
  • NodePort – 클러스터의 각 노드에 지정된 포트를 열고 해당 앱으로 트래픽을 전달합니다. 이를 통해 외부 사용자가 service에 액세스할 수 있지만, 구성이 정적이며 high-numbered TCP 포트(well-known 포트 대신)를 사용해야 하며 다른 앱과 포트 번호를 조정해야 하는 불편함이 있습니다. 또한 서로 다른 앱 사이에서 공통 TCP 포트를 공유할 수 있습니다.
  • LoadBalancer – 각 노드의 NodePort 정의를 사용하여 외부 세계와 Kubernetes 노드 사이에 네트워킹 경로를 생성합니다. AWS, Google Cloud Platform, Microsoft Azure 및 대부분의 다른 클라우드 공급자가 쉽게 구성 가능한 기능으로 지원하여 클라우드 호스팅된 Kubernetes에 적합합니다. 이는 필요한 Public IP 주소와 해당 service의 일치하는 DNS A 레코드를 제공합니다. 그러나 온프레미스 클러스터에는 이와 동등한 기능이 없습니다.

3. BGP, 온프레미스 Kubernetes 클러스터에 대한 외부 액세스 활성화

그러면 클러스터 외부의 사용자로부터 클러스터 내의 Pod로 흐르는 트래픽(north-south traffic)에 특화된 Kubernetes Ingress object가 남게 됩니다. Ingress는 클러스터에 대한 외부 HTTP/HTTPS 진입점을 생성합니다. 외부 사용자가 여러 Service에 접근할 수 있는 Single IP 주소나 DNS 이름입니다. 이것이 필요한 것입니다! Ingress 객체는 Ingress Controller에 의해 구현됩니다. 우리의 솔루션에서는 NGINX Plus를 기반으로 한 기업용 NGINX Ingress Controller를 사용합니다.

솔루션의 또 다른 핵심 구성 요소가 Layer 3 라우팅 프로토콜인 BGP(Border Gateway Protocol)라는 사실에 놀랄 수도 있습니다. 그러나 훌륭한 솔루션이 복잡할 필요는 없습니다!

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

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

BGP - 솔루션 구성 요소가 통신하는 데 사용하는 프로토콜을 나타내는 솔루션 아키텍처를 보여주는 다이어그램

4. Whitepapaer 무료로 다운로드

잘 정의된 구성 요소로 솔루션을 구현하기 위해 협력함으로써 네트워크 및 애플리케이션팀은 최적의 성능과 안정성을 쉽게 제공할 수 있습니다.

당사의 솔루션은 최신 네트워킹 도구, 프로토콜 및 기존 아키텍처를 사용합니다. 저렴하고 구현, 관리 및 지원이 쉽도록 설계되었기 때문에 용이성을 더하고 팀 간의 다리를 구축합니다.

NGINX Plus를 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 문의하십시오.

아래 뉴스레터를 구독하고 NGINX의 최신 정보들을 빠르게 전달 받아보세요.