외부 DNS + Ingress 조합으로 도메인 붙이다가 생길 수 있는 웃픈 실수들

Json·2025년 9월 23일
0

k8d

목록 보기
40/42
post-thumbnail

“쿠버네티스 Ingress, DNS, 그리고 나의 멘탈”


🐣 Intro

쿠버네티스 서비스에 도메인 붙이는 순간이 옵니다.
“외부에서 myapp.example.com으로 접속되게 해주세요~”

👉 여기서부터 실수 퍼레이드가 시작됩니다.
(실무자라면 누구나 한 번쯤 겪는 고통…)

_(“Ingress 붙이기, 말은 쉽지…”)_

😅 흔한 웃픈 실수 모음집

1. DNS 레코드 TTL 지옥

  • DNS A 레코드를 바꿨는데, 5분 지나도 적용 안 됨 → 1시간 기다림 → 아직도 안 됨
  • 이유: TTL이 3600(1시간)으로 박혀 있음
  • 나: “왜 안 되지?”
  • DNS: “캐시가 아직 살아있는데요?”

2. Ingress Controller 미설치

  • Ingress 리소스는 만들었는데… Ingress Controller가 없음 🤦

  • kubectl get ingress → 리소스는 있음
  • 외부 접속? 없음.
  • 현실: Ingress는 컨트롤러 없으면 그냥 YAML 낙서장

3. 잘못된 Hostname

  • Ingress host: myapp.example.com으로 해놨는데, 실제 DNS는 app.example.com으로 설정
  • 당연히 접속 안 됨
  • 나: “왜 안 열려!”
  • Chrome: “DNS_PROBE_FINISHED_NXDOMAIN”

4. 서비스/포트 매핑 꼬임

  • Ingress는 80/443 포트만 받는데, Service는 NodePort 30080만 열어둠
  • 결과: Ingress → Service 연결 실패
  • 나는 “Ingress가 고장났어!” 외침
  • 알고 보니 내 YAML이 고장났음 🤯

5. HTTPS 인증서 깜빡

  • Ingress는 잡혔는데 HTTPS 설정 빼먹음
  • 브라우저: “주의 요함 🔒❌”
  • 팀장님: “왜 보안 경고 뜨냐?”
  • 나: “아직 테스트 중이라서요…” (속으로: “cert-manager 안 넣었어…”)

6. DNS 전파 속도 무시

  • DNS 수정 → 바로 curl
  • “안 되네?” → Ingress 뒤지고, Pod 뒤지고, Service 확인
  • 결국 DNS가 전파 안 된 거였음
  • 🤦‍♂️ 멘탈: CrashLoopBackOff


🧾 Ingress 예시 YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

annotations → 어떤 Ingress Controller를 쓸지 지정 (nginx, traefik 등)

host → 반드시 DNS와 똑같이 일치해야 함

backend → 연결할 Service와 포트

$ kubectl describe ingress myapp-ingress

Name:             myapp-ingress
Namespace:        default
Address:          203.0.113.25
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host               Path  Backends
  ----               ----  --------
  myapp.example.com  
                     /   myapp-service:80 (10.244.1.12:8080)
Annotations:         kubernetes.io/ingress.class: nginx
Events:
  Type    Reason  Age   From                     Message
  ----    ------  ----  ----                     -------
  Normal  Sync    1m    nginx-ingress-controller  Scheduled for sync

👉 여기서 꼭 확인해야 할 포인트:

Address → 외부 LB IP가 제대로 잡혔는지

Host → DNS와 정확히 일치하는지

Backends → 올바른 Service/Pod IP에 연결됐는지


🧪 실수 방지 체크리스트

도메인 붙이기 전에 최소한 이건 확인하자:

  • Ingress Controller 설치되어 있는가? (nginx, traefik 등)
  • DNS 레코드가 올바른지, TTL은 짧게 설정했는지?
  • Ingress host와 DNS FQDN이 정확히 일치하는지?
  • Service와 Ingress 매핑이 맞는지? (포트 포함)
  • HTTPS 인증서(cert-manager 등) 적용했는지?

🍕 비유로 이해하기

  • DNS = 택배 주소
  • Ingress = 아파트 경비실
  • Service = 집 호수
  • Pod = 실제 택배 받을 사람

👉 주소 틀리면 택배 못 감.
👉 경비실 없으면 택배 못 들어감.
👉 호수 틀리면 다른 집으로 감.


🎬 마무리

외부 DNS + Ingress 붙이는 작업은 단순해 보이지만 함정 카드가 잔뜩 숨어 있습니다.

  • TTL 때문에 반나절 기다리다 멘붕
  • Ingress Controller 깜빡하고 삽질
  • Hostname 오타로 하루 증발

👉 이젠 이렇게 기억하세요:

“Ingress는 DNS와 Hostname이 맞아야 진짜 열린다.”
“HTTPS는 cert-manager로 자동 발급하자.” 😎

0개의 댓글