InfraPlatform

오픈소스 API 플랫폼 - Apache APISIX - 플러그인(Plugin)의 개념 및 사용법

IT오이시이 2024. 12. 5. 04:57
728x90

 

오픈소스 API 플랫폼 - Apache APISIX

- 오픈 소스 API 관리 플랫폼 10종 비교
-  Apache APISIX 특징과 설치
- Apache APISIX - 아키텍처

Apache APISIX - 인증(Authentication)
- APISIX - 플러그인(Plugin)의 개념

- APISIX - 네트워크 포트 용도

- APISIX - 모니터링 및 성능 관리 도구
 

 * https://apisix.apache.org/


 

 

 

 

오픈소스 API 플랫폼 - Apache APISIX - 플러그인(Plugin)의 개념 및 사용법

 

 

 

Apache APISIX 플러그인(Plugin)의 개념 

Apache APISIX는 고성능 오픈소스 API 게이트웨이로, 다양한 플러그인을 통해 기능을 확장하고 사용자 요구에 맞게 커스터마이징할 수 있습니다. 플러그인은 APISIX의 핵심 구성 요소 중 하나로, 다양한 기능을 추가하거나 변경할 수 있는 모듈입니다.

 

플러그인의 개념


플러그인은 APISIX의 기능을 확장하거나 변경할 수 있는 모듈입니다. 플러그인은 요청을 처리하는 과정에서 특정 작업을 수행하거나, 요청과 응답을 변환하는 등의 역할을 합니다. APISIX는 다양한 내장 플러그인을 제공하며, 사용자는 필요에 따라 커스텀 플러그인을 개발할 수도 있습니다2.

 

 

플러그인의 사용법

플러그인을 사용하기 위해서는 다음과 같은 단계를 따릅니다:

  1. 플러그인 활성화:
    • 플러그인을 활성화하려면 APISIX의 Admin API를 사용하여 플러그인을 설정합니다. 예를 들어, 특정 라우트(Route)에 플러그인을 적용하려면 해당 라우트의 설정에 플러그인을 추가합니다.
  2. 플러그인 설정:
    • 플러그인의 설정은 JSON 형식으로 작성되며, 플러그인마다 고유한 설정 옵션이 있습니다. 예를 들어, rate-limiting 플러그인의 설정은 다음과 같습니다:

      {
        "plugins": {
          "rate-limiting": {
            "rate": 100,
            "burst": 10
          }
        }
      }
      
  3. 플러그인 테스트:
    • 플러그인을 활성화하고 설정한 후에는 실제 요청을 통해 플러그인이 올바르게 동작하는지 테스트합니다. 이를 위해 curl과 같은 도구를 사용하여 API 요청을 보내고 응답을 확인합니다.
  4. 플러그인 관리:
    • 플러그인의 상태를 모니터링하고, 필요에 따라 설정을 변경하거나 비활성화할 수 있습니다. APISIX 대시보드를 사용하면 플러그인의 상태를 시각적으로 확인하고 관리할 수 있습니다

 

주요 플러그인 예시

  • rate-limiting: 요청 속도를 제한하여 API 서버의 과부하를 방지합니다.
  • jwt-auth: JWT(JSON Web Token)를 사용하여 API 요청을 인증합니다.
  • grpc-transcode: HTTP와 gRPC 요청 간의 변환을 수행합니다.
  • response-rewrite: 업스트림과 APISIX에서 반환된 응답 내용을 재작성합니다

 

 

 

APISIX는 Lua로 플러그인 작성 

  Lua는 APISIX에서 기본적으로 지원하는 언어입니다. Lua로 플러그인을 작성하려면 다음 단계를 따릅니다:

1. 플러그인 파일 생성:
    apisix/plugins 디렉토리에 새로운 Lua 파일을 생성합니다. 예를 들어, example-plugin.lua 파일을 생성합니다.

2. 플러그인 코드 작성:
    플러그인 파일에 필요한 기능을 구현합니다. 예를 들어, 요청을 수정하거나, 인증을 추가하는 등의 작업을 수행할 수 있습니다.

-- example-plugin.lua
local plugin = {
    version = 0.1,
    priority = 1000,
    name = "example-plugin",
}

function plugin.rewrite(conf, ctx)
    -- 플러그인 로직 구현
end

return plugin

 

APISIX에서 사용 예시

local core = require("apisix.core")
local plugin_name = "example-plugin"

local schema = {
    type = "object",
    properties = {
        header_name = { type = "string" },
        header_value = { type = "string" }
    },
    required = {"header_name", "header_value"}
}

local _M = {
    version = 0.1,
    priority = 1000,
    name = plugin_name,
    schema = schema
}

function _M.rewrite(conf, ctx)
    core.request.set_header(ctx, conf.header_name, conf.header_value)
end

return _M

 

 

3. 플러그인 등록:
    conf/config.yaml 파일에 플러그인을 등록합니다. extra_lua_path와 extra_lua_cpath를 설정하여 플러그인 경로를 추가합니다.

apisix:
  extra_lua_path: "/path/to/your/plugins/?.lua"
  extra_lua_cpath: "/path/to/your/plugins/?.so"
  plugins:
    - example-plugin

 

4. 플러그인 사용

아래와 같이 /example 경로로 요청이 들어오면, X-Example-Header 헤더가 "Hello, APISIX!" 값으로 추가됩니다.

{
    "uri": "/example",
    "plugins": {
        "example-plugin": {
            "header_name": "X-Example-Header",
            "header_value": "Hello, APISIX!"
        }
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {
            "127.0.0.1:1980": 1
        }
    }
}

 

 

728x90
반응형