궁금하면
Ingress랑 Gateway API가 뭐가 달라? 결국 같은 역할 아니야?
응답
역할은 같습니다. 둘 다 '외부 트래픽을 클러스터 안의 Service로 라우팅'하는 게 목적입니다. 다른 점은 확장성과 역할 분리입니다. Ingress는 단일 리소스에 모든 걸 담습니다. 호스트, 경로, TLS 그리고 Controller별 애너테이션까지 한 YAML에 욱여넣습니다. 팀이 작을 때는 간단해서 좋지만, 인프라 팀과 앱 팀이 나뉜 조직에서는 서로 같은 파일을 건드리면서 충돌이 납니다. 그리고 Controller마다 애너테이션 문법이 달라서 (nginx.ingress.kubernetes.io/... vs traefik.ingress.kubernetes.io/...) 이식성이 낮습니다. Gateway API는 세 개의 리소스로 쪼갭니다. GatewayClass는 '어떤 구현체를 쓰는가'(플랫폼 담당), Gateway는 '어느 IP/포트로 받을까'(인프라팀 담당), HTTPRoute는 '어느 경로를 어느 서비스로 보낼까'(앱팀 담당)입니다. 각 역할이 자기 리소스만 건드리면 됩니다. 그리고 라우팅 규칙이 표준 스펙에 명시되어 있어서 구현체가 바뀌어도 YAML이 거의 그대로 동작합니다. 또 하나 중요한 차이는 트래픽 분배입니다. Ingress는 weight 개념이 표준에 없어서 Controller 애너테이션으로 간신히 흉내냈습니다. Gateway API의 HTTPRoute는 backendRefs에 weight 필드가 처음부터 들어 있습니다. 5.3에서 Argo Rollouts가 이 필드를 조작해 트래픽을 옮깁니다.