티스토리 뷰
[네트워크] 쿠버네티스 Ingress가 이상해진 이유
Isaac_Lee 2023. 6. 12. 23:39Ingress 이놈. HAProxy를 붙였더니 갑자기 이상하게 안되던 놈.
분명 Control plane이 하나인 클러스터에서는 정상적으로 동작했으나, 쿠버네티스 HA구성을 위해 HAProxy를 붙이자마자 이상하게 예전처럼 라우팅을 해주지 않았다.
원래는 위의 그림과 같이 내가 ingress 리소스를 통해 정의한 라우팅 규칙에 따라서 클러스터 내부에서 돌아가고 있는 서비스에게 외부의 트래픽을 전달해주어야 한다. /argo로 전달되면 ArgoCD로, /grafana면 Grafana로 전달해야 한다.
이때 각 서비스에서는 각각 설정된 url 경로에 따라서 동작하기 때문에 서비스 별로 중복되는 경로가 있을 수 있다. 가장 대표적으로 /login 경로가 있겠다. 대부분의 서비스는 로그인으로 권한 관리를 하기 때문이다. 이런 경우 Base URL이라는 것을 설정하여 서비스를 구분한다.
ArgoCD는 /argo 경로를 base url로 갖고 subpath들을 자신의 서비스에서 사용하는 url 경로로 사용한다. 마찬가지로 Grafana 서비스는 /grafana 경로를 base url로, subpath를 서비스에서 사용하는 url 경로로 사용한다.
하지만 /argo는 base url의 역할을 할 뿐 실제 서비스의 url path와는 무관해야 한다. 예를 들어 ArgoCD의 경우 /argo로 접속하면 ArgoCD 서비스의 / 경로로 들어가서 /login 경로로 redirect 된다고 하자. 이때 속에서는 /과 /login으로 동작하지만 웹 브라우저에서 보이는 경로는 /argo/와 /argo/login이다. 아래 그림을 참고하자.
이런 Base URL의 설정과 subpath를 서비스의 경로로 사용하는 부분은 Nginx Ingress controller를 사용하는 경우 Ingress 리소스의 metadata.annotation으로 해당 기능을 구현할 수 있다. 정규식을 이용해서 base url 뒤 subpath를 rewrite 하여 서비스의 url로 사용하는 것이다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: argocd-ingress
namespace: argocd
spec:
rules:
- host: argocd.host.com
http:
paths:
- backend:
serviceName: argocd-server
servicePort: 80
path: /argocd(/|$)(.*)
아니 그래서 뭐가 문제였는데?
바로 여기가 문제였다. Base URL에 따라 서비스가 구분이 되고, 보통 /로 들어가면 /login으로 redirect 되는데 HAProxy를 통해 트래픽을 받다 보니 redirect 될 때 HAProxy를 거치면서 ingress가 붙여준 base url이 사라지는 것이다.....ㅠ
Ingress는 잘못이 없었다. HAProxy만 붙이면 안 되는 이유가 있었던 것이다.
다음 포스트는 사라진 base url을 유지하여 이전과 동일하게 동작하는 쿠버네티스 Ingress를 구성하는 과정을 설명해 보겠다.
'Computer Science 이야기 > TIL (Today I Learned)' 카테고리의 다른 글
[네트워크] HTTP/HTTPS와 TLS (feat. K8S) (0) | 2023.06.26 |
---|---|
[네트워크] Ingress는 아무 잘못이 없었다. (0) | 2023.06.25 |
[네트워크] 로드밸런싱과 HAProxy를 공부해보자 (K8s HA구성) (2) | 2023.06.11 |
[Frontend] Typescript, React 그리고 둘을 같이. (0) | 2023.05.10 |
[Frontend] Why Typescript? (0) | 2023.05.09 |
- Total
- Today
- Yesterday
- ssi-at
- 네트워크
- 백준
- DevOps
- github
- 타입스크립트
- SW마에스트로
- 클린코드
- 기계식 키보드
- 후기
- boj
- IT대외활동
- 합격
- 알고리즘
- 개발자
- 대전
- 파이썬
- 회고
- python3.8
- 코딩테스트
- 오픈소스
- 개발자북클럽
- 프론트엔드
- 오픈소스기여
- devcon
- 개발자밋업
- python
- 노개북
- 노마드코더
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |