Hunny's Daily

개발과 일상에서의 달콤한 순간들을 기록하며, 유용한 팁과 인사이트를 공유합니다.

K8S 외부 트래픽이 실제로 Pod까지 도달하는 과정

Kubernetes에서 요청이 흐르는 전체 경로 정리

Kubernetes 환경에서 외부 사용자의 요청은 바로 Pod로 전달되지 않는다. 여러 네트워크 계층과 리소스를 거쳐 단계적으로 전달되며, 각 단계는 명확한 역할을 가진다. 이 글에서는 외부 트래픽이 Kubernetes 클러스터에 들어와 최종적으로 Pod까지 도달하는 전체 과정을 순서대로 정리한다.


전체 흐름 한눈에 보기

외부 트래픽이 Pod까지 도달하는 기본 흐름은 다음과 같다.

  • 외부 클라이언트
  • LoadBalancer 또는 NodePort
  • Ingress Controller
  • Ingress
  • Service
  • Pod

이 구조를 이해하면 Kubernetes 네트워크 동작 방식이 명확해진다.


1. 외부 클라이언트 요청 발생

사용자는 브라우저나 API 클라이언트를 통해 특정 도메인 또는 IP로 요청을 보낸다.
이 시점에서 요청은 아직 Kubernetes 내부로 들어오지 않은 상태다.

  • 예: https://api.example.com

DNS는 이 도메인을 외부 로드밸런서 또는 노드 IP로 해석한다.


2. LoadBalancer 또는 NodePort 진입

외부 트래픽은 먼저 Kubernetes 클러스터의 진입 지점에 도달한다.

  • 클라우드 환경
    • LoadBalancer Service가 외부 IP 제공
  • 온프레미스 또는 단순 환경
    • NodePort를 통해 노드로 직접 진입

이 단계의 역할은 클러스터로 트래픽을 받아들이는 것이다.


3. Ingress Controller가 트래픽 수신

Ingress Controller는 실제로 외부 트래픽을 처리하는 컴포넌트다.
보통 NGINX Ingress Controller와 같은 형태로 Deployment로 실행된다.

Ingress Controller의 역할은 다음과 같다.

  • 외부 요청 수신
  • Ingress 리소스 규칙 로드
  • 요청을 적절한 Service로 전달

Ingress Controller는 Kubernetes 내부에서 외부 트래픽의 첫 관문이다.


4. Ingress 규칙 매칭

Ingress Controller는 요청을 받은 뒤 Ingress 리소스에 정의된 규칙을 확인한다.

  • 도메인(host)
  • URL 경로(path)
  • TLS 설정

이 규칙을 기반으로 어떤 Service로 요청을 전달할지 결정한다.

Ingress 자체는 트래픽을 처리하지 않고, 라우팅 규칙만 정의한다는 점이 중요하다.


5. Service로 트래픽 전달

Ingress Controller는 선택된 Service로 요청을 전달한다.
Service는 Pod 집합에 대한 안정적인 접근 지점 역할을 한다.

Service의 역할은 다음과 같다.

  • 고정된 ClusterIP 제공
  • Selector를 통해 Pod 선택
  • 트래픽을 Pod로 분산

이 단계부터 Kubernetes 내부 네트워크에서의 로드밸런싱이 시작된다.


6. Readiness Probe를 통과한 Pod 선택

Service는 연결 가능한 Pod만 대상으로 트래픽을 전달한다.
Readiness Probe가 성공한 Pod만 엔드포인트로 등록된다.

이를 통해 다음이 보장된다.

  • 준비되지 않은 Pod로 트래픽 전달 방지
  • 배포 중 트래픽 안정성 유지

Readiness Probe는 외부 트래픽 흐름에서 매우 중요한 역할을 한다.


7. Pod 내부 컨테이너로 요청 전달

Service를 통해 선택된 Pod로 요청이 전달되면,
Pod 내부의 컨테이너가 실제 요청을 처리한다.

이 시점에서야 애플리케이션 로직이 실행된다.


장애 상황에서의 흐름 변화

중간 단계에서 문제가 발생하면 흐름은 즉시 달라진다.

  • Pod 장애 발생
    • ReplicaSet이 새 Pod 생성
  • Readiness 실패
    • Service 엔드포인트에서 제외
  • Ingress 설정 오류
    • 요청이 Service로 전달되지 않음

Kubernetes는 각 단계에서 장애를 격리하도록 설계되어 있다.


왜 이 과정을 이해해야 하는가

이 흐름을 이해하면 다음과 같은 문제를 빠르게 파악할 수 있다.

  • 외부 요청이 안 들어오는 경우
  • Ingress는 정상인데 Pod가 응답하지 않는 경우
  • 배포 중 트래픽이 끊기는 경우

각 단계의 역할을 알면 문제 지점을 정확히 좁힐 수 있다.


자주 발생하는 오해

다음과 같은 오해가 자주 발생한다.

  • Ingress가 직접 Pod로 트래픽을 보낸다
  • Service는 외부 트래픽에만 사용된다
  • Pod가 준비되면 자동으로 트래픽이 전달된다

실제로는 Service와 Probe, Ingress가 함께 동작해야 정상적인 트래픽 흐름이 만들어진다.


정리

Kubernetes에서 외부 트래픽은 여러 단계를 거쳐 Pod까지 전달된다. LoadBalancer 또는 NodePort를 통해 클러스터에 진입하고, Ingress Controller와 Ingress 규칙을 통해 Service가 선택되며, 최종적으로 Readiness를 통과한 Pod가 요청을 처리한다. 이 전체 흐름을 이해하면 Kubernetes 네트워크 구조와 트러블슈팅이 훨씬 쉬워진다.