오늘은 k8s (kubernetes) 환경에서 Service와 Ingress에 대해서 공부해봤습니다.
2개의 리소스는 모두 클러스내 내의 애플리케이션 간 통신 또는 외부 네트워크와 통신을 하는 역할입니다.
k8s의 Pod의 집합에 대한 네트워크 접근 방식이다.
Pod의 경우 동적으로 생성되고 제거될 수 있기때문에 Pod의 IP는 수시로 변할 수 있다.
그렇기때문에 Service를 이용해 Pod 그룹들을 추상해해서 노출 할 수 있다.
service의 Type은 크게 4가지가 있다.
Ingress는 클러스터 외부에서 내부 서비스로 HTTP, HTTPS 요청을 라우팅하는 규칙을 정의한다.
Service만 사용해서는 외부 트레픽을 처리하는데 제한이 있기 때문에 Ingress를 사용해 트래픽을 관리한다.
The Ingress concept lets you map traffic to different backends based on rules you define via the Kubernetes API.
특히 여러 Service가 있을때 하나의 IP 주소로 요청을 받아 특정 경로, 도메인 기반으로 여러 서비스를 분배할 수 있다.
뿐만아니라 TLS(SSL) 인증서를 관리할수도 있다
k8s ingress 리소스를 실제로 구현하여 http(s) 트래픽을 관리하고 라우팅한다.
Ingress 자체는 트래픅이 특정 서비스로 어떻게 라우팅 되는지에 대한 규칙을 정의하는 리소스고, 실제 동작을 위해서는 Ingress Controller가 필요하다.
Inggress Controller는 k8s api 서버와 통신하여 ingress 리소스를 모니터링한다.
Ingress Contoller의 종류
다양한 Ingress Controller가 존재하며 주로 오픈소스, 클라우드 업체들이 이를 제공한다.
Service | Ingress | |
주 목적 | 클러스터 내부 또는 외부의 서비스 간 통신 관리 | HTTP(S) 트래픽 라우팅 및 고급 제어 제공 |
지원 프로토콜 | TCP/UDP, gRPC, HTTP 등 | 주로 HTTP(S) |
라우팅 방법 | 포트 및 IP 주소 기반 라우팅 | 경로 및 도메인 이름 기반 라우팅 |
TLS/SSL 지원 | 기본적으로 지원하지 않음 | 기본적으로 TLS/SSL 종료를 지원 |
외부 노출 방법 | NodePort 또는 LoadBalancer 사용 | HTTP(S) 경로 및 도메인 이름을 통해 노출 |
설정 복잡도 | 상대적으로 간단 | Ingress Controller 필요, 복잡한 설정 가능 |
전송 계층 | L4 (애플리케이션의 트래픽 분석 X, 단순 IP와 port 기반) | L7 (애플리케이션 기반 라우팅 규칠 설정 가능) |
Service는 주로 클러스터 내부에서 파드에 대한 접근을 제공하지만, Ingress의 경우 외부에서 오는 트래픽(http, https)를 관리하고 라우팅하는 방법이다.
https://kubernetes.io/docs/concepts/services-networking/service/
https://kubernetes.io/docs/concepts/services-networking/ingress/