본문 바로가기

Azure

[Azure] Azure Kubernetes Service에서 Load Balancer와 Application Gateway를 통한 외부 접근 설정 및 테스트 비교

반응형

Azure Kubernetes Service(AKS)에서 외부 접근을 허용하여 트래픽을 관리하기 위해 두 가지 주요 네트워크 구성 방법을 사용할 수 있다. Azure Load Balancer와 Azure Application Gateway 두 접근 방법을 비교하여 어떤 상황에서 각 방법을 사용하는 것이 적합한지 알아보자.

 

Load Balancer 기반 접근

  • 특징:
    • AKS 클러스터의 서비스에 대해 외부 접근을 허용하기 위해 Load Balancer를 설정한다.
    • 트래픽은 Load Balancer의 퍼블릭 IP를 통해 클러스터 내부의 특정 서비스로 라우팅된다.
    • 단순한 트래픽 분산 및 외부 접근을 설정할 때 유용하다.
  • 장점:
    • 설정이 간단하고 빠르게 배포 가능하다.
    • 단일 서비스에 대한 외부 접근을 제공하는 데 적합하다.
  • 사용 사례:
    • 기본적인 외부 트래픽 접근을 설정해야 할 때
    • 빠르고 간단한 배포가 필요할 때
    • 단일 애플리케이션에 외부 접근이 필요한 경우

Application Gateway 기반 접근

  • 특징:
    • Application Gateway는 Layer 7 로드 밸런서로, HTTP/HTTPS 트래픽에 대한 고급 라우팅 규칙을 제공한다.
    • 웹 애플리케이션 방화벽(WAF)을 포함하여 보안 기능을 강화할 수 있다.
    • 도메인 및 경로 기반 라우팅을 통해 여러 백엔드 서비스로 트래픽을 분산할 수 있다.
  • 장점:
    • 복잡한 트래픽 라우팅 및 관리가 가능하다.
    • WAF를 통해 보안이 강화된다.
    • SSL 종료, URL 기반 라우팅 등 고급 기능을 사용할 수 있다.
  • 사용 사례:
    • 여러 서비스에 대한 외부 접근이 필요할 때
    • 보안이 중요한 웹 애플리케이션을 보호해야 할 때
    • 경로 기반 또는 도메인 기반의 트래픽 분산이 필요한 경우
    • SSL 종료 및 기타 고급 기능이 필요한 경우

 

Load Balancer 기반 접근 테스트

1. Load Balancer 서비스 생성

  • 먼저 AKS 클러스터에 샘플 애플리케이션을 배포한다.
kubectl create namespace sample
kubectl apply -f https://raw.githubusercontent.com/Azure/aks-samples/main/azure-vote.yaml -n sample
  • Load Balancer 타입의 서비스를 생성한다.
# service-loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
  namespace: sample
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: azure-vote-front

 

2. 외부 IP 확인 및 접속

  • Load Balancer의 외부 IP를 확인한다.
kubectl get services -n sample
  • 출력된 외부 IP를 통해 브라우저에서 애플리케이션에 접속한다.

 

3. 테스트 결과 확인

  • 애플리케이션이 정상적으로 로드되고, 기능이 작동하는지 확인한다.

 

Application Gateway 기반 접근 테스트

 

1. Application Gateway Ingress Controller 설치

  • AKS 클러스터에 Application Gateway Ingress Controller(AGIC)를 설치한다
helm repo add application-gateway-ingress https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/
helm repo update
helm install ingress-azure application-gateway-ingress/ingress-azure \
  --version 1.5.1 \
  --namespace default \
  --set appgw.name=<AppGatewayName> \
  --set appgw.resourceGroup=<AppGatewayResourceGroup> \
  --set appgw.subscriptionId=<SubscriptionID> \
  --set appgw.shared=false \
  --set armAuth.type=servicePrincipal \
  --set armAuth.secretJSON=$(az ad sp create-for-rbac --sdk-auth)

 

 

2. Ingress 리소스 생성

  • Ingress 리소스를 생성하여 Application Gateway를 통해 트래픽을 라우팅한다.
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: azure-vote-ingress
  namespace: sample
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - host: "azurevote.<YourDNS>.com"
    http:
      paths:
      - path: /
        pathType: ImplementationSpecific
        backend:
          service:
            name: azure-vote-front
            port:
              number: 80
kubectl apply -f ingress.yaml

 

3. DNS 설정 및 접속

  • 생성한 도메인이 Application Gateway의 IP와 연결되도록 DNS 설정을 한다.

 

4. 테스트 결과 확인

  • 설정한 도메인을 통해 브라우저에서 애플리케이션에 접속한다.
  • 애플리케이션이 정상적으로 로드되고, 기능이 작동하는지 확인한다.

 

 

AKS 클러스터에서 외부 접근을 설정하는 방법을 선택할 때, 사용자의 요구사항과 환경에 맞는 솔루션을 선택하는 것이 중요하다. 단순하고 빠르게 설정이 가능한 외부 접근이 필요하다면 Load Balancer를 사용하는 것이 적합하다. 반면에, 고급 보안 기능과 복잡한 트래픽 관리가 필요한 경우 Application Gateway를 사용하는 것이 좋다.