1.2.2.2.2 NGINX Ingress Controller에서 PATH 기반 라우팅
PATH 기반 기본 라우팅 테스트
가장 기본적인 라우팅으로 URL PATH에 따라 라우팅 서비스를 달리하는 경우입니다.
-
테스트를 위한 샘플 앱을 배포합니다.
배경 색깔이 다른 두개의 웹페이지를 배포합니다.
kubectl create deployment nginx-blue --image=ghcr.io/thekoguryo/nginx-hello:blue kubectl expose deployment nginx-blue --name nginx-blue-svc --port 80 kubectl create deployment nginx-green --image=ghcr.io/thekoguryo/nginx-hello:green kubectl expose deployment nginx-green --name nginx-green-svc --port 80
-
ingress 설정 YAML(
path-basic.yaml
)을 작성합니다.- /blue 요청은 nginx-blue-svc 로 라우팅
- /green 요청은 nginx-green-svc로 라우팅
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-path-basic spec: ingressClassName: nginx rules: - http: paths: - path: /blue pathType: Prefix backend: service: name: nginx-blue-svc port: number: 80 - http: paths: - path: /green pathType: Prefix backend: service: name: nginx-green-svc port: number: 80
- 참고
- 기존 annotations kubernetes.io/ingress.class: nginx 에서 ingressClassName: nginx 변경
- Deprecating the Ingress Class Annotation
-
작성한
path-basic.yaml
을 배포합니다.$ kubectl apply -f path-basic.yaml ingress.networking.k8s.io/ingress-path-basic created $ kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE ingress-path-basic nginx * 152.69.xx.xx 80 39s
-
앞서 확인한 ingress controller의 EXTERNAL IP로 접속하여 결과를 확인합니다.
-
/blue 요청
-
/green 요청
-
POD 정보 확인
정의한 PATH에 따라 각각 blue, green 앱이 배포된 POD로 라우팅 된 것을 웹페이지 배경색 및 POD IP로 알 수 있습니다.
$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-blue-565656fd64-bcc8x 1/1 Running 0 19m 10.244.1.4 10.0.10.207 <none> <none> nginx-green-8c6dc77b6-29kl9 1/1 Running 0 19m 10.244.0.5 10.0.10.239 <none> <none>
-
Rewrite Target
URL PATH 라우팅 결과를 보면 /blue, /green의 Path가 최종 라우팅 되어 실행되는 앱으로 그대로 전달되는 것을 알 수 있습니다. ingress controller에서 라우팅을 위해서만 사용하고, 실제 앱의 동작을 위해서는 수정이 필요한 경우에 사용합니다.
-
ingress 설정 YAML(
path-rewrite-target.yaml
)을 작성합니다.- path: /blue -> /blue(/|$)(.*) 로 변경
- annotation 추가: nginx.ingress.kubernetes.io/rewrite-target: /$2
- 예시
- ~~/blue -> ~~/ 로 앱으로 전달
- ~~/blue/abc -> ~~/abc 로 앱으로 전달
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-path-rewrite-target annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: nginx rules: - http: paths: - path: /blue(/|$)(.*) pathType: ImplementationSpecific backend: service: name: nginx-blue-svc port: number: 80 - http: paths: - path: /green(/|$)(.*) pathType: ImplementationSpecific backend: service: name: nginx-green-svc port: number: 80
- 참고
- pathType: Prefix인 경우 path에 와이드 카드가 있는 경우 경고문구가 출력됨. 이를 위해 pathType: ImplementationSpecific 변경
-
앞선
path-basic.yaml
를 삭제하고path-rewrite-target.yaml
를 배포합니다.$ kubectl delete -f path-basic.yaml ingress.networking.k8s.io "ingress-path-basic" deleted $ kubectl apply -f path-rewrite-target.yaml ingress.networking.k8s.io/ingress-path-rewrite-target created $ kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE ingress-path-rewrite-target nginx * 152.69.xxx.xxx 80 82s
-
앞서 확인한 ingress controller의 EXTERNAL IP로 접속하여 결과를 확인합니다.
-
~~/blue 요청
- 라우팅된 앱에서는 /blue가 빠지고 /로만 수신됨
-
~~/blue/abc 요청
- 라우팅된 앱에서는 /blue가 빠지고 /abc로만 수신됨
-
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.