InfraPlatform

오픈소스 API 플랫폼 - Apache APISIX 특징과 설치(1)

IT오이시이 2024. 8. 25. 01:03
728x90

 

 
오픈소스 API 플랫폼 - Apache APISIX 특징과 설치


[머릿말]

 기존 아키텍처의 문제를 해결하는 동시에 클라우드 네이티브 환경에 활용하려면  복잡한 레거시 시스템을 비즈니스적으로 독립적으로 구성하고 새로운 시스템과 연결을 쉽게 구성해야 합니다.  

API플랫폼을 도입하는 가장 큰 숙제라고 할 수 있으며,  Loosly coupling 방식으로 로그인 인증/인가등과 복잡한 모놀리스식 비즈니스 로직을 분리하여 개발  생산성을 향상하는 방법으로도 API가 필요할 수 있습니다.

APISIX가 그러한 API플랫폼으로 가능성이 보여서 구체적인 내용들을 작성하면서 금융 분야에서도 사용 가능한지 검토해 봅니다.




Apache APISIX  

 
  소개https://github.com/apache/apisix/wiki
  프로젝트 저장소https://github.com/apache/apisix
 


Apache APISIX는 로드 밸런싱, 동적 업스트림, 카나리아 릴리스, 서킷 브레이킹, 인증 및 관찰 가능성과 같은 풍부한 트래픽 관리 기능을 제공하는 동적, 실시간, 고성능 오픈 소스 API 게이트웨이입니다.

NGINX 및 LuaJIT를 기반으로 구축된 Apache APISIX는 최대 23,000의 단일 코어 QPS와 평균 0.2밀리초에 불과한 지연으로 초고성능을 제공합니다.


API 게이트웨이인 Apache APISIX에는 다양한 애플리케이션 시나리오가 있습니다.

* 게이트웨이, Kubernetes Ingress 컨트롤러 및 서비스 메시에 활용
* API 및 마이크로 서비스 트래픽을 빠르고 안전하게 처리

 현재 Zoom, Airwallex, Lotus Cars, vivo 및 European Factory Platform과 같은 전 세계 기업 및 조직에서 테스트되고 높은 평가를 받고 있습니다.
 
 

Apache APISIX의 주요 기능:


1. 동적 라우팅:
    URI, 헤더, 매개변수 등을 기준으로 트래픽을 라우팅하고, 동적 로드 밸런싱과 트래픽 분할을 지원.
2. 플러그인 아키텍처:
   Lua 또는 다른 언어로 작성된 플러그인을 통해 기능을 확장 가능하고 속도 제한, 로깅, 인증 등의 작업을 수행.
3. 고성능:
    NGINX와 OpenResty로 구축되어 고성능 환경에 최적화되어 있으며, 초당 수백만 건의 요청을 처리할 수 있음
4. 다중 프로토콜 지원:
    HTTP, HTTPS, TCP, UDP, WebSocket 등 다양한 프로토콜을 지원하는 애플리케이션에 적합
5. 동적 구성:
   서비스를 재시작하지 않고 구성 변경이 가능하여 무중단 업데이트가 가능.
6. 관리 API:
   RESTful Admin API를 제공하여 게이트웨이를 프로그래밍 방식으로 관리하고
   CI/CD 파이프라인과 쉽게 통합할 수 있음.
7. 보안:
   SSL 종료, IP 화이트리스트, OAuth2.0, 키 인증 등 다양한 보안 기능을 제공하여 API를 보호
8. 관찰 가능성:
    Prometheus, SkyWalking과 같은 도구와의 통합을 통해 모니터링 및 성능 추적이 가능하며, 문제 진단에 도움을 줍니다.
9. 확장성:
   Lua, Python, Go 등 다양한 언어로 작성된 커스텀 플러그인을 통해 APISIX를 확장하여 유연한 대응 가능
 
 
 


 

방법 1: Docker를 이용한 APISIX  설치


Docker를 사용하면 간편하게 Apache APISIX를 실행할 수 있습니다.

1. Docker와 Docker Compose가 설치되어 있는지 확인합니다.
2. 다음 명령어로 Apache APISIX를 실행합니다:

git clone https://github.com/apache/apisix-docker.git
cd apisix-docker/example
docker-compose -p docker-apisix up -d

 
 
■  참고 :  Docker Install (도커 설치)  
1. [InfraPlatform] - Linux Docker Install
2. [DevOps] - Linux Docker와 Docker Compose 설치 - Ubuntu_Red Hat_Rocky

 


방법 2: 소스 코드로 APISIX 직접 설치

OpenResty와 etcd를 사용하여 직접 설치하는 방법입니다.

  • OpenResty 설치

 

# OpenResty 설치
sudo apt-get install -y libpcre3 libpcre3-dev libssl-dev perl make build-essential curl
curl -L https://openresty.org/download/openresty-1.21.4.1.tar.gz | tar zxvf -
cd openresty-1.21.4.1
./configure --with-luajit --without-http_redis2_module --with-http_stub_status_module
make && sudo make install

 

  • etcd 설치
# etcd 설치
wget https://github.com/etcd-io/etcd/releases/download/v3.4.15/etcd-v3.4.15-linux-amd64.tar.gz
tar xzvf etcd-v3.4.15-linux-amd64.tar.gz
cd etcd-v3.4.15-linux-amd64
sudo cp etcd etcdctl /usr/local/bin/

 

  • APISIX 설치
# APISIX 설치
git clone https://github.com/apache/apisix.git
cd apisix
make deps

 

  • APISIX 실행

conf/config.yaml 파일을 열어 필요한 설정을 구성합니다. 특히, etcd의 주소와 기타 필수 매개변수를 설정해야 합니다.

./bin/apisix start

 

  •  기타 설정 
1. 관리 API 사용
  Apache APISIX를 관리하려면 Admin API를 사용할 수 있습니다.
  기본적으로 http://127.0.0.1:9180에서 Admin API에 접근할 수 있습니다.

2. 플러그인 설정
  APISIX는 다양한 플러그인을 제공합니다. 
  conf/config.yaml에서 플러그인을 활성화할 수 있습니다.

3. 모니터링 및 로깅
  Prometheus 및 SkyWalking과 같은 도구를 사용하여
  APISIX의 상태와 성능을 모니터링할 수 있습니다.

4. 업데이트 및 유지관리
  새로운 버전이 출시되면, git pull 명령을 사용하여 최신 버전을 가져오고
  다시 빌드하여 업데이트할 수 있습니다.

 
 


 

3. Docker 프로세스 확인

 

# Docker Compose로 컨테이너 시작
docker-compose -p docker-apisix up -d


# 컨테이너 상태 확인
docker-compose -p docker-apisix ps

docker ps
docker stats <컨테이너_ID_또는_이름>


# 컨테이너 로그 확인
docker-compose -p docker-apisix logs


# 컨테이너 종료
docker-compose -p docker-apisix down

# 특정 서비스만 종료
docker-compose -p docker-apisix stop <서비스_이름>

# 컨테이너 재시작
docker-compose -p docker-apisix restart

docker-compose -p docker-apisix restart <서비스_이름>

 
ㅁ 재시작 : docker-compose -p docker-apisix restart

[root@dtest example]# docker-compose -p docker-apisix restart
[+] Restarting 1/6
[+] Restarting 2/6er-apisix-web1-1        Started                                                                                                                                        1.2s
 ✔ Container docker-apisix-web1-1        Started                                                                                                                                        1.2s[+] Restarting 4/6r-apisix-etcd-1        Restarting                                                                                                                                     1.3s
 ✔ Container docker-apisix-web1-1        Started                                                                                                                                        1.2s ⠸ Container docker-apisix-grafana-1     Restarting                                                                                                                                     1.4s
 ✔ Container docker-apisix-etcd-1        Started                                                                                                                                        1.5s[+] Restarting 5/6r-apisix-apisix-1      Restarting                                                                                                                                     1.4s
 ✔ Container docker-apisix-web1-1        Started

 
 
ㅁ 종료 : docker-compose -p docker-apisix stop

[root@dtest example]# docker-compose -p docker-apisix stop
[+] Stopping 2/5
 ✔ Container docker-apisix-grafana-1     Stopped                                                                                                                                        0.3s[+] Stopping 3/5ker-apisix-prometheus-1  Stopping                                                                                                                                       0.2s
 ✔ Container docker-apisix-grafana-1     Stopped                                                                                                                                        0.3s ⠹ Container docker-apisix-apisix-1      Stopping                                                                                                                                       0.3s
[+] Stopping 4/5ker-apisix-prometheus-1  Stopping

 
 
ㅁ 실행 : docker-compose -p docker-apisix start

[root@dtest example]# docker-compose -p docker-apisix start
[+] Running 1/5
[+] Running 1/5ocker-apisix-grafana-1     Started                                                                                                                                        0.7s
[+] Running 3/5ocker-apisix-grafana-1     Started                                                                                                                                        0.7s
 ✔ Container docker-apisix-grafana-1     Started                                                                                                                                        0.7s ⠧ Container docker-apisix-web2-1        Starting                                                                                                                                       0.8s
[+] Running 4/6ocker-apisix-web2-1        Started                                                                                                                                        0.8s
 ✔ Container docker-apisix-grafana-1     Started                                                                                                                                        0.7s ⠇ Container docker-apisix-prometheus-1  Starting

 
 
ㅁ 상태 확인 :  docker-compose -p docker-apisix ps

[root@dtest example]# docker-compose -p docker-apisix ps
NAME                         IMAGE                        COMMAND                   SERVICE      CREATED          STATUS              PORTS
docker-apisix-apisix-1       apache/apisix:3.9.0-debian   "/docker-entrypoint.…"   apisix       59 minutes ago   Up About a minute   0.0.0.0:9080->9080/tcp, :::9080->9080/tcp, 0.0.0.0:9091-9092->9091-9092/tcp, :::9091-9092->9091-9092/tcp, 0.0.0.0:9180->9180/tcp, :::9180->9180/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp
docker-apisix-etcd-1         bitnami/etcd:3.5.11          "/opt/bitnami/script…"   etcd         59 minutes ago   Up About a minute   0.0.0.0:2379->2379/tcp, :::2379->2379/tcp, 2380/tcp
docker-apisix-grafana-1      grafana/grafana:7.3.7        "/run.sh"                 grafana      59 minutes ago   Up About a minute   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
docker-apisix-prometheus-1   prom/prometheus:v2.25.0      "/bin/prometheus --c…"   prometheus   59 minutes ago   Up About a minute   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp
docker-apisix-web1-1         nginx:1.19.0-alpine          "/docker-entrypoint.…"   web1         59 minutes ago   Up About a minute   0.0.0.0:9081->80/tcp, :::9081->80/tcp
docker-apisix-web2-1         nginx:1.19.0-alpine          "/docker-entrypoint.…"   web2         59 minutes ago   Up About a minute   0.0.0.0:9082->80/tcp, :::9082->80/tcp

 
 
 

5. 설치확인

웹 브라우저에서 http://127.0.0.1:9080으로 접속하여 Apache APISIX가 정상적으로 작동하는지 확인할 수 있습니다.
 
 

6. Docker 자동 재시작 설정 

컨테이너가 실패할 경우 자동으로 재시작되도록 설정하려면 docker-compose.yml 파일에 restart 정책을 추가할 수 있습니다:

services:
  <서비스_이름>:
    image: <이미지_이름>
    restart: always
    
#restart 정책은 no, on-failure, always, unless-stopped 옵션 가능

 
 

7. 구동되는 Docker-Compose 목록 확인

docker-compose -p docker-apisix ps

NAME                         IMAGE                        COMMAND                   SERVICE      CREATED          STATUS          PORTS
docker-apisix-apisix-1       apache/apisix:3.9.0-debian   "/docker-entrypoint.…"   apisix       45 minutes ago   Up 45 minutes   0.0.0.0:9080->9080/tcp, :::9080->9080/tcp, 0.0.0.0:9091-9092->9091-9092/tcp, :::9091-9092->9091-9092/tcp, 0.0.0.0:9180->9180/tcp, :::9180->9180/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp
docker-apisix-etcd-1         bitnami/etcd:3.5.11          "/opt/bitnami/script…"   etcd         45 minutes ago   Up 45 minutes   0.0.0.0:2379->2379/tcp, :::2379->2379/tcp, 2380/tcp
docker-apisix-grafana-1      grafana/grafana:7.3.7        "/run.sh"                 grafana      45 minutes ago   Up 45 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp
docker-apisix-prometheus-1   prom/prometheus:v2.25.0      "/bin/prometheus --c…"   prometheus   45 minutes ago   Up 45 minutes   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp
docker-apisix-web1-1         nginx:1.19.0-alpine          "/docker-entrypoint.…"   web1         45 minutes ago   Up 45 minutes   0.0.0.0:9081->80/tcp, :::9081->80/tcp
docker-apisix-web2-1         nginx:1.19.0-alpine          "/docker-entrypoint.…"   web2         45 minutes ago   Up 45 minutes   0.0.0.0:9082->80/tcp, :::9082->80/tcp

* 관련 URL
  -  docker-apisix-prometheus  :  9090->9090/tcp
  -  docker-apisix-grafana  : 3000->3000/tcp
  - docker-apisix-etcd : 2379->2379/tcp, 2380/tcp
 - 웹서버 : docker-apisix-web1 : 9081,9082->80/tcp
 
[참고]
Apache APISIX Reviews 2024: Details, Pricing, & Features | G2

 

 

 

 

[참고]

1. [InfraPlatform] - Linux Docker Install
2. [DevOps] - Linux Docker와 Docker Compose 설치 - Ubuntu_Red Hat_Rocky

728x90
반응형