20줄 자바스크립트에서 Kong Gateway 플러그인 만들기

우리는 최근에 앉아서 다음 Kong Gateway 플러그인 개발 도구 패키지 (PDK) 의 언어를 토론했다.세계적으로 자바스크립트 개발자의 수와 사용 가능한 라이브러리와 디버깅 도구의 다양성을 감안하면 합리적인 선택이 하나밖에 없다.나는 Kong Gateway (OSS) 2.4 release와 이 점을 공유할 수 있어서 매우 기쁘다. 너희들은 지금 이 기능을 사용할 수 있게 되었다!
새로운 JavaScript PDK의 강력한 기능을 보여주기 위해 우리는 플러그인을 실현할 것이다. 이 플러그인은 X-Clacks-Overhead을 모든 응답에 추가할 것이다. 이것은 Terry Pratchett 작업에 기반한 비표준화된 HTTP 헤더이다.

개발 환경 안내


Kong Gateway의 JavaScript 플러그인은 하나의 노드를 실행하여 작동합니다.js 서버는 Kong Gateway와 같은 기기에 위치하고 msgpack로 메시지를 전달합니다.
Kong Gateway와 노드를 동시에 실행할 수 있는 개발 환경이 필요하다는 뜻이다.js 프로세스.너는 로컬 기계에 이것을 설정할 수 있지만, 일을 더욱 간단하게 하기 위해서, 나는 너를 위해 docker 기반의 환경을 준비했다.
이미지를 다운로드하고 노드를 구축하는 데 1, 2분이 걸릴 수 있습니다.js 환경.지금 읽을 때 백그라운드에서 실행하는 것이 좋습니다.
$ git clone https://github.com/Kong/docker-kong-js-pdk
$ cd kong-js-pdk-dev
$ docker-compose build

첫 번째 플러그인 만들기


우리가 만든 환경에서 제공하는 설정 읽기 plugins 디렉터리의 모든 플러그인입니다.첫 번째 플러그인을 만들지 않았기 때문에 비어 있습니다.
JavaScript PDK는 JS 파일의 이름을 플러그인의 이름으로 사용합니다.계속해서 clacks.js 디렉토리에 다음과 같은 내용의 plugins라는 파일을 만듭니다.
class ClacksPlugin {
  async access(kong) {
    await kong.response.setHeader(`X-Clacks-Overhead`, "GNU Terry Pratchett");
  }
}

module.exports = {
  Plugin: ClacksPlugin,
  Version: "0.1.0"
};
전달kong 방법의 access 대상은 플러그인 서버에서 제공하는 자바스크립트 PDK의 실례이다.이것은 플러그인에 kong-pdk 을 추가할 필요가 없다는 것을 의미한다. 왜냐하면 이것은 자동으로 제공되기 때문이다.
게이트웨이 요청의 라이프 사이클에서 HTTP 요청은 다음 다섯 단계로 나눌 수 있습니다.
- certificate - 연결에 SSL/TLS가 설정된 경우 요청마다 한 번 수행
- rewrite – API 게이트웨이에서 라우팅을 수행하기 전에 수행
- access - 모든 루트가 완료되었습니다. 플러그인은 요청이 어느 서비스에 연결되었는지 알고 있습니다.API 게이트웨이가 업스트림으로 요청하기 전의 마지막 단계입니다.
- response - 업스트림에서 응답을 조작할 수 있습니다.이 단계를 실현하면 성능 손실을 가져올 수 있습니다. 왜냐하면 요청 버퍼를 사용하기 때문입니다.
- log – 요청이 완료되면 수행

플러그인 사용


현재 실행 중인 환경에서는 Kongdeclarative config 기능을 사용합니다.이것은 새 플러그인을 사용하기 위해 설정 파일을 업데이트해야 한다는 것을 의미합니다.config/kong.yml 를 열면, 대리 mockbin으로 정의된 서비스를 볼 수 있습니다.조직:
services:
  - name: example-service
    url: https://mockbin.org
우리의 파일 이름은 clacks.js이기 때문에 우리의 플러그인은 clacks이라고 불릴 것이다.이제 정의에서 플러그인을 활성화합니다.
services:
  - name: example-service
    url: https://mockbin.org
    plugins:
      - name: clacks
Kong Gateway는 allowlist의 플러그인만 안전하게 사용할 수 있도록 하기 때문에 clacks 이 목록에 추가해야 합니다.docker-compose.yml를 열고 다음과 같이 KONG_PLUGINS 값을 편집합니다.
KONG_PLUGINS: bundled,clacks

청구


이제 API gateway 새 플러그인을 실행할 준비가 되었으니 시작합시다.
$ docker-compose up
docker-compose.yml 파일은 API 게이트웨이 포트를 로컬 시스템으로 전달합니다.이것은 우리가 localhost:8000에 우리의 서비스를 테스트할 것을 요청할 수 있다는 것을 의미한다.
$ curl -I localhost:8000

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Clacks-Overhead: GNU Terry Pratchett
...snip...
응답에서 X-Clacks-Overhead 제목을 볼 수 있습니다. 이것은 우리의 플러그인이 예상대로 작동한다는 것을 의미합니다.

구성 가능


우리가 오늘 구축한 맞춤형 자바스크립트 플러그인은 한 가지 일만 하고 잘 하는 간단한 플러그인입니다.플러그인 설정을 사용해서 이런 행동을 맞춤형으로 설정하는 방법을 보여 드리려고 합니다.
사용자 정의 헤더가 필요한지 여부X-에 대한 지속적인 토론이 있었다.플러그인을 설정 가능한 것으로 설정하면 X- 접두사를 사용할 지 여부를 결정할 수 있습니다.Schema property 말미module.exportsclacks.js 제어 플러그인 설정을 사용합니다.기본값이 use_prefix인 부울 값을 정의하는 엔트리를 추가합니다.
module.exports = {
  Plugin: ClacksPlugin,
  Schema: [{ use_prefix: { type: "boolean", default: true } }],
  Version: "0.1.0"
};
플러그인에 제공되는 모든 설정은 true 전송을 사용합니다.constructor에서 계속 포획하여 clacks.js 방법에서 사용할 수 있도록 하고 access access 를 업데이트하여 X- 실제 접두사만 추가할 수 있도록 합니다 use_prefix.
class ClacksPlugin {
  constructor(config) {
    this.config = config;
  }

  async access(kong) {
    const prefix = this.config.use_prefix ? "X-" : "";
    await kong.response.setHeader(
    `${prefix}Clacks-Overhead`,
    "GNU Terry Pratchett"
    );
  }
}
만약 우리가 지금 플러그인을 실행한다면, 플러그인의 동작은 하드코딩 X- 접두사와 같습니다.API 게이트웨이 구성config/kong.ymluse_prefix로 업데이트false합니다.
services:
  - name: example-service
    url: https://mockbin.org
    plugins:
      - name: clacks
        config:
          use_prefix: false
Ctrl+C를 눌러 API 게이트웨이를 재부팅한 다음 docker-compose up를 다시 실행하면 이제 localhost:8000 헤드가 아닌 Clacks-Overhead 헤드를 요청하고 볼 수 있습니다X-.
$ curl -I localhost:8000

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Clacks-Overhead: GNU Terry Pratchett
...snip...

RFC 6648 결론


Javascript가 20줄밖에 없습니다. Kong Gateway 플러그인이 있습니다. 완전한 설정 옵션이 있습니다.
우리가 공동으로 구축한 것은 보잘것없는 플러그인이지만, 제공된 환경과 Kong 설정에 대한 이해를 사용하면, 사용자의 마음에 맞는 플러그인을 계속 구축할 수 있습니다.
추가 플러그인 예제에 대한 자세한 내용은 다음과 같은 프레젠테이션 플러그인을 참조하십시오.

  • ( Convert GitHub API responses from JSON to YAML )

  • config ( Extract a Pokemon evolution chain from PokeAPI )
  • 질문이 있으면 config로 보내주세요.
    계속 연락하려면 Kong Nation에 가입하십시오.
    JavaScript를 사용하여 사용자 정의 Kong 플러그인을 설정하면 다음과 같은 추가 자습서가 도움이 될 수 있습니다.
  • Kong Community
  • How to Use the Kong Gateway JWT Plugin for Service Authentication
  • 4 Steps to Authorizing Services With the Kong Gateway OAuth2 Plugin
  • Getting Started With Kuma Service Mesh
    게시물이 가장 먼저Building a Kong Gateway Plugin with JavaScript에 올라왔다.

    좋은 웹페이지 즐겨찾기