Ingress
- Ingress는 클러스터 외부에서 클러스터 내부 Service로 HTTP와 HTTPS 경로를 열어준다.
- Ingress resource에 규칙을 정하여 트래픽을 컨트롤할 수 있다(Load Balance).
- Ingress는 외부에서 서비스로 접속이 가능한 URL, 로드 밸런스 트래픽, SSL/TLS 종료, 이름 기반의 가상 호스팅 기능을 구성할 수 있다.
- Ingress Controller는 일반적으로 로드 밸런서(ex. Nginx)를 사용해서 Ingress를 수행할 책임이 있으며, 트래픽을 처리하는데 도움이 되도록 에지 라우터 또는 추가 프런트 엔드를 구성할 수도 있다.
- Ingress는 임의의 포트 또는 프로토콜을 노출시키지 않는다.
- HTTP와 HTTPS 이외의 서비스를 인터넷에 노출하려면 보통 Service.Type=NodePort 또는 Service.Type=LoadBalancer 유형의 서비스를 사용한다.
Ingress 작동 방식
- 외부 요청이 들어오면 Ingress 컨트롤러가 Ingress 규칙에 따라 해당 트래픽을 적절한 서비스로 라우팅하고 서비스는 트래픽을 받아서 클러스터 내의 Pod로 전달
전제조건
- Ingress Controller가 실행되고 있어야 한다.
- 예를 들어 Ingress-Nginx Controller가 배포 상태여야 한다.
Ingress resource
- 클러스터 내에서 트래픽을 어떻게 라우팅할지 정의
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx-example
rules:
- http:
paths:
- path: /testpath
pathType: Prefix
backend:
service:
name: test
port:
number: 80
- Ingress object는 유효한 DNS 서브도메인 이름이여야 한다.
- DNS 서브도메인 이름 규칙
- 253자를 넘지 말아야 한다.
- 소문자와 영숫자 - 또는 . 만 포함한다.
- 영숫자로 시작한다.
- 영숫자로 끝난다.
- Ingress object는 위 예시에서
minimal-ingress
를 가르킨다.
Ingress Controller
- Ingress resource에 정의된 규칙을 실제로 구현하는 소프트웨어
- 여러 ingress controller들이 있지만 ingress-nginx ingress controller가 가장 많이 사용됨.
Ingress rules
- Ingress 규칙은 외부에서 클러스터 내의 서비스로 트래픽을 어떻게 라우팅할지 정의한다.
- 이 규칙들은 Ingress 리소스 내의
spec
섹션에 지정되며, 주로 HTTP와 HTTPS 트래픽을 대상으로 한다.
- Ingress 규칙을 사용하면 단일 IP 주소를 여러 서비스에 매핑하고, URL 경로, 호스트 이름, 또는 둘 모두를 기반으로 트래픽을 라우팅할 수 있다.
Ingress 규칙 구성 요소
- Host
- 클라이언트가 지정한 HTTP 헤더의 호스트 부분.
- 특정 호스트에 대한 요청을 특정 서비스로 라우팅하는 데 사용됨
- 호스트를 지정하지 않으면 Ingress 컨트롤러는 모든 호스트에 대한 트래픽을 처리
- Path
- URL의 Path(ex. /service1)를 사용하여 트래픽을 특정 서비스로 라우팅할 수 있다.
- Backend
- 경로와 호스트 규칙이 일치하는 요청을 처리할 서비스.
- 백엔드는 서비스 이름과 서비스 내의 포트를 지정.
Ingress 규칙 예시
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /service1
pathType: Prefix
backend:
service:
name: service1
port:
number: 80
- path: /service2
pathType: Prefix
backend:
service:
name: service2
port:
number: 80
경로 유형
- Exact: 경로가 정확히 일치해야 한다.
- Prefix: 지정된 경로로 시작하는 모든 요청이 일치함.
- ImplementationSpecific: Ingress 컨트롤러에 따라 경로 매칭 방식이 결정.
추가 설정과 어노테이션
- Ingress 리소스에 어노테이션을 추가함으로써, Ingress 컨트롤러의 특정 동작을 세부적으로 제어할 수 있다.
- 예를 들어, URL 재작성, SSL/TLS 종료, CORS 정책 설정 등이 가능함.
Troubleshoot
kubectl describe ingress <ingress-name>
명령어를 사용하여 ingress 설정을 확인
Reference