쿠버네티스 Ingress와 AWS EKS시 AWS ALB와 관계
TMT쿠버네티스에서 Ingress와 AWS ALB는 서로 배타적인 개념이 아니라, Ingress가 AWS ALB를 사용하도록 설정하여 함께 사용하는 것이 일반적입니다. 다만, 특정 상황에서는 AWS ALB를 직접 설정하여 Ingress 없이 사용하는 경우도 가능합니다.
1. Ingress와 AWS ALB의 관계
- Ingress는 트래픽 라우팅 규칙을 정의하는 쿠버네티스 리소스입니다.
- AWS ALB는 Ingress Controller로 동작하며, Ingress 리소스를 기반으로 ALB를 자동 생성하고 관리합니다.
일반적인 흐름:
- 쿠버네티스에서 Ingress 리소스를 정의.
- AWS Load Balancer Controller가 이를 감지하고 ALB를 생성.
- ALB가 트래픽을 처리하고, Ingress 리소스에 정의된 규칙에 따라 내부 서비스로 전달.
2. Ingress 대신 AWS ALB를 직접 사용하는 경우
AWS ALB를 직접 설정하여 사용하는 것도 가능합니다. 이 경우 Ingress 리소스를 사용하지 않고, Service에 직접 AWS LoadBalancer 타입을 지정합니다.
예시: LoadBalancer 타입의 Service
apiVersion: v1
kind: Service
metadata:
name: example-service
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb" # 또는 "alb" (컨트롤러 필요)
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: example-app
- 이 방식에서는 ALB가 생성되지만, 라우팅 규칙은 쿠버네티스 외부에서 수동으로 관리해야 합니다.
- Ingress를 사용하지 않으므로 HTTP/HTTPS 경로나 호스트 기반 라우팅 같은 고급 기능은 구현이 번거로울 수 있습니다.
3. Ingress + AWS ALB의 조합이 일반적인 이유
AWS 환경에서 Ingress와 ALB를 함께 사용하는 것이 더 일반적입니다. 이유는 다음과 같습니다:
-
자동화:
- Ingress 리소스를 정의하면, AWS Load Balancer Controller가 ALB를 자동으로 생성 및 관리.
- 별도의 수동 작업이 필요 없음.
-
유연성:
- Ingress 리소스를 사용하면 경로 기반 라우팅, 도메인 기반 라우팅, TLS 설정 등을 쉽게 정의할 수 있음.
-
Infrastructure as Code:
- Ingress 설정은 YAML로 관리되므로 코드로 정의 및 버전 관리 가능.
Ingress + ALB 설정 예시:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:region:account-id:certificate/certificate-id"
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
4. 언제 Ingress 없이 ALB를 직접 사용할까?
다음과 같은 경우 Ingress를 사용하지 않고 AWS ALB를 직접 설정하기도 합니다:
-
단순한 트래픽 전달:
- 단일 애플리케이션에 대한 트래픽 전달만 필요할 때.
-
AWS에서 제공하는 추가 기능 활용:
- ALB의 고급 설정(예: 고유 리스너 규칙, WAF 통합)을 더 세밀하게 제어하고 싶을 때.
-
고성능 네트워크 로드 밸런싱:
- ALB가 아닌 NLB(Network Load Balancer) 같은 다른 AWS 로드 밸런서 타입을 사용하고 싶을 때.
5. Ingress vs AWS ALB 직접 설정: 비교
특징 | Ingress + ALB | ALB 직접 설정 |
---|---|---|
설정 관리 | YAML로 Ingress 리소스를 관리 | AWS 콘솔/CLI로 설정 관리 |
자동화 수준 | 자동으로 ALB 생성 및 관리 | 수동으로 ALB 구성 |
유연성 | 경로 기반, 도메인 기반 라우팅 지원 | AWS에서 제공하는 기능 활용 가능 |
HTTP/HTTPS 라우팅 | Ingress에서 간단히 설정 가능 | AWS 콘솔에서 리스너/규칙 설정 필요 |
관리 복잡성 | 단순화 (Ingress 리소스 사용) | 관리 및 설정 복잡 |
6. 결론
- Ingress + AWS ALB는 쿠버네티스 환경에서 외부 트래픽을 처리하는 가장 일반적이고 효율적인 방식입니다.
- 단순한 요구사항이 있거나 Ingress를 사용하지 않으려는 경우 AWS ALB를 직접 설정할 수도 있습니다.
- 요구사항과 운영 방침에 따라 두 접근 방식을 적절히 선택하면 됩니다.