K8S에서 Kong API Gateway 사용하기
개요
Kong Ingress Controller는 k8s 리소스를 kong 리소스로 변환시키는 역할을 합니다.
아래 그림처럼 K8S Ingress는 Kong Route로 매핑이 되는데, 이를 이용하여 Express 어플리케이션을 Kong API Gateway을 사용해서 외부로 노출 시키겠습니다.
참고: https://docs.konghq.com/kubernetes-ingress-controller/latest/concepts/design/#translation
pod, service 확인
Express 어플리케이션의 pod, service를 올렸습니다.
port-forward
어플리케이션 화면을 확인하기 위해 포트 포워딩을 하겠습니다.
$ kubectl port-forward svc/web 3000:3000
localhost:3000
localhost:3000/users
두개의 페이지를 만들었습니다.
위의 어플리케이션을 kong에 연결하겠습니다.
Kong 리소스 확인
Ingress 배포
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kong-test
spec:
ingressClassName: kong
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 3000
|
cs |
ingressClassName을 kong으로 지정합니다.
HTTP 요청 경로: / --> k8s service 요청 경로: /
Ingress 확인
kong_url
kong_url/users
kong gateway를 사용해서 어플리케이션에 접근했습니다!!
Rewrite 인그레스 옵션
실무에서 많이 사용할 rewrite 옵션을 정리하겠습니다.
ingress-nginx-controller에 nginx.ingress.kubernetes.io/rewrite-target 옵션과 동일합니다.
konghq.com/strip-path
- true로 설정하면 요청이 서비스로 전송되기 전에 수신 규칙에 지정된 경로 부분이 제거됩니다.
Ingress 배포
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kong-test
annotations:
konghq.com/strip-path: "true" # 추가
spec:
ingressClassName: kong
rules:
- http:
paths:
- path: /somthing # 변경
pathType: Prefix
backend:
service:
name: web
port:
number: 3000
|
cs |
HTTP 요청 경로: /somthing --> k8s service 요청 경로: /
kong_url/somthing
kong_url/somthing/users
정상적으로 접속됩니다.
감사합니다^.^
참고
https://docs.konghq.com/kubernetes-ingress-controller/latest/concepts/design/#main
https://docs.konghq.com/gateway/3.0.x/get-started/services-and-routes/
https://docs.konghq.com/kubernetes-ingress-controller/latest/guides/using-rewrites/#rewriting-the-path