상세 컨텐츠

본문 제목

🧭 NGINX Ingress Controller + Ingress Routing 실습 정리

AWS CLOUD SCHOOL 9기

by AI Engineer crystal 2025. 4. 15. 17:47

본문

📌 목표

  • Ingress Controller를 통해 여러 서비스를 하나의 LoadBalancer로 연결
  • host 기반 + path 기반 라우팅 실습
  • 개별 Deployment-Service 구분, 확장성 고려

1️⃣ Ingress Controller 설치

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.2/deploy/static/provider/cloud/deploy.yaml

설치 후 다음 두 컴포넌트 확인:

  • ingress-nginx-controller: 실제 트래픽을 적절한 서비스로 라우팅
  • ingress-nginx-admission: Ingress 리소스 검증 (특히 annotations 검사)
kubectl get pod -n ingress-nginx

2️⃣ /etc/hosts 수정 (테스트용 도메인 매핑)

echo "211.183.3.202 www.aws9.pri" >> /etc/hosts

3️⃣ Ingress Rule 정의 (Routing Logic)

ingress-rule.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: aws9-portal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: www.aws9.pri
    http:
      paths:
      - path: "/shop(/|$)"
        pathType: Prefix
        backend:
          service:
            name: aws9-svc-shop
            port:
              number: 8080
      - path: "/blog(/|$)"
        pathType: Prefix
        backend:
          service:
            name: aws9-svc-blog
            port:
              number: 8080

접속 예시


4️⃣ Service + Deployment (각 역할 분리)

# shop 페이지 → blue 버전
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: aws9-deploy-blue
spec:
  replicas: 1
  selector:
    matchLabels:
      color: blue
  template:
    metadata:
      labels:
        color: blue
    spec:
      containers:
        - name: aws9ctn-blue
          image: brian24/aws9:blue
          ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: aws9-svc-shop
spec:
  ports:
  - name: aws9-port-shop
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    color: blue

---

# blog 페이지 → green 버전
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: aws9-deploy-green
spec:
  replicas: 1
  selector:
    matchLabels:
      color: green
  template:
    metadata:
      labels:
        color: green
    spec:
      containers:
        - name: aws9ctn-green
          image: brian24/aws9:green
          ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: aws9-svc-blog
spec:
  ports:
  - name: aws9-port-blog
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    color: green

✅ 적용 순서 정리

kubectl apply -f ingress-rule.yml
kubectl apply -f <blue/green service + deployment>

🔍 테스트 방법

curl http://www.aws9.pri/shop
curl http://www.aws9.pri/blog

💡 장점 정리 (아키텍처 관점)

항목 내용

기능 분리 각 기능별 Deployment/Service 구성 가능 → 개발 분업
유지보수 장애 시 해당 Pod/Deployment만 수정 가능
확장성 HPA 적용 시 shop만 scale-out 가능 (개별 적용)
트래픽 분산 Ingress + NGINX를 통해 효율적인 트래픽 분기 가능

 

관련글 더보기