문득 이전 쿠버네티스 프로젝트를 공부하다가 다음과 같은 생각이 들었다.
"Ingress Controller가 Loadbalancer랑 하는 역할이 비슷한거 같은데 뭐지..?"
이를 위해서 이번에는 두개의 차이점과 어떻게 사용할 수 있는지에 대해 정리해보았다.
Ingress Controller란?
쿠버네티스 클러스터 바깥에서 들어오는 HTTP/HTTPS 트래픽을 클러스터 안의 서비스(Pod)로 라우팅해주는 컨트롤러
아래 그림을 보면, 쿠버네티스내의 노드에 여러 서비스가 동작하고 있다고 하면 Ingress Controller는 외부로 부터 요청을 받아 특정 path 기반으로 적자한 서비스의 ClusterIP에 맞춰 라우팅을 해준다.
좀 아래 사진을 통해 좀 더 자세히 알아보면, 외부 클라이언트는 파드에 직접 접근하는 것이 아닌, Ingress Controller를 통해 한번 거쳐서 Ingress Controller가 적절한 서비스를 실행시켜준다.
그래서 실제 코드를 보면, /login path는 로그인 서버를 실행하고 /pay path는 pay 서버를 실행시켜준다고 보면 된다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: myapp.example.com
http:
paths:
- path: /login
pathType: Prefix
backend:
service:
name: login-service
port:
number: 8080
- path: /pay
pathType: Prefix
backend:
service:
name: pay-service
port:
number: 8080
그리고 중요한 점은, nginx ingress도 결국에는 쿠버네티스의 하나의 pod인 것이다. 먼저 인그레스 컨트롤러의 서비스인 LB로 요청이 들어오고, 이제 nginx ingress controller가 위의 yaml의 규칙에 맞게 적절한 서비스로 로드 밸런싱 해준다.
그렇다면, 저기서 Load Balancer가 왜 쓰였을까에 대해 알아보겠다.
Load Balancer가 왜 쓰일까?
결론부터 살펴보면
Ingress Ip가 외부로 노출될 수 있도록 도와준다
Ingress만 LoadBalancer로 외부로 노출시키고 나머지 어플리케이션의 Service는 ClusterIP로 변경할 수 있다.(외부 노출X)
참고자료:
[Kubernetes] Nginx Ingress Controller 활용해보기
Ingress는 Kubernetes Service 리소스에 대한 외부에서의 접근을 관리하는 리소스로, 다음과 같은 역할과 기능을 가진다.
velog.io
쿠버네티스 인그레스(Ingress) & 인그레스 컨트롤러(Ingress Controller) + 모니터링
인그레스(ingress)는 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할 지 정의해둔 규칙들의 모음이다.인그레스는 아래와 같은 기능들을 제공한다.외부에서 접속가능한 URL 사용트래
velog.io
'DevOps&Cloud' 카테고리의 다른 글
Helm이란? (0) | 2025.04.23 |
---|---|
Reverse Proxy, LoadBalancer의 차이 알아보기 (0) | 2025.04.14 |
왜 Docker Compose를 써야하는가 (0) | 2025.03.25 |
Serverless 아키텍쳐를 쓰면 좋은 이유(feat: Baas, Fass) (0) | 2025.03.13 |
MSA: Micro Service Architecture 적용기(2) (1) | 2025.01.10 |