Litmus Chaos를 사용하여 더 강력한 Apache APISIX Ingress Controller 구축하기
May 4, 2023
개요
카오스 엔지니어링은 소프트웨어 시스템의 복원력과 신뢰성을 평가하고 향상시키는 데 중요한 역할을 합니다. 조직은 중단 이벤트를 시뮬레이션함으로써 취약점을 식별하고 시스템의 설계와 아키텍처를 개선할 수 있습니다. 이 글에서는 카오스 엔지니어링의 중요성과 Ingress Controller에 대한 카오스 실험 설계의 특정 적용에 대해 논의하겠습니다.
왜 카오스 엔지니어링이 필요한가?
카오스 엔지니어링은 서버 네트워크 중단이나 API 스로틀링과 같은 파괴적인 이벤트를 시뮬레이션하여 소프트웨어 시스템을 평가하는 과정입니다. 시스템 내부에 카오스 또는 결함을 도입함으로써 불안정하고 예기치 않은 조건에서 시스템의 복원력과 신뢰성을 테스트할 수 있습니다.
카오스 엔지니어링은 팀이 분산 시스템에서 숨겨진 위험을 식별하고 취약점을 모니터링하며 성능 병목 현상을 파악하는 데 도움을 줍니다. 이 접근 방식은 시스템 다운타임이나 생산 중단을 효과적으로 방지합니다.
Netflix의 시스템 처리 방식은 우리에게 더 과학적인 접근 방식을 채택하도록 영감을 주었고, 이는 카오스 엔지니어링의 탄생과 발전을 이끌었습니다.
1. 중단 이벤트 도입
카오스 엔지니어링은 네트워크 파티션, 서비스 저하, 리소스 제약과 같은 중단 이벤트를 도입하여 실제 시나리오를 시뮬레이션하고 시스템이 예기치 않은 조건을 처리하는 능력을 테스트합니다. 이는 취약점이나 약점을 식별하고 시스템의 설계와 아키텍처를 개선하여 더 강력하고 복원력 있는 시스템을 만드는 데 목적이 있습니다.
2. 시스템 복원력 테스트
오늘날 끊임없이 진화하고 빠르게 변화하는 기술 환경에서 시스템 복원력을 테스트하는 것은 시스템이 강력하고 확장 가능하며 예기치 않은 도전과 조건을 처리할 수 있는지 확인하는 데 중요합니다. 카오스 엔지니어링은 중단 이벤트를 도입하여 시스템의 반응을 관찰하고 예기치 않은 조건을 처리하는 능력을 측정하는 효과적인 방법입니다.
조직은 시스템 로그, 성능 메트릭, 사용자 경험을 모니터링하여 중단 이벤트가 시스템 복원력에 미치는 영향을 측정할 수 있습니다. 이러한 메트릭을 추적함으로써 시스템의 동작을 더 잘 이해하고 개선할 영역을 식별할 수 있습니다.
3. 숨겨진 문제 발견
분산 시스템은 데이터 손실, 성능 병목 현상, 통신 오류와 같은 숨겨진 문제가 발생하기 쉽습니다. 이러한 문제는 시스템이 압력을 받을 때만 눈에 띄게 되므로 감지하기 어려울 수 있습니다. 카오스 엔지니어링은 중단 이벤트를 도입하여 이러한 숨겨진 문제를 발견하는 데 도움을 줄 수 있습니다. 이 정보는 시스템의 설계와 아키텍처를 개선하여 더 복원력 있고 신뢰할 수 있는 시스템을 만드는 데 사용될 수 있습니다.
이러한 문제를 사전에 식별하고 해결함으로써 시스템의 신뢰성과 성능을 향상시키고, 다운타임을 방지하며, 데이터 손실 위험을 줄이고, 시스템이 원활하게 실행되도록 할 수 있습니다.
4. 그 가치와 필요성
분산 시스템은 복잡하고 본질적으로 카오스적이어서 실패로 이어질 수 있습니다. 클라우드와 마이크로서비스 아키텍처의 사용은 많은 이점을 제공하지만 복잡성과 카오스도 함께 옵니다. 엔지니어는 시스템을 가능한 한 신뢰할 수 있도록 만드는 책임이 있습니다.
테스트 없이는 프로젝트를 프로덕션 환경에서 사용할 자신이 없습니다. 기존의 단위 테스트와 종단 간 테스트 외에도 카오스 테스트를 도입하면 시스템이 더 강력해집니다.
오류가 발생하면 수리하는 데 시간이 걸리고 측정할 수 없는 손실을 초래할 수 있으며, 장기적인 영향을 미칠 수 있습니다. 수리 과정에서 시스템의 복잡성, 오류 유형, 가능한 새로운 문제 등 다양한 요소를 고려하여 효과적인 최종 수리를 보장해야 합니다.
또한, 오픈소스 프로젝트가 프로덕션 환경에서 사용자에게 심각한 결함을 가져다주면 많은 사용자가 다른 제품으로 전환할 수 있습니다.
Ingress Controller에 대한 카오스 실험 설계 방법
1. Ingress란 무엇인가?
Ingress는 외부 클라이언트가 클러스터 내부의 서비스에 접근할 수 있는 방법에 대한 규칙을 포함하는 Kubernetes 리소스 객체입니다. 이러한 규칙은 어떤 클라이언트가 어떤 서비스에 접근할 수 있는지, 클라이언트 요청이 적절한 서비스로 라우팅되는 방법, 그리고 클라이언트 요청이 처리되는 방법을 결정합니다.
2. Ingress Controller란 무엇인가?
Ingress 리소스는 이를 처리하기 위해 Ingress Controller가 필요합니다. 컨트롤러는 Ingress 규칙을 프록시의 구성으로 변환하여 외부 클라이언트가 클러스터 내부의 서비스에 접근할 수 있도록 합니다. 프로덕션 환경에서 Ingress Controller는 접근 소스 및 요청 방법 제한, 인증, 인가와 같은 복잡한 기능을 갖추어야 합니다. 대부분의 Ingress Controller는 Ingress 리소스의 주석을 통해 Ingress의 의미를 확장합니다.
3. Apache APISIX Ingress Controller란 무엇인가?
Apache APISIX Ingress Controller는 관리자가 Ingress 트래�을 관리하고 제어하는 데 도움을 주는 특수한 유형의 로드 밸런서입니다. 이는 APISIX를 데이터 플레인으로 사용하여 사용자에게 동적 라우팅, 로드 밸런싱, 탄력적 확장, 보안 정책 등의 기능을 제공하여 네트워크 제어를 개선하고 비즈니스의 가용성과 보안을 보장합니다. APISIX Ingress Controller는 Kubernetes Ingress, 사용자 정의 리소스, Gateway API 세 가지 구성 모드를 지원합니다.
4. Litmus Chaos란 무엇인가?
Litmus Chaos는 컨트롤러와 마이크로서비스 아키텍처의 안정성을 검증하기 위한 인프라 실험 프레임워크를 제공하는 오픈소스 카오스 엔지니어링 프레임워크입니다. 이는 컨테이너 수준 및 애플리케이션 수준 환경, 자연 재해, 결함, 업그레이드와 같은 다양한 환경을 시뮬레이션하여 시스템이 이러한 변화에 어떻게 반응하는지 이해할 수 있습니다. 이 프레임워크는 또한 컨트롤러와 애플리케이션 간의 동작 변화와 컨트롤러가 특정 상태에서 도전에 어떻게 반응하는지 탐구할 수 있습니다. Litmus Chaos는 편리한 관찰 가능성 통합 기능을 제공하며 확장성이 뛰어납니다.
5. 카오스 실험 설계 방법
다음은 어떤 시나리오에서든 카오스 실험을 설계하는 일반적인 절차입니다:
- 테스트 대상 시스템 정의: 실험할 시스템의 특정 구성 요소를 식별하고 실험에 대한 명확하고 측정 가능한 목표를 개발합니다. 이는 하드웨어 및 소프트웨어와 같은 테스트할 구성 요소의 포괄적인 목록을 작성하고 실험의 범위와 예상 결과를 정의하는 것을 포함합니다.
kube-apiserver: 예외가 발생하면 Ingress 리소스 작성 실패. Ingress-controller: 네트워크 중단, Crash, Podfaults, I/O data-plane: 네트워크 중단, Crash, Podfaults, I/O
- 적절한 실험 선택: 설정한 목표와 일치하고 실제 시나리오를 충실히 모방하는 실험을 선택합니다. 이는 실험이 의미 있는 결과를 생성하고 시스템의 동작을 정확히 반영하도록 도와줍니다.
- 가설 설정: 실험 중 시스템이 어떻게 동작할지와 예상 결과에 대한 가설을 설정합니다. 이는 경험이나 연구를 기반으로 해야 하며, 합리적이고 테스트 가능해야 합니다.
- 실험 실행: 스테이징 환경과 같은 통제된 환경에서 실험을 실행하여 프로덕션 시스템에 대한 잠재적 피해를 제한합니다. 실험 중 모든 관련 데이터를 수집하고 안전하게 저장합니다. 실험이 프로덕션 환경에서 직접 이루어져야 하는지에 대한 의견이 다를 수 있습니다. 그러나 대부분의 시나리오에서 시스템의 서비스 수준 목표(SLO)를 충족해야 합니다.
- 결과 평가: 실험 결과를 평가하고 가설과 비교합니다. 수집된 데이터를 분석하고 관찰 사항이나 발견 사항을 문서화합니다. 이는 예상치 못한 결과나 불일치를 식별하고 시스템에 미치는 영향을 결정하는 것을 포함합니다. 또한 실험 결과를 시스템 개선에 어떻게 사용할 수 있는지 고려합니다.
Ingress Controller의 주요 사용 시나리오
Ingress Controller의 가장 중요한 기능은 트래픽을 프록시하는 것이며, 다른 모든 기능은 이 핵심 기능을 기반으로 합니다. 따라서 카오스 엔지니어링을 수행할 때 정상적인 프록시 트래픽이 주요 메트릭입니다.
APISIX Ingress Controller에 대한 테스트 대상 시스템을 정의하려면 사용자는 Ingress, Gateway API 또는 CRD와 같은 경로 구성을 생성하고 이를 Kubectl을 통해 Kubernetes 클러스터에 적용해야 합니다. 이 과정은 kube-apiserver를 통해 인증, 인가, 승인 등의 절차를 거쳐 etcd에 저장됩니다.
APISIX Ingress Controller는 Kubernetes 리소스의 변경 사항을 지속적으로 감시합니다. 이러한 구성은 데이터 플레인의 구성으로 변환됩니다. 클라이언트가 데이터 플레인에 요청하면 라우팅 규칙에 따라 업스트림 서비스에 접근합니다.
kube-apiserver에 예외가 발생하면 구성이 생성되지 않거나 Ingress Controller가 올바른 구성을 얻지 못할 수 있습니다. 마찬가지로 데이터 플레인에 네트워크 중단이나 Pod가 죽는 등의 예외가 발생하면 정상적인 트래픽 프록시를 할 수 없습니다.
우리 실험의 범위는 주로 Ingress Controller에 예외가 발생했을 때 시스템 가용성에 미치는 영향입니다.
1. 상세 운영 단계
- 적절한 실험 선택: 종단 간 테스트를 통해 잘못된 구성의 많은 시나리오를 다룰 수 있습니다. 주로 카오스 엔지니어링을 통해 Ingress Controller가 DNS 오류, 네트워크 중단, Pod가 죽는 등의 예외가 발생했을 때 데이터 플레인이 여전히 정상적으로 트래픽을 프록시할 수 있는지 확인할 수 있습니다.
- 가설 설정: 각 시나리오에 대해 "Ingress-controller Pod가
X?
를 받았을 때 클라이언트의 요청이 여전히 정상적인 응답을 받을 수 있다"와 같은 가설을 만들 수 있습니다. - 실험 실행: 실험과 변수가 결정되었으므로 남은 것은 실험을 실행하는 것입니다.
Litmus Chaos는 실험을 수행하는 다양한 방법을 제공합니다. Litmus Portal을 통해 이를 수행할 수 있습니다. 이를 위해 Chaos 시나리오를 생성하고 실험할 애플리케이션을 선택해야 하며, 이러한 단계는 비교적 간단합니다. 그러나 Litmus Chaos에는 Probes 리소스가 포함되어 있다는 사실에 주의해야 합니다.
Probes는 ChaosExperiment 내에서 정의할 수 있는 플러그형 검사로, 실험 파드가 정의된 모드에 따라 이러한 검사를 실행하고 실험의 판정을 결정하는 데 필요한 조건으로 성공을 고려합니다. 동시에 실험을 예약할 수도 있으며, 이는 매우 가치 있는 기능입니다.
또한 Litmus Chaos는 YAML 매니페스트를 제출하여 실험을 실행하는 것도 지원합니다.
- 결과 평가: Litmus Chaos에는 내장된 통계 보고서가 있으며, Prometheus 및 Grafana와 통합하여 통합 대시보드를 제공할 수 있습니다.
2. 이점과 미래
엄격한 종단 간 테스트와 카오스 엔지니어링의 힘을 통해 우리는 제공된 APISIX Ingress Controller의 안정성과 신뢰성에 대해 확신합니다. 카오스 엔지니어링은 또한 버그를 식별하고 수정하는 데 도움을 주었습니다. 우리는 이 놀라운 프로젝트를 지속적으로 개선하고 발전시키기 위해 노력하고 있으며, 여러분도 우리 커뮤니티에 참여하도록 초대합니다.