학습 내용
8-1. Ingress 개념과 Ingress Controller 설치
Ingress란? Pod, Controller, Service와 같은 종류의 쿠버네티스 API 리소스. HTTP/HTTPS를 통해 클러스터 내부의 서비스를 외부로 노출한다.
주요 기능:
- Service에 외부 URL을 제공 (웹서비스에 유용)
- 트래픽을 로드밸런싱
- SSL 인증서 처리
- Virtual Hosting 지정 (도메인 기반 라우팅)
동작 구조: 외부 요청 → Ingress Controller(예: nginx) → Ingress Rule에 따라 → 해당 Service → Pod
Ingress 리소스 자체는 규칙(rule)만 정의하고, 실제 트래픽 처리는 Ingress Controller(예: nginx ingress controller)가 담당한다. Ingress Controller를 먼저 설치해야 Ingress가 동작한다.
Ingress Rule 구조:
- URL path 기반으로 서로 다른 Service에 라우팅
- 예:
/→ marvel-service,/pay→ pay-service
실습 예제 (GitHub 237summit)
Ingress Controller 배포 — deploy.yaml
nginx ingress controller를 배포하는 매니페스트. Namespace, ServiceAccount, RBAC(ClusterRole/RoleBinding), ConfigMap, Deployment, Service(NodePort 30100/30200) 등이 포함된 대규모 YAML이다.
핵심 부분:
# Ingress Controller를 NodePort로 외부 노출
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
nodePort: 30100
- name: https
port: 443
protocol: TCP
targetPort: https
nodePort: 30200
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/component: controllerIngress Rule — ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: marvel-ingress
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: marvel-service
servicePort: 80
- path: /pay
backend:
serviceName: pay-service
servicePort: 80백엔드 서비스 — marvel-home.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: marvel-home
spec:
replicas: 1
selector:
matchLabels:
name: marvel
template:
metadata:
labels:
name: marvel
spec:
containers:
- image: smlinux/marvel-collection
name: marvel-container
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: marvel-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
name: marvel백엔드 서비스 — pay.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: pay-rc
spec:
replicas: 3
template:
metadata:
labels:
app: pay
spec:
containers:
- image: smlinux/pay
name: pay
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: pay-service
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: paypay-service는 Service port 80으로 받아서 컨테이너의 8080으로 전달하는 구조. Ingress에서는 serviceName + servicePort로 연결.
핵심 정리
- Ingress = HTTP/HTTPS 라우팅 규칙 정의. 실제 동작은 Ingress Controller가 담당.
- Ingress Controller를 먼저 설치해야 Ingress 리소스가 작동한다 (예: nginx ingress controller).
- path 기반 라우팅으로 하나의 진입점에서 여러 서비스로 분기 가능.
- Service의 NodePort와 달리 L7 레이어에서 동작하므로 URL path, 호스트명 기반 라우팅, SSL 종료 등이 가능.
체크리스트
- Ingress와 Ingress Controller의 역할 차이를 설명할 수 있는가?
- Ingress Rule에서 path 기반 라우팅 YAML을 작성할 수 있는가?
- Service(L4)와 Ingress(L7)의 차이를 이해했는가?