Application Gateway를 ingress controller로 사용하기

Glen·2024년 7월 3일
0

aws 환경에 구축되어있는 서비스를 azure로 변경하는 과정에서, aws에선 alb를 ingress로 사용했을때 아무 문제 없던 websocket이 문제가 있었다.

  • 우선 azure에선 외부 통신을 위해 nginx를 ingress 컨트롤러로 배포하여 사용하고 있었다.
  • 도메인은 frontdoor에서 관리하고 연결하여 사용하는데, frontdoor에는 websocket을 지원하지 않는다. 때문에 API management를 사용해야 했다.

테라폼으로 테스트 할 시간은 없어서 azure doc에서 cli를 확인하고 진행했다.

1. 리소스그룹 생성

az group create --name <rg 이름> --location koreacentral

2. public ip 생성

az network public-ip create -n <ip 이름> -g <rg 이름> --allocation-method Static --sku Standard

3. vnet 생성

  • aks에 연결후에 aks 서브넷과 피어링을 해야되는데 이미 있는 대역이라면 cli에서는 에러는 나지 않지만 피어링이 되지 않으니 주의
az network vnet create -n <vnet 이름> -g <rg 이름> --address-prefix <10.0.0.0/16> --subnet-name <subnet 이름> --subnet-prefix 10.0.0.0/24

4. agw 생성 (ip는 2번 결과값 추가)

az network application-gateway create -n <agw 이름> -g <rg 이름>  --sku Standard_v2 --public-ip-address <2번 결과값> --vnet-name <vnet 이름> --subnet <subnet 이름> --priority 100

5. AKS에 add one

# agw의 id를 변수로 저장
appgwId=$(az network application-gateway show -n <agw 이름> -g <rg 이름> -o tsv --query "id")


# aks에 agw를 수신컨트롤러로 사용(ingress-appgw)
az aks enable-addons -n <배포할 aks 이름> -g <aks rg 이름> -a ingress-appgw --appgw-id $appgwId

6. 피어링

aksVnetId=$(az network vnet show -n <aks vnet 이름> -g <aks vnet rg 이름> -o tsv --query "id")

az network vnet peering create -n AGWtoAKSVnetPeering -g <agw-rg 이름> --vnet-name <agw-vnet 이름> --remote-vnet $aksVnetId --allow-vnet-access

appGWVnetId=$(az network vnet show -n <agw-vnet 이름> -g <agw-rg 이름> -o tsv --query "id")

az network vnet peering create -n AKStoAGWVnetPeering -g <aks vnet rg 이름> --vnet-name <aks vnet 이름> --remote-vnet $appGWVnetId --allow-vnet-access

annotation

ingress controller를 사용하기 위해선 아래와 같이 추가

  • kubernetes.io/ingress.class: azure/application-gateway

port를 여러개 사용하기 위해선 아래와 같은 annotation이 필요

  • appgw.ingress.kubernetes.io/override-frontend-port

azure doc 보다는 github에 자세히 나와있다.

설치결과

  • 아래 처럼 pod가 생성되면 끗.(위에서 이름을 ingress-appgw로 설정함)
profile
어제보다 나은 엔지니어가 되기 위해서 공부중

0개의 댓글