MSA 아키텍처에서 인그레스, 아웃그레스, 서비스메쉬의 기능과 구축 방법

MSA 아키텍처에서 인그레스(Ingress)는 클러스터/메시로 들어오는 트래픽의 진입점, 아웃그레스(Egress)는 외부로 나가는 트래픽의 출구, 서비스메시는 서비스 간 통신 전체를 제어·관찰·보안하는 인프라 레이어라고 볼 수 있다. 아래는 각 기능과, Kubernetes+Istio 기준 단계별 구축 방법이다.


인그레스: 역할과 기능

  • 클러스터/서비스메시 바깥에서 들어오는 HTTP/HTTPS 요청을 내부 서비스로 라우팅하는 게이트웨이 역할.

  • 호스트/경로 기반 라우팅, 로드밸런싱, TLS 종료(SSL offloading), 인증 연계 등을 제공.

  • 구현은 대부분 “Ingress 리소스 + Ingress Controller(NGINX, Traefik, Istio IngressGateway 등)” 조합으로 구성된다.


인그레스 구축 단계 (Kubernetes + Istio 예시)

  1. 클러스터 및 컨트롤러 준비

    • Kubernetes 클러스터를 준비하고, Istio 등 서비스메시를 설치한다.

    • Istio 설치 시 istio-ingressgateway 같은 인그레스 게이트웨이 Deployment/Service가 함께 생성된다.

  2. 외부 노출용 LoadBalancer/NodePort 설정

    • 인그레스 게이트웨이 Service 타입을 LoadBalancer(클라우드) 또는 NodePort로 설정해 외부 IP/포트를 확보한다.

    • DNS를 해당 IP에 매핑해 api.example.com 같은 호스트로 접근 가능하게 한다.

  3. Ingress / Gateway 리소스 정의

    • Kubernetes Ingress를 쓰는 경우: Ingress 리소스에 host, path, backend Service를 정의한다.

    • Istio를 쓰는 경우:

      • Gateway 리소스에 수신 포트(예: 80/443), 호스트, TLS 설정을 정의.

      • VirtualService로 호스트/경로별 라우팅 규칙을 작성해 내부 서비스로 연결한다.

  4. TLS 및 인증 설정

    • Secret에 인증서를 저장하고, Ingress 또는 Istio Gateway에 TLS 섹션으로 참조한다.

    • 필요 시 OAuth2/OIDC, mTLS, WAF 등의 인증·보안 기능과 연계한다.

  5. 검증 및 관측

    • 외부에서 도메인으로 접속해 라우팅, HTTPS, 헤더/쿠키 기반 라우팅 등을 확인한다.

    • 메트릭, 로그, 트레이싱으로 인그레스 구간 성능과 오류를 모니터링한다.


아웃그레스: 역할과 기능

  • 메시 안의 서비스가 외부(인터넷, SaaS, 외부 DB 등)로 나갈 때의 출구를 제어한다.

  • 어떤 외부 도메인/ IP 로 나갈 수 있는지 화이트리스트(least privilege)로 제한하고, 모니터링·정책·TLS 제어를 적용한다.

  • Istio에서는 Egress Gateway와 ServiceEntry 리소스를 활용해 메시 외부 트래픽을 관리한다.


아웃그레스 구축 단계 (Istio 예시)

  1. 디폴트 아웃바운드 정책 이해

    • 많은 Istio 프로파일에서 외부로 직접 나가는 트래픽은 기본적으로 차단 또는 제한되어, 명시적인 설정이 필요하다.

    • 정책을 통해 “무제한 허용”이 아니라 “허용된 외부 도메인만 접근”하도록 설계한다.

  2. ServiceEntry로 외부 서비스 선언

    • ServiceEntry 리소스에 외부 도메인(FQDN) 또는 IP, 포트, 프로토콜을 정의해 “메시가 인지하는 외부 서비스”로 등록한다.

    • 이 리소스에 기반해 사이드카 프록시(Envoy)가 해당 도메인으로의 트래픽을 처리한다.

  3. Egress Gateway 배포

    • Istio의 istio-egressgateway Deployment/Service를 활성화한다.

    • 이 게이트웨이는 메시 외부로 나가는 트래픽이 반드시 거쳐야 하는 중앙 출구 포인트로 동작한다.

  4. VirtualService로 egress 경로 강제

    • VirtualService에서 특정 도메인(예: *.external.com)으로 향하는 트래픽의 next hop을 Egress Gateway로 지정한다.

    • 필요 시 Egress Gateway→외부서비스 구간에 대한 TLS 설정 및 인증서를 구성한다.

  5. 정책, 로깅, 모니터링 적용

    • Egress Gateway에 RBAC, Rate limit, 네트워크 정책 등 보안·거버넌스 정책을 적용한다.

    • 외부 호출 실패율, 지연, 트래픽 양을 메트릭과 트레이싱으로 관찰한다.


서비스메시: 역할과 기능

  • MSA 내 서비스 간 통신(east-west traffic)을 일관된 방식으로 제어하고, 보안·관측·트래픽 제어를 제공하는 인프라 레이어.

  • 주요 기능:

    • mTLS 기반 서비스 간 암호화, 인증·인가.

    • 세분화된 라우팅(버전별, 카나리, A/B), circuit breaking, retry, timeouts.

    • 메트릭, 로그, 분산 트레이싱 등 관측성 제공.


서비스메시 구축 단계 (Istio 패턴)

msa 아키텍처에서 인그레스, 아웃그레스, 서비스메쉬의 기능과 구축 방법

  1. 컨트롤 플레인 설치

    • Istio, Linkerd, Consul 등 메시 솔루션의 컨트롤 플레인을 클러스터에 설치한다.

    • 이 플레인은 각종 정책, 라우팅, 보안 설정을 중앙에서 관리·전파한다.

  2. 사이드카 프록시 주입 구성

    • 네임스페이스 또는 Deployment에 사이드카 자동 주입(label) 설정을 활성화한다.

    • 각 서비스 Pod 옆에 Envoy 등 프록시가 같이 배포되어, 모든 인/아웃 트래픽을 가로채도록 구성한다(사이드카 패턴).

  3. 서비스 디스커버리 및 기본 통신 활성화

    • 메시가 Kubernetes Service/Endpoint 정보를 사용해 각 서비스 인스턴스를 자동으로 인지한다.

    • 사이드카 간 통신으로 서비스 간 호출이 이뤄지며, 기본 mTLS·로드밸런싱이 동작한다.

  4. 트래픽 관리 정책 정의

    • DestinationRuleVirtualService 등을 사용해 라우팅, 서킷 브레이커, 재시도, 타임아웃 정책을 정의한다.

    • 카나리 릴리즈, A/B 테스트 같은 배포 전략도 이 레벨에서 설정한다.

  5. 보안·관측 설정

    • 서비스 간 mTLS, 인증/인가, RBAC 정책을 메시 레벨에서 활성화한다.

    • Prometheus, Grafana, Jaeger/Zipkin 등과 연계해 요청 단위 메트릭·트레이싱을 수집한다.


세 컴포넌트의 관계 정리

영역 인그레스 아웃그레스 서비스메시
주 대상 트래픽 외부 → 클러스터/메시 (north-south)  클러스터/메시 → 외부 (north-south)  서비스 ↔ 서비스 (east-west) 
핵심 역할 외부 요청 수신, 라우팅, TLS 종료  외부 호출 제어, 화이트리스트, 정책/모니터링  통신 정책, 보안, 관측, 트래픽제어 
구현 요소 Ingress 리소스, Ingress Controller/Gateway  Egress Gateway, ServiceEntry, VirtualService  사이드카 프록시, 컨트롤 플레인, 정책 리소스 
주 목적 외부 클라이언트 접근 통합 관리  외부 종속 서비스 접근 통제  MSA 내부 통신 일관된 관리 

필요하면 “Istio 없이 NGINX Ingress만 쓰는 구조” vs “Istio Ingress/Egress Gateway 포함한 풀 메시 구조”도 단계별로 그려서 설명할 수 있으니, 현재 운영/계획 중인 환경(K8s 버전, Istio 사용 여부 등)을 알려주면 그에 맞춘 YAML 예시까지 정리해 주겠다.