플러그인: binary 형태.
플러그인 만드는 방법
준비물:
Docker : 플러그인 빌더 실행을 위해 필요함
구현해야 하는것:
인터페이스에서 요구하는 함수
Go version - krakend가 사용하는 버전과 같아야함
krakenD의 빌드, 실행 환경 == 플러그인 빌드, 실행환경 조건을 만족해야함
완성한 플러그인은 krakend.json 파일에 반드시 추가해야함
구현과정
개발할 플러그인 유형: auth middleware , session check, filter blacklisted session
cookie_name: cookie로 검증할 때 검증하려고 하는 cookie의 이름
jwk_url: 토큰 검증 secret key 를 요청할 url (auth에 심기)
***검증순서: cookie → cookie 없으면 authorization Header → 그래도없으면실패!
1의 조건을 golang으로 구현 - 인터페이스 및 커스텀 로직
의존성 체크 및 컴파일
| 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 .
실행 가능여부 확인
krakenD가 해당 플러그인을 load할수있는지 체크해야 한다:
krakend test-plugin -s yourplugin.so
[OK] MODIFIER yourplugin.so
플러그인 주입 및 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