1. Ingress
- 외부에서 인입되는 트래픽을 내부 서비스에 효과적으로 라우팅하기 위해 Kubernetes(이하 k8s)는 Ingress라는 오브젝트를 제공한다.
Ingress Points
- 네트워킹 관점에서 인그레스 포인트(Ingress Point)는 네트워크 내부로 향하는 트래픽을 최초로 수신하는 진입점 역할을 한다.
- 외부로부터 유입된 모든 트래픽은 먼저 이 문지기 역할을 하는 Ingress Points에서 처리된다.
- Ingress Point는 어떤 트래픽을 로컬 네트워크로 허용할지 결정하는 규칙과 정책을 적용한다.
- 허용된 트래픽은 이후 내부 네트워크의 정확한 목적지(엔드포인트)로 프록시되고, 정책에 맞지 않는 트래픽은 거부한다.
Virtual IPs
- 서비스 외부 노출 과정
- 서비스(api.istioinaction.io/v1/products)를 외부 시스템이 호출하려면, 먼저 도메인 이름(api.istioinaction.io)을 IP 주소로 변환하는 과정이 필요하다.
- 이 과정은 클라이언트의 네트워킹 스택이 DNS 서버에 도메인 이름의 IP 주소를 질의하는 방식으로 수행된다.
- DNS에서 IP 주소를 매핑할 때 주의점
- DNS를 통해 도메인을 단일 서비스 인스턴스의 실제 IP에 직접 대응시키는 방식은 매우 취약하다.
- 해당 서비스 인스턴스가 다운되면 DNS가 갱신되기 전까지 클라이언트가 지속적으로 오류를 경험하게 된다.
- 이는 느리고, 가용성 및 안정성이 떨어지는 방식이다.
- 안정적인 서비스 노출 방법
- 가상 IP(virtual IP) 를 도메인에 대응시켜 사용하는 것이 권장된다.
- 가상 IP는 특정 서비스가 아니라 중간 계층 역할의 리버스 프록시(Reverse Proxy)와 연결된다.
- 리버스 프록시는 트래픽을 여러 서비스 인스턴스로 분산 처리하고, 로드 밸런싱 기능을 제공해 개별 백엔드의 과부하를 방지할 수 있다.
- 이를 통해 높은 가용성과 안정적인 서비스를 제공할 수 있다.
Virtual Hosting
- 서비스와 가상 IP 구성
- 여러 개의 서비스 인스턴스가 각각의 자체 IP를 가질 수 있지만, 외부 클라이언트는 가상 IP 하나만 사용해 접근한다.
- 이 방식은 여러 서비스가 동일한 가상 IP를 공유할 수 있게 해준다.
- 예시: prod.istioinaction.io, api.istioinaction.io 두 도메인이 동일한 가상 IP로 대응될 수 있다.
- 리버스 프록시의 요청 처리 방식
- 클라이언트가 동일한 가상 IP로 전송한 요청은 단일 리버스 프록시로 들어온다.
- 리버스 프록시는 요청을 분석해 적절한 서비스로 라우팅한다.
- HTTP 요청이라면, 리버스 프록시는 요청 헤더(ex. bar.example.com) 를 확인 후 어떤 요청이 어느 서비스로 향해야 하는지(3.3.3.3, 4.4.4.4) 판단하여 라우팅한다.
- 가상 호스팅
- 단일 진입점(인그레스 포인트)에서 여러 다른 서비스들을 함께 제공하는 방식이다.
- 이를 위해 HTTP/1.1은 Host 헤더, HTTP/2는 :authority 헤더를 사용해 요청이 향하는 서비스를 판단한다.
- TLS 기반의 TCP 연결에서는 SNI(Server Name Indication)를 통해 요청을 라우팅한다.
- Istio의 인그레스와 가상 호스팅
- Istio는 이와 같은 가상 IP 라우팅과 가상 호스팅 방식을 결합해, 외부 요청을 내부 서비스로 효율적으로 라우팅한다.
- Istio의 에지 인그레스(Edge Ingress)는 클러스터 외부에서 들어오는 요청을 내부 서비스로 전달하는 데 있어, 위의 기술들을 사용한다.
2. Istio - Ingress Gateways
Ingress Gateway
- 클러스터 외부 → 내부로 유입되는 트래픽의 진입점이다.
- 기능
- 보안 제어 (트래픽 필터링)
- 로드 밸런싱
- 가상 호스트 기반 라우팅 (도메인에 따라 내부 서비스 분기)
동작
- Envoy 프록시를 사용해 Reverse Proxy 역할도 수행 (클러스터 외부 트래픽을 받아서 내부 서비스로 적절하게 분배)
- Istio는 단일 Envoy 인스턴스로 Ingress Gateway 구성
[구성 요소]
- 인그레스 게이트웨이는 Istio의 컨트롤 플레인의 설정을 기반으로 작동한다.
- 컨트롤 플레인은 Envoy에 설정을 동적으로 전달하고, 보안 정책이나 라우팅 규칙 등을 관리한다.