Kong 시리즈 - 15 - 맞춤형 플러그인 for Kong Ingress Controller
먼저 사용자 정의 플러그인에 대한 Lua 코드를 준비합니다.
mkdir myheader
cd myheader
vi handler.lua
local MyHeader = {}
MyHeader.PRIORITY = 1000
function MyHeader:header_filter(conf)
-- do custom logic here
kong.response.set_header("myheader", conf.header_value)
end
return MyHeader
vi schema.lua
return {
name = "myheader",
fields = {
{ config = {
type = "record",
fields = {
{ header_value = { type = "string", default = "twingao", }, },
},
}, },
}
}
tree myheader/
myheader/
├── handler.lua
└── schema.lua
Configmap 또는 Secret을 만들고 사용자 정의 플러그인 myheader를 Kubernetes에 로드합니다.
kubectl create configmap kong-plugin-myheader --from-file=myheader -n kong
kubectl create secret generic kong-plugin-myheader --from-file=myheader
kubectl get cm
NAME DATA AGE
kong-plugin-myheader 2 25s
kubectl get secret
NAME TYPE DATA AGE
kong-plugin-myheader Opaque 2 29s
Kong 시리즈-04-Helm에 따라 Kong 1.3.0 with PostgreSQL and with Ingress Controller가 helm에 설치된 Kong을 설치한 경우, 사용자 정의 플러그인을 Kong에 불러오려면 helm의values를 수정해야 합니다.yaml 파일의 설정입니다. 그러나 응용 프로그램의 일부 설정을 업그레이드하는 방법을 알지 못하여gateway 응용 프로그램을 마운트 해제하고 자동으로 생성된 pvc를 삭제할 수 있습니다.
helm uninstall gateway
kubectl delete pvc data-gateway-postgresql-0
kong을 직접 다운로드하고values를 수정합니다.yaml 파일 설정.Kong을 재배치합니다.사용자 정의 플러그 인이 자동으로 로드됩니다.
helm pull stable/kong --version 0.26.1 --untar
vi kong/values.yaml
#
plugins:
configMaps:
- name: kong-plugin-myheader
pluginName: myheader
plugins:
secrets:
- name: kong-plugin-myheader
pluginName: myheader
helm install gateway kong \
--set admin.useTLS=false \
--set admin.nodePort=32444 \
--set proxy.http.nodePort=32080 \
--set proxy.tls.nodePort=32443 \
--set replicaCount=2 \
--set ingressController.enabled=true \
--set plugins.configMaps.name=kong-plugin-myheader \
--set plugins.configMaps.pluginName=myheader
--set postgresql.persistence.storageClass="nfs-client" \
--set postgresql.persistence.size=1Gi
설정을 보면 사용자 정의 플러그인을 불러온 것을 알 수 있습니다.
curl http://192.168.1.55:32444 -s | python -m json.tool
{
......
"loaded_plugins": {
"acl": true,
"aws-lambda": true,
"azure-functions": true,
"basic-auth": true,
"bot-detection": true,
"correlation-id": true,
"cors": true,
"datadog": true,
"file-log": true,
"hmac-auth": true,
"http-log": true,
"ip-restriction": true,
"jwt": true,
"key-auth": true,
"kubernetes-sidecar-injector": true,
"ldap-auth": true,
"loggly": true,
"myheader": true, #
"oauth2": true,
"post-function": true,
"pre-function": true,
"prometheus": true,
"proxy-cache": true,
"rate-limiting": true,
"request-size-limiting": true,
"request-termination": true,
"request-transformer": true,
"response-ratelimiting": true,
"response-transformer": true,
"session": true,
"statsd": true,
"syslog": true,
"tcp-log": true,
"udp-log": true,
"zipkin": true
},
......
}
효과를 시험해 보다.
vi myheader-plugin.yaml
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: myheader-plugin
plugin: myheader
vi echo-server-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: echo
name: echo
spec:
ports:
- port: 8080
name: high
protocol: TCP
targetPort: 8080
selector:
app: echo
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: echo
name: echo
spec:
replicas: 2
selector:
matchLabels:
app: echo
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: echo
spec:
containers:
- image: e2eteam/echoserver:2.2
name: echo
ports:
- containerPort: 8080
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
resources: {}
vi echo-server-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: echo-server-ingress
annotations:
plugins.konghq.com: myheader-plugin
spec:
rules:
- http:
paths:
- path: /bar
backend:
serviceName: echo
servicePort: 80
kubectl apply -f myheader-plugin.yaml
kubectl apply -f echo-server-service.yaml
kubectl apply -f echo-server-ingress.yaml
curl -I http://192.168.1.55:32080/bar
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Connection: keep-alive
Date: Thu, 26 Dec 2019 10:05:24 GMT
Server: echoserver
myheader: twingao # header
X-Kong-Upstream-Latency: 2
X-Kong-Proxy-Latency: 8
Via: kong/1.3.0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kong API Gateway GUI/Konga 구축Mac環境の記事ですが、Windows環境も同じ手順になります。環境依存の部分は読み替えてお試しください。 목적 이 기사를 끝까지 읽으면 다음을 할 수 있습니다. No. 개요 키워드 가장 환경 구축 VirtualBox, Vag...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.