DevOps/Docker & K8S
쿠버네티스 인그레스(Ingress)
SKaSha
2020. 2. 12. 12:52
인그레스는 서비스 앞에 존재하는 일종의 로드 밸런서이다.
쿠버네티스의 서비스는 L4 레이어로 TCP 단에서 Pod들을 밸런싱하기 때문에 TLS나, VirtualHost와 같이 여러 호스트명을 사용하거나 호스트명에 대한 라우팅이 불가능하고, URL Path에 따른 서비스간 라우팅이 불가능하다.
MSA 환경에서는 하나의 어플리케이션이 하나의 URL로 매핑되는 경우가 많은데, 이를 위해 MSA 서비스간의 라우팅을 하기 위해서는 API 게이트웨이를 사용하는 경우가 많다.
이 경우에는 API 게이트웨이에 대한 관리포인트가 생기기 때문에, URL 기반의 라우팅 정도라면 L7 로드밸런서로 해당 기능을 제공한다.
쿠버네티스에서 HTTP(S)기반의 L7 로드밸런싱 기능을 제공하는 컴포넌트를 Ingress라고 한다.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-ingress
spec:
rules:
- http:
paths:
- path: /users/*
backend:
serviceName: users-node-svc
servicePort: 80
- path: /products/*
backend:
serviceName: products-node-svc
servicePort: 80
위 코드는 요청 URL에 따라 트래픽을 다른 목적지로 라우팅하는 코드이다. (팬아웃 Fanout)
인그레스는 URL 기반 라우팅뿐만 아니라 HTTP host 헤더(이름 기반 가상 호스팅)를 이용하여 라우팅 할수도 있다.
인그레스 구현체
GCP의 경우 글로벌 로드 밸런서를 사용하고 있고
대표적인 오픈소스 구현체로는 nginx-ingress 가 있다.