Kubernetes Ingress

오현진·2025년 4월 24일

Kubernetes Ingress

Ingress란?

Kubernetes Ingress(인그레스)는 클러스터 외부의 HTTP/HTTPS 요청을 클러스터 내부의 서비스로 라우팅하는 API 리소스이다. 일반적으로 아래와 같은 기능들을 제공한다:

  • 도메인 기반 라우팅 (예: foo.example.com)
  • 경로 기반 라우팅 (예: /api, /app)
  • SSL 종료 (TLS)
  • 호스트 헤더 기반 처리

즉, Ingress는 웹 요청을 분기처리해주는 트래픽 게이트웨이 역할을 한다.


동작 흐름

업로드중..

클라이언트 요청은 Ingress를 통해 내부 서비스에 전달된다:

Client ──> Ingress ──> Service ──> Pod

Ingress는 요청의 도메인과 경로를 기준으로 어떤 서비스로 보낼지를 판단한다.

예시:

  • kubia.example.com/kubia → kubia 서비스
  • foo.example.com → foo 서비스
  • bar.example.com → bar 서비스

예시 Ingress 리소스 (YAML)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kubia
spec:
  rules:
    - host: kubia.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: kubia-nodeport
                port:
                  number: 80



Ingress Controller 접속 흐름 이해하기

개요

Kubernetes 클러스터 외부에서 Ingress Controller에 접근하려면 NodePort 방식이나 LoadBalancer 방식을 사용할 수 있다.

이 예시에서는 NodePort를 통해 외부 접속을 허용하는 구조를 설명하고 있다. 특히 Private 클러스터 환경에서 많이 사용된다.


접속 흐름 요약

  1. 클라이언트는 ELB의 DNS (a37xxxxx.elb.amazonaws.com)에 HTTPS 요청을 보냄 (443 포트)
  2. ELB는 백엔드 EC2 Node의 NodePort (31610)로 트래픽 전달
  3. 이 포트는 iptables를 통해 클러스터 내부의 Ingress Controller Pod (NGINX)로 연결됨
  4. Ingress Controller는 요청 도메인 및 경로에 따라 적절한 서비스로 트래픽 라우팅

주요 구성 요소 정리

구성 요소설명
ELB외부에서 요청을 받는 AWS의 Load Balancer
NodePort클러스터 외부에서 접근 가능한 포트 (예: 31610)
ClusterIPKubernetes 내부에서 서비스 접근용 가상 IP
PodIP실제 컨테이너(Pod)의 IP
Ingress Controllernginx 기반 컨트롤러가 요청을 처리하고 라우팅

VPC와 Subnet

  • Ingress Controller는 특정 서브넷(예: 172.31.0.0/20)에 속한 Node에 배치될 수 있음
  • 요청을 받은 Node는 내부 VPC 네트워크를 통해 Pod로 라우팅
  • 외부에서 직접 Pod로 접근하지 않으며, 항상 NodePort → ClusterIP → PodIP 흐름을 따름



Ingress 흐름 완전 정복

Ingress 흐름 요약

curl https://kubia.example.com 혹은 브라우저에서 해당 도메인에 접근하면 다음과 같은 흐름이 발생한다.

1. DNS 요청

클라이언트는 먼저 kubia.example.com에 대한 IP를 조회한다.

  • ISP DNS Resolver → Root NS → TLD NS → 실제 도메인 이름 서버를 거쳐 IP 주소 반환

2. HTTP(S) 요청

  • 클라이언트는 kubia.example.com으로 GET 요청을 보냄
  • Host 헤더는 라우팅에 사용됨

3. Ingress 처리

Ingress Controller가 요청을 받아 해당 도메인의 규칙에 따라 Service로 전달

4. Service → Endpoints

Service는 연결된 Pod 목록(Endpoints)을 참조하여 요청을 전달

5. Pod에 라우팅

Ingress Controller가 실제 요청을 해당하는 Pod 중 하나에 전달


IP 등록 방식

  • Ingress Controller는 Service의 Endpoints 정보를 watch 하면서 업데이트됨
  • 변경이 있을 경우, NGINX upstream 설정을 동적으로 갱신

즉, 새로운 Pod가 추가되거나 삭제될 때 Ingress Controller는 자동으로 이를 반영하여 라우팅을 보장


구성 요소 정리

구성 요소역할
DNS도메인 이름을 클러스터 외부 IP(NodePort 등)로 매핑
Ingress도메인/경로 기반 요청 라우팅 규칙 정의
Ingress Controller실제로 NGINX 등을 통해 요청을 라우팅하는 컨트롤러
ServicePod 그룹을 하나의 엔드포인트로 묶어주는 추상화
Endpoints실제 연결 가능한 Pod IP 목록

0개의 댓글