Kubernetes/Kubernetes Basics

📌 Kubernetes Ingress: 도메인 기반 트래픽 관리 이해하기

ygtoken 2025. 3. 3. 07:17
728x90

 

1️⃣ Kubernetes에서 Ingress가 필요한 이유?

 

이전 글에서 Kubernetes의 Service를 통해 Pod에 접근하는 방법을 배웠습니다.

하지만 NodePort나 LoadBalancer는 다음과 같은 제한사항이 있습니다.

 

NodePort

포트(30000~32767)를 직접 사용해야 함

여러 서비스가 있을 경우 관리가 어려움

 

LoadBalancer

클라우드 환경에서만 사용 가능

서비스마다 LoadBalancer가 필요하면 비용 증가

 

Ingress를 사용하면 하나의 LoadBalancer로 여러 서비스에 트래픽을 분배할 수 있습니다.

도메인 기반으로 트래픽을 라우팅할 수도 있습니다.

 


 

2️⃣ Kubernetes Ingress란?

 

📌 Ingress는 외부 트래픽을 클러스터 내부 서비스로 라우팅하는 역할을 합니다.

 

도메인 기반 라우팅 가능

하나의 LoadBalancer로 여러 서비스 관리

TLS(SSL) 적용 가능

 

📌 Ingress 구조

사용자 요청 (https://app.example.com)
       ⬇
Ingress Controller
       ⬇
적절한 서비스로 라우팅

 


 

3️⃣ Ingress 기본 구성 요소

 

Kubernetes에서 Ingress를 사용하려면 Ingress Controller가 필요합니다.

 

📌 Ingress 설정에 필요한 것

1) Ingress Controller → Ingress를 실제로 처리하는 서비스 (예: Nginx Ingress Controller)

2) Ingress 리소스 → Ingress의 라우팅 규칙을 정의하는 YAML 파일

3) Ingress Controller 설치하기

 

📌 Kubernetes는 기본적으로 Ingress Controller를 제공하지 않습니다.

📌 따라서 Nginx Ingress Controller를 직접 설치해야 합니다.

 

📌 Nginx Ingress Controller 설치 명령어 (Helm 사용)

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install my-ingress ingress-nginx/ingress-nginx

✅ Nginx Ingress Controller가 설치되었으며, 이제 Ingress를 설정할 수 있습니다.

 


 

5️⃣ 기본 Ingress 설정 예제

 

이제 Ingress를 설정하여 도메인 기반 트래픽을 라우팅해보겠습니다.

 

📌 Ingress 리소스 YAML 파일 (ingress.yaml)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myapp.example.com  # 도메인 설정
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service  # 트래픽을 보낼 서비스
            port:
              number: 80

 

📌 배포 명령어

kubectl apply -f ingress.yaml

 

📌 Ingress 상태 확인

kubectl get ingress

✅ 이제 myapp.example.com으로 접속하면 my-service로 트래픽이 전달됩니다.

 


 

6️⃣ 여러 도메인을 라우팅하는 Ingress 설정

 

Ingress는 여러 도메인을 한 번에 관리할 수도 있습니다.

 

📌 여러 서비스로 라우팅 (multi-ingress.yaml)

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

하나의 Ingress로 여러 도메인에 대해 트래픽을 분배할 수 있습니다!

 


 

7️⃣ Ingress에서 HTTPS(TLS) 적용하기

 

Ingress는 HTTPS(SSL)도 적용할 수 있습니다.

 

📌 TLS(SSL) 적용 예제 (tls-ingress.yaml)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: secure-ingress
spec:
  tls:
  - hosts:
    - secure.example.com
    secretName: tls-secret  # SSL 인증서
  rules:
  - host: secure.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: secure-service
            port:
              number: 443

📌 SSL 인증서 생성 (Let’s Encrypt 예제)

kubectl create secret tls tls-secret --cert=cert.pem --key=key.pem

✅ 이제 https://secure.example.com에서 SSL 적용된 서비스를 사용할 수 있습니다!

 


 

8️⃣ Ingress 리소스 정리

Ingress 기능설명

기본 라우팅 특정 도메인 → 서비스 연결
여러 서비스 라우팅 하나의 Ingress로 여러 서비스 관리
TLS(SSL) 적용 HTTPS 트래픽 지원
Path 기반 라우팅 /api는 API 서비스로, /web은 웹 서비스로 연결

🔥 Ingress를 사용하면 하나의 LoadBalancer로 여러 서비스에 트래픽을 효율적으로 분배할 수 있습니다!

 

 

728x90