Ingress

Yu Sang Min·2025년 6월 28일

CKA

목록 보기
85/110
post-thumbnail

🚀 Kubernetes Ingress


기존 접근 방식의 한계

  1. NodePort 사용

    • 외부 접근: http://<Node-IP>:<High-Port>

    • 문제:

      • 포트 번호 기억해야 함
      • 포트는 30000 이상만 사용 가능
  2. LoadBalancer 사용

    • 클라우드에서 퍼블릭 IP 자동 할당

    • 문제:

      • 서비스마다 LoadBalancer 생성 → 비용 증가
      • 서비스가 늘어날수록 관리 복잡도 증가

🔥 Ingress란 무엇인가?

➕ Ingress의 기능

  • 단일 LoadBalancer 또는 NodePort로 여러 서비스 라우팅
  • URL 기반 또는 호스트 이름 기반 라우팅
  • HTTPS (SSL/TLS) 지원
  • L7 (애플리케이션 계층) Load Balancer 역할

🏗️ 아키텍처

Client
  ↓
Ingress Controller (NGINX, Traefik, etc.)
  ↓
Ingress Rules (Path/Host Based Routing)
  ↓
Backend Services (watch-service, wear-service)

🔍 Ingress Controller vs Ingress Resource

항목설명
Ingress ControllerNGINX, Traefik, HAProxy 같은 실제 트래픽 처리 도구
Ingress ResourceYAML 파일로 정의한 라우팅 규칙

→ Ingress Controller가 있어야 Ingress Resource가 동작


🚧 Ingress Controller 구성 요소

  1. Deployment
    nginx-ingress-controller
    → 내부적으로 NGINX 동작

  2. Service (NodePort 또는 LoadBalancer)
    → 외부에서 접근 가능하게 함 (80, 443 포트)

  3. ConfigMap
    → NGINX 동작 설정

  4. ServiceAccount + RBAC
    → Kubernetes 리소스 감시 권한 부여


🌐 Ingress Resource 구성법

✔️ Path 기반 라우팅 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: store-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: my-online-store.com
    http:
      paths:
      - path: /wear
        pathType: Prefix
        backend:
          service:
            name: wear-service
            port:
              number: 80
      - path: /watch
        pathType: Prefix
        backend:
          service:
            name: watch-service
            port:
              number: 80

✔️ Host 기반 라우팅 예시

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: store-ingress
spec:
  rules:
  - host: wear.my-online-store.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: wear-service
            port:
              number: 80
  - host: watch.my-online-store.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: watch-service
            port:
              number: 80

🔒 HTTPS 설정도 가능

  • TLS 설정 추가
tls:
- hosts:
  - my-online-store.com
  secretName: tls-secret
  • tls-secret는 kubectl로 생성
kubectl create secret tls tls-secret --cert=cert.pem --key=key.pem

🏗️ Default Backend

  • 매칭되는 경로가 없을 때 fallback
  • 보통은 404 Not Found 페이지 처리

💰 Ingress의 비용 절감 효과

기존 방식Ingress 방식
서비스마다 LoadBalancer하나의 LoadBalancer만 필요
IP도 서비스마다 따로단일 IP로 모든 서비스 처리 가능
SSL도 서비스마다 설정Ingress에서 통합 관리
방화벽 규칙 복잡Ingress 포트만 열면 됨 (80, 443)

🚀 Ingress가 없으면?

  • 매번 NGINX, HAProxy를 직접 배포하고 수동 설정 필요
  • 경로 추가 시 재배포 또는 수동 수정
  • SSL도 각 서비스마다 따로 설정

비효율적, 비확장성


Ingress의 도입 효과

  • Kubernetes 네이티브 방식으로 모든 라우팅 관리
  • 인프라 코드화 (YAML로 관리)
  • 비용 절감 + 운영 단순화
  • 확장성 대폭 증가

🎯 Ingress 동작 요약

DNS → Ingress LoadBalancer → Ingress Controller → Path/Host → Backend Service

🔥 강의 요점 정리

개념설명
IngressL7 Load Balancer 역할
Controller실제 트래픽 처리 (NGINX, Traefik 등)
Resource라우팅 규칙 정의 (YAML)
Path Routing/watch → watch-service, /wear → wear-service
Host Routingwatch.domain.com → watch-service
SSL 지원Ingress 레벨에서 통합 관리 가능
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글