[Azure / AKS] AGIC vs Application Gateway for Containers

2025. 11. 28. 15:00·DevOps/Cloud
반응형

Gateway API 기반 Gateway/Route 분리 전략

AKS에서 L7 Ingress를 구성할 때 예전에는 Ingress-NGINX + AGIC(Application Gateway Ingress Controller) 조합이 사실상 정석에 가까웠다.

하지만 Kubernetes 커뮤니티가 Gateway API를 차세대 표준으로 밀기 시작했고, Azure도 이에 맞춰 Application Gateway for Containers(AGfC) 를 내놓으면서 흐름이 크게 바뀌고 있다.Microsoft Tech Community+1

이 글에서는,

  • AGIC와 AGfC의 차이
  • Kubernetes Gateway API에서 Gateway / HTTPRoute 역할 분리
  • AGfC에서 Gateway/Route 기반으로 멀티 서비스·멀티 팀·멀티 테넌시를 어떻게 설계할 수 있는지
  • 실제 YAML 예시 (멀티 사이트 호스팅, 트래픽 분할, Path/Header 기반 라우팅)

까지 한 번에 정리해 본다.

대상 독자

  • AKS를 이미 운영 중이고 Ingress를 AGfC로 옮기려는 사람
  • Gateway API 기반으로 Gateway/Route 분리 전략을 설계하고 싶은 DevOps / SRE / 아키텍트
  • AGIC → AGfC 마이그레이션과 운영 모델을 고민 중인 팀

1. AGIC vs Application Gateway for Containers 한눈에 비교

1-1. AGIC(Application Gateway Ingress Controller) 개요

AGIC는 AKS 내부에서 돌면서 Kubernetes Ingress 리소스를 감시하고, 이를 기존 Application Gateway(클래식 L7 LB) 설정으로 변환해주는 컨트롤러다.Azure 문서+1

  • 데이터 플레인: 기존 Application Gateway
  • 컨트롤 플레인: AKS 안에서 띄운 ingress-controller Pod
  • 구성 인터페이스:
    • Kubernetes Ingress + Annotation
    • 일부 기능은 Annotation에 의존 (예: WAF, 리디렉션, 멀티 사이트 등)azure.github.io

1-2. Application Gateway for Containers(AGfC) 개요

AGfC는 AGIC의 “진화 버전”으로, Kubernetes Gateway API를 네이티브로 지원하는 L7 LB + 동적 트래픽 관리 제품이다.Microsoft Learn+2GitHub+2

  • AKS용 애플리케이션 계층 부하 분산 + 동적 라우팅 전용 제품
  • Gateway API + Ingress API 둘 다 지원, 단 Gateway API 사용 권장Microsoft Learn+2Microsoft Learn+2
  • 거의 실시간에 가까운 라우팅 업데이트, 트래픽 분할, WAF, 멀티 사이트 호스팅 등 지원Microsoft Learn+3Microsoft Learn+3Microsoft Learn+3

공식 문서에서도 AGIC 대비 장점으로 성능, 트래픽 분할, Gateway API 지원, Kubernetes/ARM 양쪽에서 구성 가능 등을 언급하며, AGIC → AGfC 마이그레이션을 권고하고 있다.Microsoft Learn+1


2. Kubernetes Gateway API 핵심 개념 정리

(Gateway / HTTPRoute 역할 분리가 왜 중요한지)

Gateway API는 Kubernetes의 다음 세대 L4/L7 라우팅 표준이다. 기존 Ingress의 한계를 보완하기 위해 설계되었고, Ingress + LoadBalancer + Service Mesh까지 포괄하는 범용 모델을 목표로 한다.Kubernetes+2gateway-api.sigs.k8s.io+2

가장 중요한 포인트는 역할(퍼소나) 기반 리소스 분리다.

  • GatewayClass
    • 인프라 제공자(Cloud / 플랫폼 팀) 관점
    • 어떤 종류의 LB를 쓸지, 어떤 구현체를 사용할지 정의
  • Gateway
    • 클러스터/플랫폼 운영자 관점
    • “어떤 IP/포트/도메인으로 들어온 트래픽을 받을 것인가”
    • Listener, TLS, 기본 정책 등 Layer 7 수신부 정의
  • HTTPRoute (또는 GRPCRoute, TCPRoute 등)
    • 앱 개발자/서비스 팀 관점
    • “어떤 Path/Host/Header/Query에 따라 어떤 Service로 라우팅할 것인지” 정의gateway-api.sigs.k8s.io+2Kgateway+2

즉,

Gateway = 수신점 / 인프라 레벨

HTTPRoute = 라우팅 룰 / 애플리케이션 레벨

로 나눠서 관리할 수 있다는 게 핵심이다.

이 구조 덕분에,

  • 인프라 팀은 IP, DNS, 인증서, WAF, 공용 Listener, 보안 정책에 집중하고
  • 서비스 팀은 Path/Host/버전별 라우팅, Canary/Blue-Green에 집중하는
  • 분업이 가능해진다.

3. AGfC 아키텍처와 컴포넌트 이해하기

공식 문서를 기준으로 AGfC는 다음과 같이 구성된다.Microsoft Learn+2Microsoft Learn+2

  • 데이터 플레인:
    • Azure 리소스로 배포된 Application Gateway for Containers(ALB)
    • AKS 외부에 존재하며, Frontend IP/Port를 가진 L7 LB
  • 컨트롤 플레인:
    • AKS에 배포되는 Application Load Balancer(ALB) Controller
    • Gateway / HTTPRoute 등 Gateway API 리소스를 감시하고
    • → AGfC 리소스를 프로비저닝/업데이트

요청 흐름은 대략 다음과 같다.Microsoft Learn+1

  1. 클라이언트 → AGfC Frontend(IP/도메인)로 HTTP(S) 요청
  2. AGfC는 Listener → Gateway → HTTPRoute 구성을 기반으로 라우팅 결정
  3. 선택된 백엔드(Target Group, Pod, Service)로 요청 전달
  4. x-forwarded-for, x-request-id 등을 헤더에 추가해 애플리케이션까지 전달

여기까지가 큰 그림이고, 이제 Gateway/Route 기반 분리 전략을 실제로 어떻게 가져갈 수 있는지 살펴보자.


4. Gateway / HTTPRoute 기반 분리 전략 패턴

Gateway API의 장점은 **“Gateway는 공유, Route는 분리”**라는 모델을 자연스럽게 가져갈 수 있다는 점이다.

여기서는 AKS + AGfC 환경을 기준으로 자주 쓰이는 3가지 패턴을 정리해 본다.

4-1. 인프라 팀이 Gateway, 서비스 팀이 Route 관리

시나리오

  • 인프라/플랫폼 팀:
    • 공용 도메인, 인증서, IP, WAF, Frontend Listener 관리
  • 서비스 팀:
    • api.service.com, admin.service.com 같은 호스트/Path 라우팅
    • 신규 서비스, 버전별 Canary, Blue-Green 등

구성 아이디어

  • infra 네임스페이스에 Gateway 리소스를 생성
  • 각 앱 팀 네임스페이스에 HTTPRoute를 생성
  • HTTPRoute에서 parentRefs로 infra 네임스페이스의 Gateway를 참조
# infra-namespace 에서 관리하는 Gateway 예시
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: shared-gateway
  namespace: infra
spec:
  gatewayClassName: azure-alb
  listeners:
    - name: https
      protocol: HTTPS
      port: 443
      hostname: "*.cloudnote.dev"
      tls:
        mode: Terminate
        certificateRefs:
          - name: cloudnote-cert

# app1 네임스페이스에서 관리하는 HTTPRoute 예시
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: app1-route
  namespace: app1
spec:
  parentRefs:
    - name: shared-gateway
      namespace: infra
      sectionName: https
  hostnames:
    - "api.cloudnote.dev"
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /v1
      backendRefs:
        - name: app1-svc
          port: 80

이렇게 구성하면,

  • 인프라 팀은 Gateway(Listener/TLS/WAF) 만 관리
  • 각 팀은 자기 네임스페이스 내 Route와 Service만 손대면 됨
  • RBAC으로 네임스페이스별 HTTPRoute 권한만 주면,
  • 공용 Gateway는 건드리지 못하게 막을 수 있다.Mischa van den Burg+1

4-2. 도메인/서비스 별 Route 분리 (멀티 사이트 호스팅)

AGfC는 하나의 Gateway 리소스(= AGfC Frontend)에서 여러 사이트/도메인을 동시에 호스팅하는 시나리오를 공식 문서에서 예시로 제공한다.Microsoft Learn+2Microsoft Learn+2

대표적인 패턴:

  • www.cloudnote.dev → 프론트엔드 SPA
  • api.cloudnote.dev → 백엔드 API
  • admin.cloudnote.dev → 관리 콘솔

Gateway는 하나, HTTPRoute는 여러 개로 분리한다.

# 하나의 Gateway에 여러 Host를 허용
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: shared-gateway
  namespace: infra
spec:
  gatewayClassName: azure-alb
  listeners:
    - name: https
      protocol: HTTPS
      port: 443
      hostname: "*.cloudnote.dev"
      tls:
        mode: Terminate
        certificateRefs:
          - name: cloudnote-cert

# www Route
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: web-route
  namespace: web
spec:
  parentRefs:
    - name: shared-gateway
      namespace: infra
      sectionName: https
  hostnames:
    - "www.cloudnote.dev"
  rules:
    - backendRefs:
        - name: web-frontend-svc
          port: 80

# API Route
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: api-route
  namespace: api
spec:
  parentRefs:
    - name: shared-gateway
      namespace: infra
      sectionName: https
  hostnames:
    - "api.cloudnote.dev"
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: / # 전체
      backendRefs:
        - name: api-backend-svc
          port: 8080

이 패턴을 쓰면,

  • 도메인 별로 Route를 분리하면서도
  • 실제 Application Gateway for Containers는 하나만 운영할 수 있어 비용/운영 측면에서 효율적이다.Microsoft Learn+2GitHub+2

4-3. 팀/조직 별 Route 분리 + Cross-namespace 라우팅

Gateway API는 Cross-namespace 라우팅도 지원한다.Tigera - Creator of Calico+2Mischa van den Burg+2

즉,

  • Gateway는 infra 네임스페이스
  • HTTPRoute는 team-a, team-b, team-c 네임스페이스
  • Backend Service는 또 다른 네임스페이스에 있어도 된다

예시: Route는 team-a, 백엔드는 shared namespace

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: team-a-api
  namespace: team-a
spec:
  parentRefs:
    - name: shared-gateway
      namespace: infra
      sectionName: https
  hostnames:
    - "team-a-api.cloudnote.dev"
  rules:
    - backendRefs:
        - name: team-a-api-svc
          namespace: shared-backend
          port: 8080

이렇게 가져가면,

  • 앱 팀은 자기 Route만 관리
  • 백엔드/코어 서비스는 별도 네임스페이스로 격리
  • RBAC·NetworkPolicy·네임스페이스 전략과 결합해서
  • 팀/조직 구조를 그대로 라우팅 계층에 투영할 수 있다.

5. Gateway API로 가능한 고급 라우팅 패턴 (AGfC 연동)

AGfC는 Gateway API의 다양한 기능을 그대로 활용한다. 공식 문서 기준으로 Path / Header / QueryString 기반 라우팅, 트래픽 분할(Weighted routing) 등을 지원한다.Microsoft Learn+2Microsoft Learn+2

5-1. Path / Header / Query 기반 라우팅

예시:

  • /api는 백엔드 API
  • /admin은 관리자 콘솔
  • 특정 Header(X-Canary: true)가 있는 트래픽만 Canary 버전으로 보내기
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: advanced-route
  namespace: api
spec:
  parentRefs:
    - name: shared-gateway
      namespace: infra
      sectionName: https
  hostnames:
    - "api.cloudnote.dev"
  rules:
    # /api/* → main API
    - matches:
        - path:
            type: PathPrefix
            value: /api
      backendRefs:
        - name: api-v1-svc
          port: 8080

    # /admin/* → admin 콘솔
    - matches:
        - path:
            type: PathPrefix
            value: /admin
      backendRefs:
        - name: admin-svc
          port: 80

    # 특정 헤더가 있는 요청만 canary 로 보내기
    - matches:
        - headers:
            - type: Exact
              name: X-Canary
              value: "true"
      backendRefs:
        - name: api-v2-canary-svc
          port: 8080

공식 예제에서도 URL 경로, 쿼리 문자열, 헤더에 따라 다른 백엔드로 보내는 패턴을 보여준다.Microsoft Learn+2gateway-api.sigs.k8s.io+2


5-2. 트래픽 분할(Weighted Routing)로 Canary / Blue-Green

AGfC + Gateway API 조합은 가중치 기반 트래픽 분할을 지원한다.Tigera - Creator of Calico+3Microsoft Learn+3Microsoft Learn+3

예시:

api-v1 80%, api-v2 20% 비율로 트래픽 분배

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: api-canary
  namespace: api
spec:
  parentRefs:
    - name: shared-gateway
      namespace: infra
      sectionName: https
  hostnames:
    - "api.cloudnote.dev"
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /api
      backendRefs:
        - name: api-v1-svc
          port: 8080
          weight: 80
        - name: api-v2-svc
          port: 8080
          weight: 20

이 구조를 활용하면,

  • 처음엔 v2에 5~10%만 보내서 Canary 테스트
  • 에러 없으면 30% → 50% → 100%로 점진 롤아웃
  • 문제가 생기면 weight 값을 조정해 즉시 롤백

같은 Blue-Green/Canary 전략을 아주 자연스럽게 구현할 수 있다.


6. 보안 & 운영: AGfC + Azure WAF, TLS, 로그

AGfC는 Azure Web Application Firewall와 통합할 수 있고, Gateway 레벨에서 TLS 및 보안 정책을 통일 관리할 수 있다.Microsoft Learn+2Microsoft Learn+2

6-1. TLS 종료 & 인증서 관리

  • TLS 인증서는 Gateway 리스너에서 Terminate
  • HTTPRoute에서는 일반 HTTP 라우팅만 신경 쓰면 됨
  • 인증서 로테이션, 도메인 추가는 인프라(Gateway) 레벨에서만 처리

6-2. WAF 정책

  • AGfC Frontend에 Azure WAF 정책을 붙여서
    • OWASP 룰셋, Rate Limit, 특정 패턴 차단을 Gateway 레벨에서 적용
  • HTTPRoute는 비즈니스/애플리케이션 로직 라우팅만 담당

6-3. 로깅 & 모니터링

AGfC는 요청에 x-request-id 헤더를 추가해 주기 때문에,

애플리케이션 로그 + AGfC 로그를 이 ID로 묶어서 추적할 수 있다.Microsoft Learn+1

  • Azure Monitor / Log Analytics / APM(예: Datadog)와 연동해
    • 라우트별, 서비스별, 버전별 트래픽/에러율 모니터링
  • Canary/Blue-Green 시나리오에서도 Route + 로그만으로도 충분한 가시성을 확보

7. AGIC → AGfC 마이그레이션 시 Gateway/Route 전략 팁

Microsoft는 AGIC에서 AGfC로의 마이그레이션에 대해 점진·무중단 전환을 권고한다.Microsoft Learn+1

핵심 아이디어:

  1. 기존 AGIC + Application Gateway는 그대로 둔다
  2. AGfC + Gateway API 기반 구성을 병렬로 추가
  3. DNS, Path, Host 단위로 트래픽을 점진적으로 AGfC로 이동
  4. 충분히 검증되면 AGIC 관련 리소스를 정리

이를 Gateway/Route 관점에서 보면,

  • 1단계 – 동일 도메인에 별도 Path 붙이기
    • /api는 기존 AGIC, /api-v2는 AGfC로 라우팅
  • 2단계 – Host 분리 후 전환
    • api-v2.cloudnote.dev를 AGfC에 먼저 붙이고
    • 모든 검증이 끝나면 api.cloudnote.dev의 DNS를 AGfC로 변경
  • 3단계 – Same Host + Weighted Routing
    • AGfC 도입 후에는 HTTPRoute의 weight 기능으로
    • 점진 트래픽 전환/롤백 자동화 가능

8. 정리 – AKS에서 Gateway/Route 분리를 어떻게 가져갈 것인가

정리하면,

  • AGIC
    • Ingress + Annotation 기반
    • Application Gateway(클래식) 구성에 최적화
  • AGfC + Gateway API
    • Gateway / HTTPRoute로 역할 분리
    • 멀티 사이트 호스팅, 트래픽 분할, Cross-namespace 라우팅
    • 인프라와 애플리케이션의 책임 분리가 명확해짐Mischa van den Burg+3Microsoft Tech Community+3Microsoft Learn+3

Gateway/Route 기반 분리 전략의 핵심은 세 가지다.

  1. Gateway는 인프라 팀, Route는 서비스 팀
    • Listener, 도메인, 인증서, WAF, 공통 정책은 Gateway
    • 각 서비스의 Path/Host/버전 라우팅은 HTTPRoute
  2. 하나의 Gateway로 여러 서비스/도메인/팀을 통합
    • 멀티 사이트 호스팅, 멀티 테넌시, Cross-namespace 라우팅
    • 비용 효율 + 운영 단순화
  3. Canary/Blue-Green, Path/Header/Query 기반 라우팅까지 코드로 관리
    • HTTPRoute 하나로 트래픽 전략을 모두 정의
    • GitOps와 결합하면 라우팅 변경도 Git PR로 관리 가능

AKS를 이미 운영 중이라면,

새로운 서비스부터라도 AGfC + Gateway API + Gateway/Route 분리 패턴으로 설계해 두면,

장기적으로 마이그레이션과 운영이 훨씬 수월해진다.

반응형

'DevOps > Cloud' 카테고리의 다른 글

[Azure] Azure Front Door 보안 강화 (Service Tag + AFID 기반 백엔드 보호 전략)  (0) 2025.12.11
[Azure] Azure Bastion + Key Vault Secret 기반 SSH 접속  (0) 2025.12.02
[Azure] Azure Virtual Desktop(AVD) 가이드  (0) 2025.12.02
[Cloud] AWS vs Azure 비교 완벽 가이드  (0) 2025.11.28
[Azure] AKS(Azure Kubernetes Service) 살펴보기  (0) 2025.11.28
'DevOps/Cloud' 카테고리의 다른 글
  • [Azure] Azure Bastion + Key Vault Secret 기반 SSH 접속
  • [Azure] Azure Virtual Desktop(AVD) 가이드
  • [Cloud] AWS vs Azure 비교 완벽 가이드
  • [Azure] AKS(Azure Kubernetes Service) 살펴보기
Cloud & DevOps Engineering
Cloud & DevOps Engineering
Azure, AWS, NCP 기반의 멀티클라우드 환경에서 DevOps, Kubernetes, 자동화, 운영 노하우와 실전 아키텍처를 공유합니다.
  • Cloud & DevOps Engineering
    CMP Blog
    Cloud & DevOps Engineering
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • IT 꿀팁 (4)
      • DevOps (12)
        • Cloud (6)
        • Kubernetes (6)
      • AI (6)
      • 핑거푸드 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    KeyVault
    AFID
    claudecode
    자격증
    github
    MCP
    Azure
    AIEngineering
    kubernetes
    AGIC
    AI
    devops
    aks
    nks
    AGfC
    ncp
    copilot
    GatewayAPI
    Terrform
    cka
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.5
Cloud & DevOps Engineering
[Azure / AKS] AGIC vs Application Gateway for Containers
상단으로

티스토리툴바