• 플러그인: binary 형태.

  • 플러그인 만드는 방법

    준비물:

    Docker : 플러그인 빌더 실행을 위해 필요함

    구현해야 하는것:

    인터페이스에서 요구하는 함수

    Go version - krakend가 사용하는 버전과 같아야함

    krakenD의 빌드, 실행 환경 == 플러그인 빌드, 실행환경 조건을 만족해야함

    완성한 플러그인은 krakend.json 파일에 반드시 추가해야함

    구현과정

    1. 개발할 플러그인 유형: auth middleware , session check, filter blacklisted session

      1. HTTP server plugins 유형임.
      2. 어떤 설정 옵션값을 사용할 수 있도록 할까..?
        1. cookie_name: cookie로 검증할 때 검증하려고 하는 cookie의 이름

        2. jwk_url: 토큰 검증 secret key 를 요청할 url (auth에 심기)

          ***검증순서: cookie → cookie 없으면 authorization Header → 그래도없으면실패!

    2. 1의 조건을 golang으로 구현 - 인터페이스 및 커스텀 로직

      1. go 파일에 인터페이스 구현 - HTTP server plugin interface 구현하면 됨 (https://www.krakend.io/docs/extending/http-server-plugins/)
      2. HTTP server 인터페이스 구현해야 하는것들
        • Registerer interface
    3. 의존성 체크 및 컴파일

      1. krakend check-plugin 명령어를 플러그인 프로젝트 컨테이너 내에서 실행해서 의존성 충돌 확인할것
      2. 컴파일 (같은 architecture type 사용..): 아래 둘 중 하나 사용
        1. 기본적으로 krakend를 docker로 배포한다면 플러그인 쓰려면 alpine builder 써야한다.
      AMD64 krakend/builder:2.10.0
      ARM64 krakend/builder:2.10.0 with cross-compile instructions

      AMD64라면 플러그인 있는 곳에서 아래 명령어로 실행하면 됨.

      so 확장자의 바이너리 파일이 생성된다.

      docker run -it -v "$PWD:/app" -w /app krakend/builder:2.10.0 go build -buildmode=plugin -o yourplugin.so .
      
    4. 실행 가능여부 확인

      krakenD가 해당 플러그인을 load할수있는지 체크해야 한다:

      krakend test-plugin -s yourplugin.so
      [OK] MODIFIER   yourplugin.so
      
    5. 플러그인 주입 및 krakend 실행

      krakenD 디렉토리에 복사해서 넣고

      plugin configuration에 추가.

      https://www.krakend.io/docs/extending/injecting-plugins/

      import 예

      {
          "version": 3,
          "plugin": {
              "pattern":".so", -- 플러그인 찾는 패턴임. 이름에 이런 패턴이 있으면 
              "folder": "/opt/krakend/plugins/"  -- 플러그인의 위치
          }
      }
      

      만약 플러그인에 특별한 설정 등이 더 필요하다면 아래와 같이 더 기재 가능하다.

      	/*
      	   "extra_config":{
      	       "plugin/http-server":{
      	           "name":["krakend-server-example"],
      	           "krakend-server-example":{
      	               "path": "/some-path"
      	           }
      	       }
      	   }
      	*/
      

      의존성 수정 명령어

      https://www.krakend.io/docs/extending/check-plugin/

      krakend check-plugin -s ~/Downloads/go.sum -f