Published on

9단계: Ingress로 도메인 연결

Ingress란?

  • Kubernetes 클러스터 외부에서 내부 서비스로 HTTP/HTTPS 트래픽을 라우팅하는 리소스
  • Service를 도메인 기반으로 접근 가능하게 만듦
  • Nginx, Traefik 등의 Ingress Controller가 필요

Ingress Controller 설치 (minikube 기준)

# minikube에 nginx ingress controller 설치
minikube addons enable ingress

# 설치 확인
kubectl get pods -n kube-system | grep ingress

예시 서비스 배포

# app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx
          ports:
            - containerPort: 80
---
# app-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: web-svc
spec:
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80

Ingress 리소스 작성

# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: myapp.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web-svc
                port:
                  number: 80

hosts 설정:

echo "$(minikube ip) myapp.local" | sudo tee -a /etc/hosts

브라우저 접속:
http://myapp.local


요약

  • Ingress는 도메인 기반 HTTP 트래픽을 내부 서비스로 라우팅한다.
  • Ingress Controller가 반드시 설치되어 있어야 동작한다.
  • /etc/hosts에 도메인을 수동으로 등록하면 로컬 환경에서도 테스트 가능하다.

심화학습

Q1: Ingress와 NodePort의 차이점은 무엇인가?

A: NodePort는 클러스터 외부에서 접근할 수 있도록 특정 포트를 개방하는 방식이고, Ingress는 도메인 기반으로 여러 서비스에 정교하게 라우팅할 수 있다.

Q2: 여러 도메인 또는 경로를 한 Ingress 리소스에서 동시에 라우팅할 수 있을까?

A: 가능하다. Ingress의 rules 배열에 여러 hostpath를 설정하여 다양한 트래픽 라우팅을 구성할 수 있다.

Q3: Ingress 리소스가 동작하지 않는 경우 가장 먼저 확인해야 할 것은?

A: Ingress Controller가 정상적으로 설치되어 있는지(kubectl get pods -n kube-system)를 확인하고, 외부 IP 또는 DNS 설정이 정확한지 확인해야 한다.