DevOps/Kubernetes

K8S에서 Kong API Gateway 사용하기

Jen'_' 2022. 10. 7. 20:28
반응형

개요

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

user 화면

 

두개의 페이지를 만들었습니다.

위의 어플리케이션을 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

반응형