All Articles

k8s - [Ingress] Nginx

Ingress에 의해 여러 버전의 서비스로 트래픽을 분산시켜줄 수 있다. 대표적 사용 용도로 Service LoadBalancing, Canary Upgrade, Https, Ingress Controller 등이 있다.

인그레스(Ingress)의 대표적인 사용 용도

Service LoadBalancing

(우선, Service가 여러개 있다고 가정한다.) 사용자가 접근한 URL의 path(rule이라고 한다)가 무엇이냐에 따라 그 트래픽을 각 백엔드(직접적으로는 Service, 간접적으로는 그에 이어진 Pod)로 넘겨줄 수 있다.

  • 예시: 쇼핑페이지 Pod이 연결된 Service 하나, 고객센터 Pod이 연결된 Service 하나, 주문 서비스 Pod이 연결된 Service 하나가 있다고 할 때 사용자가 접근한 URL이 /이면 쇼핑페이지, /customer이면 고객센터페이지, /order이면 주문서비스페이지로 연결될 수 있게 해줄 수 있음

Canary Upgrade

기존버전의 서비스와 별개로, 카나리 배포를 하기 위해 새로운 버전의 서비스를 띄웠다면, weight옵션을 통해 카나리 서비스에 원하는 비중의 트래픽이 전달되도록 할 수 있다.

Https

Secret을 통해 인증서를 담고, Ingress의 tls옵션을 통해 사용자가 “https를 붙여야만” 서비스에 접근 가능하도록 만들 수 있다.

Ingress Controller

Ingress의 구현체를 만들기 위해서는 별도의 플러그인을 설치해야하는데, 이를 Ingress Controller라고 하고 대표적으로 Nginx가 있다.

  • host: 트래픽 관리할 도메인네임
  • pathserviceName: 트래픽 전달을 위해 path에서 serviceName(백엔드에 해당하는 서비스명)으로의 맵핑

참고로 Ingress Controller는 새로운 네임스페이스에 만들어지게 되고 그 Pod 안에 여러 Ingress가 있을 수 있다.

[참고]

물론, 이게 로드밸런서 같은 역할을 하려면 외부에서 접근 가능해야하므로 이 Ingress Controller Pod 앞에 Service를 붙여줘야한다. 즉, Ingress Controller Service -> Ingress Controller Pod -> 각 페이지의 Service -> 각 페이지의 Pod 이런 식으로 트래픽이 전달되는 것이고, Ingress Controller Pod -> 각 페이지의 Service이 단계에 rule(path, weight, header 등)에 따라 로드밸런싱이 적용되는 것이다.


[참고자료]
https://www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88