이번 글에서는 Amazon EKS에서 단일 AWS Application Load Balancer(ALB)를 사용하여 여러 Kubernetes 네임스페이스에 배포된 서비스에 대한 인그레스 트래픽을 관리하는 방법을 소개합니다. 구체적으로, 서로 다른 네임스페이스에 배포된 두 개의 서비스(HTTPD와 NGINX)에 대해 ALB Ingress Controller를 설정하고 URL 경로를 기준으로 트래픽을 라우팅하는 방법을 설명합니다.
사전 준비
시작하기 전에 다음 사항들을 확인해야 합니다:
- EKS 클러스터가 정상적으로 작동하고 있어야 합니다.
- ALB Ingress Controller가 클러스터에 설치되어 있어야 합니다. 설치 방법은 공식 문서를 참조하세요.
1. httpd 네임스페이스에 HTTPD 애플리케이션 배포하기
우선 httpd 네임스페이스에 HTTPD 서비스를 배포합니다. 아래는 HTTPD 배포 및 서비스에 대한 매니페스트 파일입니다.
# httpd.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deployment
namespace: httpd
spec:
selector:
matchLabels:
app: httpd
replicas: 2
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: httpd
spec:
type: NodePort
selector:
app: httpd
ports:
- port: 80
targetPort: 80
protocol: TCP
- 위 매니페스트는 httpd 네임스페이스에 HTTPD 컨테이너 2개로 구성된 배포를 생성합니다.
- 서비스는 NodePort 유형으로 설정되어 있으며, 80번 포트를 외부로 노출합니다.
2. nginx 네임스페이스에 NGINX 애플리케이션 배포하기
다음으로, nginx 네임스페이스에 NGINX 서비스를 배포합니다. 아래는 NGINX 배포 및 서비스에 대한 매니페스트 파일입니다.
# nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: nginx
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
protocol: TCP
- 이 매니페스트는 nginx 네임스페이스에 2개의 NGINX 컨테이너로 구성된 배포를 생성합니다.
- 서비스는 NodePort 유형으로 설정되어 있으며, 80번 포트를 외부로 노출합니다.
3. ALB Ingress 설정
이제, 두 네임스페이스의 서비스를 ALB를 통해 라우팅할 수 있도록 Ingress 리소스를 설정합니다. 먼저, HTTPD 애플리케이션에 대한 Ingress를 설정합니다.
# httpd-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: instance
alb.ingress.kubernetes.io/group.name: "test"
spec:
rules:
- http:
paths:
- path: /httpd
pathType: Prefix
backend:
service:
name: httpd
port:
number: 80
위 매니페스트는 /httpd 경로로 들어오는 요청을 httpd 서비스로 라우팅합니다.
# nginx-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: skills-ingress
namespace: nginx
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: instance
alb.ingress.kubernetes.io/group.name: "test"
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
이 매니페스트는 / 경로로 들어오는 요청을 nginx 서비스로 라우팅합니다.
결과
위의 매니페스트 파일들을 적용한 후 생성되는 ALB에서는 다음과 같은 경로로 트래픽을 라우팅할 수 있습니다:
- / 경로로 접속하면 NGINX 페이지가 표시됩니다.
- /httpd 경로로 접속하면 HTTPD 페이지가 표시됩니다.
이처럼 하나의 ALB를 사용하여 여러 네임스페이스에 배포된 서비스들에 대해 경로 기반으로 트래픽을 라우팅할 수 있습니다. 이 방법을 통해 다양한 서비스들을 효율적으로 관리할 수 있습니다.
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] Kubernetes Mutating Webhook을 이용한 Sidecar 자동 주입 가이드 (0) | 2025.02.14 |
|---|---|
| [Kubernetes] EKS 클러스터에 ReadOnly 및 Admin 권한 설정하기 (0) | 2025.02.14 |
| [Kubernetes] pod의 고가용성 구성 (topologySpreadConstraints) (0) | 2025.01.19 |