본문 바로가기
클라우드/쿠버네티스

🏨 호텔 프론트처럼 똑똑하게! 쿠버네티스 Ingress로 트래픽 관리하기

by gasbugs 2025. 9. 3.

안녕하세요, 쿠버네티스 전문가를 꿈꾸는 여러분! 🚀 오늘은 클러스터 외부의 트래픽을 내부 서비스로 연결하는 가장 세련되고 효율적인 방법, Ingress(인그레스)에 대해 알아보겠습니다.

 

NodePort나 LoadBalancer 서비스만 사용하다 보면, 서비스 하나 추가할 때마다 포트를 열거나 비싼 클라우드 로드밸런서를 새로 생성해야 하는 불편함이 있죠. 마치 호텔 방(Pod)마다 외부로 통하는 문을 따로 내는 것과 같습니다. 비효율적이죠. 🏨

 

Ingress는 이 문제를 해결해주는 '호텔의 똑똑한 프론트 데스크' 와 같습니다. 단 하나의 외부 출입구(단일 IP 주소)를 통해 모든 손님(트래픽)을 받은 뒤, 손님이 찾는 목적지(서비스)에 따라 정확한 객실(Pod)로 안내하는 역할을 합니다.

 


🤔 Ingress는 규칙, Ingress Controller는 실행자!

Ingress를 이해하기 위해 가장 중요한 두 가지 개념이 있습니다. 바로 Ingress 리소스Ingress Controller입니다. 둘은 항상 함께 움직여야 합니다.

  • Ingress 리소스 (The Rules) 📜 Ingress 자체는 우리가 YAML 파일로 작성하는 '라우팅 규칙' 모음입니다. " api.example.com 으로 온 요청은 api-service 로 보내줘" 라거나 " example.com/video 로 온 요청은 video-service 로 보내줘" 와 같은 규칙들을 정의하는 설명서일 뿐, 스스로 트래픽을 처리할 능력은 없습니다.
  • Ingress Controller (The Engine) 👮 Ingress Controller는 클러스터 내에서 실행되는 실제 트래픽 처리 엔진입니다. 이 컨트롤러는 Ingress 리소스에 정의된 규칙들을 계속 지켜보다가, 그 규칙에 맞게 실제 트래픽을 받아 해당 서비스로 전달해주는 역할을 합니다. NGINX, Traefik, HAProxy 등 다양한 종류의 Ingress Controller가 있으며, 클러스터에는 이 중 하나가 반드시 설치되어 실행 중이어야 Ingress가 동작합니다.
  • CKAD 시험 Tip: 시험 환경에는 이미 Ingress Controller가 설치되어 있다고 가정합니다. 여러분은 Ingress '리소스'를 YAML로 정의하는 방법에만 집중하면 됩니다!

🌐 단일 IP로 여러 서비스를 라우팅하는 마법

Ingress의 가장 큰 장점은 단 하나의 외부 IP 주소(주로 LoadBalancer에 연결된)를 통해 수많은 내부 서비스를 외부에 노출시킬 수 있다는 점입니다. 이때 두 가지 주요 라우팅 방식을 사용합니다.

1. 호스트 기반 라우팅 (Host-based Routing)

요청된 도메인 이름(호스트)을 보고 어떤 서비스로 보낼지 결정하는 방식입니다.

  • 언제 사용하나요? user.myservice.com, payment.myservice.com 처럼 여러 하위 도메인을 각각 다른 마이크로서비스로 연결하고 싶을 때 사용합니다.
  • YAML 예시:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: host-based-ingress
    spec:
      rules:
      - host: "video.example.com" # video 도메인으로 온 요청은
        http:
          paths:
          - path: "/"
            pathType: Prefix
            backend:
              service:
                name: video-service # video-service로 보낸다
                port:
                  number: 80
      - host: "image.example.com" # image 도메인으로 온 요청은
        http:
          paths:
          - path: "/"
            pathType: Prefix
            backend:
              service:
                name: image-service # image-service로 보낸다
                port:
                  number: 80
    

2. 경로 기반 라우팅 (Path-based Routing)

동일한 도메인으로 들어온 요청이라도 URL 경로(Path)에 따라 다른 서비스로 분기하는 방식입니다.

  • 언제 사용하나요? myservice.com/api 는 백엔드 서비스로, myservice.com/web 은 프론트엔드 서비스로 보내는 등 단일 도메인 내에서 역할을 분리할 때 매우 유용합니다.
  • YAML 예시:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: path-based-ingress
    spec:
      rules:
      - host: "example.com"
        http:
          paths:
          - path: "/video" # /video 경로로 온 요청은
            pathType: Prefix
            backend:
              service:
                name: video-service # video-service로 보낸다
                port:
                  number: 80
          - path: "/image" # /image 경로로 온 요청은
            pathType: Prefix
            backend:
              service:
                name: image-service # image-service로 보낸다
                port:
                  number: 80
    

🎉 결론: Ingress로 스마트한 트래픽 관리자 되기

Ingress는 여러 서비스를 효율적으로 외부에 노출하고 관리하기 위한 필수 도구입니다. LoadBalancer 서비스를 서비스마다 생성하는 비용 낭비를 막아주고, URL 구조를 더 깔끔하고 직관적으로 관리할 수 있게 해줍니다.

CKAD 시험을 준비하신다면, 호스트와 경로를 기준으로 Ingress 규칙을 YAML로 능숙하게 작성하는 연습을 충분히 해두시는 것이 중요합니다. Ingress를 통해 복잡한 트래픽 흐름을 명쾌하게 정리하는 스마트한 쿠버네티스 관리자로 거듭나세요!

 

 

Tags: 쿠버네티스, Kubernetes, Ingress, Ingress Controller, CKAD, DevOps, MSA, 라우팅, 네트워킹