이 블로그는 SaaS 서비스를 구축하고 운영하는 데 필요한 다양한 측면을 다루는 일련의 블로그 중 두 번째입니다.
이전 블로그 에서 저희는 새로운 플랫폼을 구축하게 된 배경을 설명했습니다. 이 플랫폼을 사용하면 고객이 스마트 제조, 공공 안전을 위한 비디오 포렌식, 알고리즘 트레이딩, 통신사 5G 네트워크 등 복잡하고 다양한 애플리케이션 세트를 구축할 수 있습니다.
이 시리즈의 첫 번째 블로그 에서는 퍼블릭 클라우드, 프라이빗 네트워크 PoP, 엣지 사이트에서 여러 멀티 테넌트 Kubernetes 기반 애플리케이션 클러스터를 제공하기 위한 분산형 제어 평면을 다루었습니다.
이 특정 블로그에서는 분산 애플리케이션 클러스터를 연결하고 보호하는 과제를 애플리케이션 간, 사용자/머신 간, 애플리케이션과 공용 인터넷의 세 가지 관점에서 다룰 것입니다. 우리는 완전히 통합된 L3-L7+ 데이터 경로, 전 세계적으로 분산된 제어 평면, 그리고 고성능 글로벌 네트워크를 도입할 것입니다. 이 세 가지가 결합되어 엣지, 모든 클라우드 VPC 또는 글로벌 네트워크 PoP에서 포괄적인 네트워크 및 보안 서비스 세트를 제공합니다. 1년 넘게 35명 이상의 고객과 함께 프로덕션을 운영한 후, 우리는 배포 규모를 확장하기 시작했으며 이제 여정을 공유하기에 좋은 때라고 생각했습니다.
고객들이 스마트 제조, 공공 안전을 위한 비디오 포렌식, 알고리즘 트레이딩, 통신사 5G 전환 등 상당히 복잡하고 임무 수행에 필수적인 애플리케이션을 구축함에 따라 당사는 애플리케이션과 이러한 애플리케이션의 최종 사용자에게 항상 연결되고 안정적인 환경을 제공해야 합니다. 이러한 애플리케이션 중 일부는 클라우드 내의 클러스터에서 데이터 파이프라인을 실행하거나 클라우드 공급자 간에 데이터를 백업해야 하거나 글로벌 사용자 기반의 요청을 앱 백엔드로 안정적으로 전달해야 하거나 중앙 클라우드에서 실행되는 백엔드까지 머신에서 고성능 연결이 필요합니다.
이러한 요구 사항을 충족하기 위해 물리적 네트워크에는 두 가지 요구 사항이 있었습니다.
R1 - 클라우드 간 - 전 세계 퍼블릭 또는 프라이빗 클라우드 위치에서 애플리케이션의 고성능 및 주문형 연결
R2 — 인터넷에서 클라우드로 — 엣지 위치에 있는 장치와 머신을 애플리케이션 백엔드에 안정적으로 연결하기 위해, 인터넷을 사용하여 백엔드까지 트래픽을 백홀링하는 대신 여러 개의 중복 경로를 제공하고 이러한 사용자에게 가까운 곳에서 연결을 종료해야 했습니다.
AT&T와 같은 네트워크 서비스 제공업체에 가서 요구 사항 R1 및 R2를 해결할 수 있었지만, 그들은 API 기반 구성, 스트리밍 원격 측정, 자체 또는 고객의 IP 접두사를 쉽게 추가하는 기능, API 기반 네트워크 서비스 등 원활한 네트워크 경험과 애플리케이션 서비스와의 통합을 제공할 수 없었습니다. 게다가 서비스 제공업체로부터 글로벌 커버리지를 확보하는 것은 매우 어렵거나 엄청나게 비쌉니다. 우리는 이 모든 문제를 해결하기 위해 두세 개의 다른 서비스 공급업체를 선택할 수도 있었지만 그러면 서로 다르게 동작하고, 장애 모드가 다르고, SLA, 지원 시스템이 다르고, API가 다르거나 아예 없는 등 다양한 시스템이 난무하는 복잡한 상황에 처하게 되었을 것입니다.
그래서 우리는 결국 우리만의 네트워크를 구축해야 했고 이는 네트워크에 세 가지 속성이 필요하다는 것을 의미했습니다.
이 세 가지 특성을 충족하기 위해 우리는 많은 일을 해야 했습니다. 하지만 우리는 다섯 가지 큰 버킷 항목을 강조할 것입니다.
우리는 개발 초기에 글로벌 네트워크를 구축하고 운영하려면 시간과 기술이 필요하고, 이러한 전문 지식을 적용해야 한다는 점을 깨달았습니다. 프랑스 파리에 있는 보안 제공업체인 Acorus Networks의 창립자들과 수개월간 논의한 끝에, 우리는 결국 Acorus를 Volterra와 합병하기로 결정했습니다. 이를 통해 글로벌 인프라와 네트워크 구축 문제를 해결할 수 있었습니다. Acorus는 Ansible을 사용하여 물리적 네트워크 구성을 완전 자동화한 훌륭한 네트워크와 운영팀을 자체적으로 구성하고 소프트웨어 팀에서 사용할 수 있는 원격 측정 및 구성을 위한 외부 API를 구축했습니다.
이제 높은 안정성과 성능을 갖춘 글로벌 프라이빗 네트워크를 구축하는 데 주력하는 팀이 구성되었으므로 그림 1에서 볼 수 있듯이 에지나 클라우드 위치에서 발생하는 애플리케이션 간 트래픽과 사용자/머신 간 트래픽 문제를 쉽게 해결할 수 있습니다. 또한, 네트워크 PoP의 컴퓨팅 및 스토리지 인프라를 통해 API 종료, 앱 보안, 워크로드 오프로드(에지 또는 클라우드에서)를 네트워크에 추가할 수 있었습니다. 이를 통해 당사는 앞으로도 역량을 계속 발전시키고 수요에 따라 네트워크 범위와 서비스 카탈로그를 쉽게 확장할 수 있습니다.
글로벌 네트워크가 제대로 작동하게 된 후에는 애플리케이션 클러스터와 워크로드를 추가해야 했습니다. 이러한 작업 부하에는 고유한 애플리케이션 수준 연결 및 보안 서비스 세트가 필요합니다.
이전 블로그 에서 설명했듯이, 이 플랫폼을 구축한 목적은 여러 환경(클라우드, 엣지, 네트워크 PoP)에서 실행되는 작업 부하를 관리하는 팀의 생산성을 높이고 복잡성을 줄이는 것이었습니다.
모든 클라우드 공급자는 애플리케이션 클러스터에 대한 안전한 연결을 위해 다양한 클라우드 리소스를 구성, 관리 및 모니터링해야 합니다. 예를 들어, Google Cloud에서 애플리케이션 클러스터에 대한 엔드투엔드 네트워크 서비스를 구성하려면 다양한 서비스 세트를 관리해야 합니다.
좋습니다. 큰 도전이 될 수는 있겠지만, 각 클라우드 공급자 전반에서 조화를 이루는 구성 및 운영 계층을 구축함으로써 이 문제를 해결하기로 결정할 수 있었습니다. 하지만 우리는 클라우드 공급업체의 서비스가 우리의 모든 요구 사항을 충족시키지 못하기 때문에(예: CSP에서는 애플리케이션을 실행하고 API 보안을 유지하는 기능이 부족함) 그것만으로는 문제를 해결할 수 없다는 걸 알고 있었습니다. 또한, 그들은 최고가 아니며, 끊임없이 변화하고 있습니다.
또한, 네트워크 PoP와 에지 사이트는 어떻습니까? 우리는 하드웨어 또는 소프트웨어 공급업체로부터 유사한 기능을 얻어서 모두 통합해야 합니다. 예를 들어, 라우팅+nat+vpn의 경우 Cisco/Juniper, 로드 밸런싱 및 방화벽의 경우 F5 등입니다. 에지 위치에서는 클라우드 공급업체나 대규모 네트워크 공급업체 모두 리소스가 제한된 환경에서 네트워크 서비스 문제를 해결할 수 없기 때문에 문제가 더욱 복잡해집니다. 에지에 대한 또 다른 잠재적인 옵션은 모든 애플리케이션 연결, 보안 및 네트워크 서비스를 글로벌 네트워크로 옮기는 것이었습니다. 하지만 동일한 에지 사이트 내의 앱 간 트래픽에도 이러한 서비스 중 일부가 필요하기 때문에 이 방법은 효과가 없다는 것이 분명했습니다.
많은 논의와 환경 조사를 거친 후, 우리는 여러 서비스 제공업체와 벤더 간의 통합(구성, 원격 측정, 모니터링, 알림)을 수행하고 로드맵과 API 변경 사항을 따라가는 것이 단순성과 속도라는 우리의 목표에 어긋난다는 것을 깨달았습니다.
플랫폼 전반에 걸쳐 해결해야 했던 또 다른 문제는 멀티 테넌시였습니다. WAN 서비스와 네트워크 라우팅에서는 쉽게 해결할 수 있지만, 대부분의 로드 밸런서가 멀티 테넌시에 대한 지원이 전혀 없거나 매우 제한적이기 때문에 애플리케이션 네트워킹 서비스에서는 어려운 문제였습니다.
결국, 우리는 이러한 과제를 맡아 네트워크 라우팅 서비스뿐만 아니라 애플리케이션, 보안, 광역 서비스까지 제공하는 고성능 네트워크 데이터 경로를 구축하기로 결정했습니다. 이를 통해 하이브리드 및 분산 클라우드 환경에서 서비스 포트폴리오를 통합하고 퍼블릭 클라우드의 기본 서비스에만 의존하면 됩니다.
팀원들이 네트워킹 경험이 풍부하고 이전에 Contrail/Juniper와 관련해 이런 문제를 처리한 적이 있다는 점을 고려했을 때, 우리는 이 문제를 해결하는 가장 좋은 방법은 깨끗한 상태에서 시작하여 L3에서 L7+까지 서비스를 단일 데이터 경로로 통합하는 완전히 새로운 네트워킹 솔루션을 구축하는 것이라고 생각했습니다. 이 솔루션은 모든 클라우드나 엣지에서 실행 가능하면서도 우리 플랫폼에서 중앙에서 관리됩니다.
우리는 이 새로운 데이터 경로의 설계를 시작하기 위해 가장 적합한 프로젝트를 선택했습니다. 즉, 이미 6년 동안 개발에 투자한 OpenContrail vRouter(L3-L4용)와 거대한 커뮤니티 지원을 받고 있는 L7용 Envoy입니다. 그럼에도 불구하고, 새로운 통합 L3-L7+ 데이터 경로를 구축하기 위해 여러 가지 변경 및 추가 작업을 해야 했습니다. Envoy의 멀티 테넌시, Envoy의 dpdk, 사용자 공간 dpdk TCP 스택, 네트워크 정책, SSL/IPSec VPN, http 연결, 동적 역방향 프록시, 투명한 정방향 프록시, API 게이트웨이, 프로그래밍 가능한 애플리케이션 정책, DDoS 보호를 위한 빠른 ACL, PKI ID 통합, Chrome v8 엔진, 애플리케이션 및 네트워크 보안 등이 있습니다.
이 데이터 경로( 그림 2 참조)는 애플리케이션 클러스터의 유입/유출 게이트웨이, 엣지의 소프트웨어 게이트웨이로 배포되고, 클러스터 내부나 여러 클러스터에서 서비스 메시 기능을 제공하거나, 글로벌 PoP에서 네트워크 서비스를 제공합니다.
플랫폼의 다중 테넌시에 대한 요구 사항(이전 블로그에서 다룸)에 맞춰 이 네트워크 데이터 경로에 대한 전체 다중 테넌시를 제공해야 했습니다. vRouter가 이미 VRF를 지원했기 때문에 라우팅 계층의 경우 비교적 간단했지만 Envoy에서 멀티 테넌트를 지원하기 위해 변경 작업을 해야 했습니다. 커널 TCP 스택을 사용하지 않았기 때문에 Envoy의 TCP 소켓 인터페이스를 변경하고 VRF 인식 기능을 추가했습니다.
이 데이터 경로는 또한 API 보안, 애플리케이션 방화벽 및 네트워크 보안을 수행해야 했습니다. 우리는 이를 위해 알고리즘 기술과 기계 추론을 결합하여 사용했으며, 이 주제는 다가올 블로그 게시물에서 다룰 예정입니다.
이 네트워크 데이터 경로를 구축함으로써 우리는 많은 이점을 얻었습니다.
균일한 구성, 제어 및 관찰성을 갖춘 완벽한 L3-L7+ 기능
단일 클러스터 내에서 확장을 지원하면 네트워크나 퍼블릭 클라우드 위치에서 매우 작은 설치 공간과 성능이 낮은 에지 장치부터 최대 100Gbps 이상 용량까지 다양한 범위를 지원할 수 있습니다.
네트워크 공급업체 및/또는 클라우드 공급업체에 의존하지 않고 네트워크 데이터 경로에 새로운 기능을 빠르게 추가합니다.
어떤 환경에서도 유사한 실패 및 성능 특성을 보이는 공통 솔루션은 운영 팀에 매우 중요합니다.
이 새로운 네트워크 데이터 경로를 사용하여 여러 앱 클러스터를 배포할 수 있게 되었으므로 이를 구성, 제어, 모니터링하기 위한 글로벌 분산 제어 평면을 구축하는 것이 중요했습니다.
저희 플랫폼 팀은 다수의 분산 데이터 경로 처리 노드를 관리하는 분산 제어 평면을 구축하는 과정에서 여러 가지 문제를 해결해야 했습니다. 새로운 데이터 경로를 구축했기 때문에 활용할 수 있는 즉시 사용 가능한 제어 평면이 없었고 우리는 다음과 같이 직접 작성해야 했습니다. 단일 클러스터(클라우드, 엣지 또는 네트워크 PoP) 내에서 실행되는 여러 데이터 경로를 관리하기 위한 로컬 제어 평면입니다. 이러한 데이터 경로 노드에는 구성 변경 관리, 경로 업데이트, 상태 점검 수행, 서비스 검색 수행, BGP와 같은 프로토콜을 사용하여 다른 네트워크 장치와의 피어링, 메트릭 및 액세스 로그 집계 등을 위한 로컬 제어 평면이 필요했습니다. 여러 로컬 제어 평면을 관리하기 위한 분산 제어 평면 - 글로벌 네트워크 PoP에서 실행되는 분산 제어 평면이 있습니다( 그림 3 ). 이 제어 평면은 로컬 제어 평면의 구성 관리, 각 로컬 제어 평면에서의 운영 상태 분배, 각 노드의 데이터 수집을 담당합니다. 운영 상태를 분산하기 위해 일관성이 뛰어나고 견고한 BGP를 사용하기로 결정했습니다. 우리는 OpenContrail의 일부로 BGP의 매우 대규모이고 다중 스레드 구현을 구축했으므로 이를 활용하여 부하 분산을 위한 확장 기능(상태 확인 배포, http/api 엔드포인트, 정책 전파 등)을 추가했습니다.
또한 AWS와 Azure의 두 클라우드 지역에서 실행되는 중앙 관리 평면이 있으며, 이는 그림 4 에서 볼 수 있듯이 분산 제어 평면과 함께 사용되어 다중 테넌시를 제공합니다. 당사 SRE 팀은 여러 테넌트를 생성할 수 있으며, 각 테넌트는 전 세계 네트워크 전반에서 다른 테넌트와 완전히 분리됩니다. 그들은 "공용 네트워크"를 사용해서만 서로에게 라우팅할 수 있습니다. 테넌트 내에서 네임스페이스 간의 서비스는 http/api/network 라우팅 및 보안 규칙에 따라 서로 통신할 수 있습니다.
제어 평면은 별도의 테넌트 및 격리된 네임스페이스에서 Kubernetes 워크로드로 실행되며, 이는 SRE 팀에서만 제어됩니다. 결과적으로 어떠한 개발자나 고객도 이 서비스를 방해할 수 없습니다. 게다가 제어 평면이 분산되어 있으므로 한 위치에서 제어 평면이 중단되어도 전체 서비스에 영향을 미치지 않습니다.
글로벌 네트워크에 대한 요구 사항을 파악하고 앱 클러스터를 위한 L3-L7+ 네트워크 서비스(새로운 데이터 경로 및 분산 제어 평면)에 대한 요구 사항을 정의한 후, 제품 팀은 우리의 삶을 더욱 흥미롭게 만드는 더 많은 요구 사항을 내놓았습니다. 기본적으로 그들은 다음과 같은 기능을 갖춘 글로벌 클러스터 간 서비스 메시를 제공하기를 원했습니다.
요구사항 2번과 3번의 목표는 클라이언트와 서버 간 연결의 응답 시간과 성능을 개선하는 것이었으며, 이는 애플리케이션 간 통신이나 대규모 SaaS 애플리케이션에 매우 중요합니다. 요구 사항 #2와 #3을 충족하기 위해서는 분산 프록시(그림 5)를 구축하는 것이 가장 좋은 방법이라는 것이 분명했습니다. 즉, 네트워크 주소가 아닌 애플리케이션 주소에 기반한 수신 프록시와 송신 프록시 및 경로를 구축하는 것입니다. 또한, 분산 제어 평면과 BGP 확장(앞서 설명한 대로)을 활용하여 서비스 엔드포인트(또는 서버)의 상태를 분산하기로 결정했습니다. 분산 프록시의 구현은 아래 다이어그램에 나와 있습니다.
완전한 L3-L7+ 네트워크 스택을 갖춘 분산 프록시가 되었으므로 이를 글로벌 분산 애플리케이션 게이트웨이라고 부릅니다. 네트워크 데이터 경로에서 사용 가능한 모든 기능을 이제 글로벌 네트워크 전반에서 사용할 수 있습니다. 예를 들어, HTTP 또는 API 기반 로드 밸런싱 및 라우팅, 에지에서의 정책 시행, API 변환, 사용자에게 더 가까운 곳에서의 TLS 종료 등이 있습니다.
팀은 전 세계적으로 분산된 애플리케이션 게이트웨이를 구현함으로써 여러 가지 이점을 얻을 수 있었습니다. 이러한 성과는 운영 개선, 보안, 성능 및 TCO 분야에서 나타났습니다.
이 블로그 시리즈에서는 퍼블릭 클라우드, 프라이빗 네트워크 PoP, 엣지 사이트의 많은 애플리케이션 클러스터를 활용하여 전 세계적으로 분산된 SaaS 서비스를 구축하고 운영하는 데 필요한 다양한 측면을 다룰 것입니다. 다음은 플랫폼 및 데이터 보안 입니다.