Kubernetes에서 APISIX 배포를 위한 3가지 팁 (1부)

March 14, 2024

Technology

클라우드 네이티브 컴퓨팅 시대에 Kubernetes는 컨테이너 오케스트레이션 플랫폼으로 널리 채택되었으며, Apache APISIX는 고성능 클라우드 네이티브 동적 API 게이트웨이로 부상했습니다. Kubernetes에서 Apache APISIX를 배포하는 것은 점점 더 일반화되고 있습니다. 그러나 Kubernetes에서 Apache APISIX를 배포하는 과정이 비교적 간단하더라도 여전히 고려해야 할 몇 가지 주요 문제가 있습니다. 이 시리즈의 글에서는 다음과 같은 주제를 깊이 있게 다룰 예정입니다:

  1. 배포 방법에 대한 고려 사항
  2. 상태 점검, 로깅 및 모니터링
  3. 사용자 정의 플러그인 및 구성 처리

이 글에서는 첫 번째 주제인 Kubernetes에서 Apache APISIX를 배포할 때의 배포 방법에 대한 고려 사항에 초점을 맞출 것입니다.

Kubernetes에서 APISIX 배포 방법

Kubernetes에서 APISIX를 원활하게 배포하고 관리하면서 시스템의 안정성과 신뢰성을 보장하기 위해 배포 방법에서 몇 가지 요소를 고려해야 합니다.

1. 데이터 플레인과 컨트롤 플레인의 분리

Kubernetes에서 배포할 때 APISIX의 데이터 플레인(실제 트래픽을 처리하는 노드)과 컨트롤 플레인(구성을 관리하고 API 호출을 처리하는 노드)을 분리하는 것이 중요합니다. 이 분리는 다음과 같은 이점을 제공합니다:

  • 탄력적인 확장성: 데이터 플레인은 실제 요청 처리를 담당하고, 컨트롤 플레인은 구성 및 정책 배포를 관리합니다. 분리를 통해 시스템은 데이터 플레인과 컨트롤 플레인을 독립적으로 수평 확장할 수 있으며, 실제 작업 부하 요구에 따라 시스템을 동적으로 조정할 수 있습니다. 이는 탄력적인 확장성을 용이하게 하여 전체 시스템의 확장성을 향상시킵니다.

  • 고장 격리: 데이터 플레인과 컨트롤 플레인을 분리하면 고장 격리를 달성할 수 있습니다. 컨트롤 플레인이 고장 나더라도 데이터 플레인은 요청 처리를 계속할 수 있어 서비스 가용성을 보장하며, 그 반대의 경우도 마찬가지입니다. 이 분리는 단일 지점 고장이 전체 시스템에 영향을 미치는 것을 방지하여 내결함성과 안정성을 향상시킵니다.

  • 보안 강화: 데이터 플레인과 컨트롤 플레인을 분리하면 시스템 보안이 강화됩니다. 컨트롤 플레인은 일반적으로 액세스 제어 정책 및 인증 구성과 같은 민감한 정보를 포함하고 있으며, 데이터 플레인은 실제 요청을 처리합니다. 이를 별도로 배포함으로써 컨트롤 플레인의 보안을 더 잘 보호할 수 있으며, 잠재적인 공격 위험을 줄일 수 있습니다.

Apache APISIX 아키텍처

2. etcd 지속적 배포 솔루션

Apache APISIX는 standalone 모드 및 etcd 구성 센터 모드와 같은 다양한 구성 모드를 제공합니다. Apache APISIX의 구성 센터로 etcd 클러스터를 선택하는 경우 몇 가지 고려 사항이 있습니다:

  • StatefulSet 사용: Kubernetes에서 StatefulSet은 일반적으로 etcd를 배포하는 데 사용됩니다. StatefulSet은 안정적인 네트워크 식별자와 순서 있는 Pod 배포를 제공하며, 이는 분산 시스템에 중요합니다. 각 etcd 노드는 고유한 식별자를 가질 수 있으며 지속적인 스토리지를 유지하여 데이터 보안을 보장할 수 있습니다.

  • 적절한 리소스 제한 설정: etcd Pod에 적절한 리소스 제한을 설정하여 클러스터에서 원활하게 실행되도록 합니다. 클러스터 크기와 작업 부하에 따라 조정하여 리소스 부족 또는 낭비를 방지합니다.

  • 지속적 스토리지 구성: 데이터 지속성과 신뢰성을 보장하기 위해 etcd 데이터를 지속적 스토리지에 저장하는 것이 좋습니다. Kubernetes의 Persistent Volumes(PV) 및 Persistent Volume Claims(PVC)를 사용할 수 있습니다.

  • TLS 암호화 활성화: etcd 클러스터에서 TLS 암호화를 활성화하여 데이터 전송을 보호합니다. 인증서와 개인 키를 사용하여 etcd 클러스터를 인증하고 노드 간 통신을 암호화합니다. 이는 자체 서명된 인증서 또는 신뢰할 수 있는 인증 기관(CA)에서 발급한 인증서를 생성하고 사용하여 달성할 수 있습니다.

  • 인증 및 권한 부여 활성화: etcd는 사용자 이름과 비밀번호 기반의 인증 및 역할 기반의 권한 부여를 지원합니다. 프로덕션 환경에서 이러한 기능을 활성화하여 권한이 있는 사용자만 etcd의 데이터에 액세스하고 수정할 수 있도록 하는 것이 좋습니다. Apache APISIX 컨트롤 플레인과 데이터 플레인을 etcd에 연결할 때는 컨트롤 플레인에 읽기-쓰기 기능을 부여하고 데이터 플레인에 읽기 전용 기능을 부여하는 등 다른 역할을 할당하는 것이 좋습니다.

  • 정기 백업: etcd 데이터를 정기적으로 백업하여 데이터 손실 또는 손상을 방지합니다. etcd에서 제공하는 백업 도구를 사용하고 백업을 안전한 위치에 저장하여 필요할 때 복구할 수 있도록 합니다. 백업 방법에는 핫 백업 및 콜드 백업 방법이 있습니다. 데이터 보안을 위해 etcd learner 방법을 사용하여 핫 백업을 수행하고 스냅샷 콜드 백업 방법과 결합하여 데이터 복구 능력을 극대화하는 것이 좋습니다.

  • 모니터링 및 경고: 모니터링 도구를 배포하여 etcd 클러스터의 상태를 실시간으로 모니터링합니다. Prometheus는 etcd와 통합할 수 있는 일반적으로 사용되는 모니터링 도구입니다. 문제가 발생할 때 적시에 조치를 취할 수 있도록 경고 규칙을 설정합니다.

  • 노드 변경 적절히 처리: etcd 클러스터에서 노드 추가, 제거 또는 교체가 발생할 수 있습니다. 노드 변경을 적절히 처리하여 데이터 불일치 및 서비스 중단을 방지합니다.

3. K8s Ingress Controller 대신 APISIX Ingress Controller 사용

APISIX Ingress Controller는 API 관리에 중점을 둔 도구로, 고성능 및 유연한 구성 옵션을 제공합니다. 더 복잡한 라우팅 규칙, 속도 제한, 서킷 브레이커 및 기타 고급 기능이 필요한 경우 APISIX Ingress Controller가 더 나은 선택일 수 있습니다. 이는 풍부한 플러그인 시스템을 제공하며, APISIX Ingress CRD를 통해 선언적 구성을 사용하여 플러그인을 통합하여 인증, 권한 부여, 모니터링, 로깅 및 기타 기능을 처리할 수 있습니다. 이는 APISIX Ingress Controller의 기능을 풍부하게 하고 구성을 단순화합니다.

APISIX Ingress Controller

포괄적인 구성 인터페이스와 Kubernetes와의 깊은 통합이 필요한 경우 Apache APISIX 기반의 전체 API 라이프사이클 관리 플랫폼인 API7 Enterprise를 고려해 보십시오. API7 Enterprise는 고급 자동화, 모니터링 및 문제 해결을 위한 포괄적인 솔루션을 제공하여 비즈니스에 더 신뢰할 수 있는 지원을 제공합니다.

결론

Kubernetes에서 APISIX를 배포할 때는 몇 가지 측면에 주의를 기울여야 합니다. 먼저, 데이터 플레인과 컨트롤 플레인의 분리에 초점을 맞추어 탄력적인 확장성, 고장 격리 및 보안 강화를 달성해야 합니다. 둘째, etcd 기반의 지속적 배포 방식을 채택하여 구성의 지속성과 신뢰성을 보장해야 합니다. 또한, K8s Ingress Controller 대신 더 적합한 APISIX Ingress Controller를 사용하여 더 풍부한 기능과 간단한 구성을 얻을 수 있습니다. 이러한 모범 사례를 준수함으로써 시스템의 안정성과 신뢰성을 보장할 수 있습니다.

Tags: