개요
CKAD 시험에서 출제된 Ingress 문제 풀이를 기록합니다. 기존 Service를 백엔드로 연결하는 Ingress를 YAML 파일로 작성하여 도메인 기반 라우팅을 구성하는 문제입니다.
출제 문제
※ 기억에 의존해 복기하는 문제라 오류가 있을 수 있습니다.
참고만 부탁 드립니다.
- 사용자가 www.example.com URL로 접속할 때 라우팅이 가능하도록 Ingress를 생성
- 기생성 Service 의 name과 port를 참고 하여 Ingress 반영
service name : service1
port : 80 - Ingress name은 ingressWeb으로 할 것
- YAML파일을 작성하여 생성할 것
해결 방법
# ingress.yaml 생성
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingressWeb
spec:
rules:
- host: "www.example.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
# Ingress 생성 및 상태 확인
$ kubectl apply -f ingress.yaml
$ kubectl get ingress
$ kubectl describe ingress ingressWeb
Ingress 개념 — NodePort/LoadBalancer와 비교
Kubernetes에서 외부 트래픽을 Pod로 전달하는 방법으로 NodePort, LoadBalancer, Ingress 세 가지가 있습니다. NodePort는 노드 IP + 고정 포트로 직접 접근하며 관리가 번거롭고, LoadBalancer는 서비스마다 외부 IP를 하나씩 할당하므로 클라우드 환경에서 비용이 발생합니다. Ingress는 단일 진입점(IngressController)에서 도메인 이름과 경로 기반으로 여러 서비스를 라우팅할 수 있어 HTTP/HTTPS 트래픽 관리에 가장 적합합니다.
Ingress 리소스 자체는 라우팅 규칙을 정의하는 API 오브젝트이며, 실제 트래픽 처리는 클러스터에 배포된 IngressController(Nginx, Traefik, HAProxy 등)가 담당합니다. IngressController가 설치되지 않은 환경에서는 Ingress를 생성해도 동작하지 않습니다.
# 클러스터에 설치된 IngressClass 확인 kubectl get ingressclass # Ingress 상태 확인 (ADDRESS 할당 여부) kubectl get ingress -A # Ingress 이벤트 및 백엔드 상태 확인 kubectl describe ingress ingressWeb
CKAD 시험에서 Ingress 문제는 대부분 기존 Service에 연결하는 YAML 작성 문제입니다. spec.rules[].host에 도메인, spec.rules[].http.paths[].backend.service.name/port에 Service 정보를 정확히 기입하는 것이 핵심이며, pathType: Prefix와 pathType: Exact의 차이도 숙지해두면 좋습니다.
경로 기반 라우팅과 TLS 설정
Ingress는 도메인 기반 라우팅 외에도 URL 경로 기반 라우팅을 지원합니다. 동일한 도메인에서 /api는 백엔드 서비스로, /static은 프런트엔드 서비스로 각각 라우팅하는 구성이 가능합니다. pathType: Prefix는 지정된 경로로 시작하는 모든 URL을 매칭하고, pathType: Exact는 정확히 일치하는 경우만 처리합니다.
HTTPS를 적용하려면 spec.tls 섹션에 도메인과 TLS Secret을 지정합니다. TLS Secret은 kubernetes.io/tls 타입으로 인증서(tls.crt)와 개인키(tls.key)를 포함해야 합니다. IngressController가 TLS Termination을 처리하면 백엔드 서비스는 HTTP로 통신하면서 외부에는 HTTPS로 노출됩니다. cert-manager와 연동하면 Let’s Encrypt 인증서를 자동으로 발급하고 갱신하는 파이프라인을 구성할 수 있습니다.
CKAD 시험에서는 기존 Service를 IngressClass가 지정된 클러스터에 연결하는 Ingress YAML 작성 문제가 자주 출제됩니다. ingressClassName 필드를 누락하면 IngressController가 Ingress를 처리하지 않을 수 있으므로, 시험 환경에서 kubectl get ingressclass로 사용 가능한 IngressClass 이름을 먼저 확인하는 습관을 들이는 것이 좋습니다.
참고
참고 문서: kubectl create ingress · ingress-nginx → Traefik 마이그레이션 — Traefik v3.7.5 구성