APISIX Ingress Controller가 Traefik에 비해 더 나은 선택인 이유는 무엇인가요?
November 4, 2022
Apache APISIX Ingress Controller란 무엇인가요?
Apache APISIX Ingress Controller는 Apache APISIX를 데이터 플레인으로 사용하는 Kubernetes Ingress 컨트롤러입니다.
다중 규칙 구성을 지원합니다:
- Ingress
- APISIX Ingress CRD (사용자 정의 리소스)
- Gateway API
전체적으로, Apache APISIX Ingress Controller의 아키텍처는 데이터 플레인과 컨트롤 플레인을 분리하고, Apache APISIX가 트래픽을 처리하도록 합니다. 따라서, 데이터 플레인에 대한 공격으로 인해 Kubernetes 클러스터가 공격받는 것을 크게 방지하고 전반적인 보안을 향상시킵니다.
Traefik이란 무엇인가요?
Traefik은 Traefik Labs에서 개발한 오픈소스 리버스 프록시 및 로드 밸런서입니다.
Kubernetes에서 다중 규칙 구성을 지원합니다:
- Ingress
- Traefik IngressRoute (사용자 정의 리소스)
- Gateway API
Traefik은 통합된 바이너리 파일로, 컨트롤 플레인과 데이터 플레인의 프록시 로직이 결합되어 있습니다. 따라서, Traefik에 대한 공격이나 원격 실행 보안 취약점 악용이 발생하면 Kubernetes 클러스터도 공격받을 수 있습니다.
비교
다음 섹션에서는 APISIX Ingress Controller와 Traefik을 다음과 같은 차원에서 비교합니다.
지원 프로토콜
트래픽 게이트웨이로서의 핵심 능력은 프록시 트래픽을 올바르게 처리하는 것입니다. Apache APISIX Ingress Controller는 Kubernetes 클러스터의 Ingress Gateway로서 주로 다음 두 가지 유형의 트래픽을 처리합니다:
- 클라이언트와 Ingress 간의 트래픽
- Ingress와 업스트림 서비스 간의 트래픽
이는 다음과 같이 나타납니다:
클라이언트 <----> Ingress <----> 업스트림 서비스
현재 다양한 프로토콜이 존재합니다. 여기서는 APISIX Ingress Controller와 Traefik의 프로토콜 지원을 비교한 간단한 표를 제공합니다.
프로토콜 | APISIX Ingress Controller | Traefik |
---|---|---|
HTTP/HTTPS | 지원 | 지원 |
HTTP/2 | 지원 | 지원 |
HTTP/3 | 미지원 | 지원 |
TCP | 지원 | 지원 |
UDP | 지원 | 지원 |
WebSocket | 지원 | 지원 |
Dubbo | 지원 | 미지원 |
이 외에도, APISIX Ingress Controller와 Traefik 모두 HTTP/2 프록시 또는 TCP 프록시를 통해 gRPC, MQTT 등의 프로토콜을 지원하므로, 위 표에는 포함하지 않았습니다.
프로토콜 측면에서, APISIX Ingress Controller와 Traefik은 각각의 강점을 가지고 있습니다. APISIX는 향후 HTTP/3 지원을 계획하고 있습니다.
확장성
다양한 비즈니스 요구 사항으로 인해 확장성은 기술 선택의 핵심 지표가 되었습니다. Apache Ingress와 Traefik 모두 각자의 방식으로 기능 확장을 지원합니다. 각각을 소개하겠습니다.
Apache APISIX Ingress Controller
APISIX Ingress Controller의 기능 확장은 사용자 정의 플러그인을 구현하여 이루어집니다. 현재 주로 다음과 같은 세 가지 방식으로 플러그인을 개발할 수 있습니다:
- Lua를 통해 플러그인 개발: 이 방식은 비교적 간단하며, 성능 저하가 없습니다.
--plugin-runner
를 통해 플러그인 개발: 이 모드에서는 JAVA/Python/Go와 같은 다양한 프로그래밍 언어를 사용하여 플러그인을 개발할 수 있으므로, 새로운 프로그래밍 언어를 배우지 않고도 현재 프로젝트의 로직을 활용할 수 있습니다.- WASM 모듈을 통해 플러그인 개발: 이 모드에서는 WASM 모듈을 빌드할 수 있는 어떤 프로그래밍 언어라도 사용하여 플러그인을 개발할 수 있습니다.
또한, serverless 플러그인을 통해 Lua 코드를 직접 작성하여 비즈니스 요구 사항을 빠르게 충족시킬 수도 있습니다.
물론, Lua 모듈 개발 경험이 있다면 직접 Lua 모듈을 개발하고 로드할 수도 있습니다. 하지만 이를 작동시키려면 다음과 같은 구성을 추가해야 합니다:
apisix:
...
extra_lua_path: "/path/to/example/?.lua"
자세한 플러그인 개발 단계와 사용법은 Apache APISIX 플러그인 개발 문서와 APISIX Ingress Controller가 사용자 정의 플러그인을 지원하는 방법을 참조하십시오.
Traefik
Traefik도 플러그인 메커니즘을 제공하여 기능을 확장할 수 있습니다. 그러나 Traefik이 Go로 개발되었기 때문에, 플러그인도 Go를 사용하여 개발해야 합니다.
다음과 같은 내용을 Traefik 구성에 추가하여 개발한 플러그인을 참조할 수 있습니다.
experimental:
localPlugins:
example:
moduleName: github.com/traefik/pluginproviderdemo
주의할 점은 플러그인 이름이 모듈 이름과 동일해야 한다는 것입니다.
일반적으로, APISIX Ingress Controller는 여러 확장 방법을 지원하며, 사용자는 실제 상황에 따라 최적의 방법을 선택할 수 있습니다. 또한, 사용자가 선호하는 개발 도구를 선택할 수 있도록 하여 현재 비즈니스 라인과 더 쉽게 통합할 수 있도록 돕습니다. 반면, Traefik은 Golang만 사용하여 개발할 수 있습니다.
생태계
기술 선택을 할 때, 주로 프로젝트에서 사용하는 프로토콜, 프로젝트의 소유권, 그리고 컨트롤러를 현재 인프라와 어떻게 통합할 수 있는지를 고려합니다.
비교 항목 | APISIX Ingress Controller | Traefik |
---|---|---|
소유권 | Apache Software Foundation(ASF) | Traefik Labs |
프로토콜 | Apache 2.0 | MIT |
출시 시간 | 2019년 6월 | 2015년 8월 |
consul | 지원 | 지원 |
nacos | 지원 | 미지원 |
Eureka | 지원 | 미지원 |
etcd | 지원 | 지원 |
zookeeper | 지원 | 지원 |
DNS | 지원 | 미지원 |
위 비교는 컨트롤 플레인과 데이터 플레인 모두의 내용을 포함합니다. 또한, 이 두 프로젝트는 Rancher, KubeSphere 등과 같은 다른 프로젝트와 적극적으로 협력하고 통합하고 있습니다.
이러한 관점에서, Traefik에 비해 APISIX는 기본 구성 요소와 더 잘 통합할 수 있는 능력을 가지고 있습니다.
기술 선택을 할 때 사용 중인 기본 구성 요소의 장단점을 고려할 수 있습니다.
사용자 피드백 (사용 사례)
Horizon robotics는 Traefik에서 Apache APISIX로 마이그레이션했으며, 주로 다음과 같은 측면을 고려했습니다:
- Annotation을 통해 추가된 구성이 쉽게 재사용할 수 없었습니다.
- Traefik의 기본 동작이 NGINX와 다르기 때문에 사용 중 혼란을 초래했습니다.
Horizon이 Apache APISIX Ingress Controller로 전환한 후, APISIX Ingress Controller의 풍부한 확장 생태계 덕분에 대부분의 요구 사항을 내부 플러그인으로 달성할 수 있었습니다. 또한, 사용자는 APISIX Ingress Controller의 ApisixRoute 리소스를 통해 플러그인의 구성을 직접 정의할 수 있으며, 이는 매우 직관적입니다. 또한, ApisixPluginConfig를 통해 플러그인 모듈의 구성을 설정할 수 있으며, 다른 ApisixRoute 리소스에서 참조할 수 있습니다.
APISIX Ingress Controller는 우수한 데이터 플레인 성능을 가지고 있으며, 증가하는 트래픽을 효율적으로 처리할 수 있어 성능 병목 현상이 없습니다.
Horizon 외에도, igetcool 및 gwwisdom과 같은 회사들도 APISIX Ingress Controller를 사용하여 Traefik을 대체했습니다. 더 많은 클라이언트 사용 사례는 사용 사례를 참조하십시오.
또한, Apache APISIX는 매우 활발한 커뮤니티를 가지고 있으며, Github, Slack 등의 채널에서 빠른 응답과 해결책을 얻을 수 있습니다.
결론
이 글은 Apache APISIX Ingress Controller와 Traefik을 프로토콜, 확장성, 생태계 측면에서 비교했습니다.
Apache Ingress는 확장성과 생태계 통합 측면에서 일정한 장점을 가지고 있습니다. 사용자는 APISIX Ingress Controller의 기능을 확장하고 일부 기본 구성 요소와 더 효율적으로 통합할 수 있습니다.
이 글이 Kubernetes Ingress 컨트롤러를 선택하는 데 도움이 되길 바랍니다.