[Kubernetes] 여러 Kubernetes 네임스페이스에서 단일 ALB Ingress 사용하기

2025. 2. 16. 13:50·Kubernetes

이번 글에서는 Amazon EKS에서 단일 AWS Application Load Balancer(ALB)를 사용하여 여러 Kubernetes 네임스페이스에 배포된 서비스에 대한 인그레스 트래픽을 관리하는 방법을 소개합니다. 구체적으로, 서로 다른 네임스페이스에 배포된 두 개의 서비스(HTTPD와 NGINX)에 대해 ALB Ingress Controller를 설정하고 URL 경로를 기준으로 트래픽을 라우팅하는 방법을 설명합니다.

사전 준비

시작하기 전에 다음 사항들을 확인해야 합니다:

  1. EKS 클러스터가 정상적으로 작동하고 있어야 합니다.
  2. 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
'Kubernetes' 카테고리의 다른 글
  • [Kubernetes] Kubernetes Mutating Webhook을 이용한 Sidecar 자동 주입 가이드
  • [Kubernetes] EKS 클러스터에 ReadOnly 및 Admin 권한 설정하기
  • [Kubernetes] pod의 고가용성 구성 (topologySpreadConstraints)
dml113
dml113
dml113의 AWS 이야기
  • dml113
    Cloud
    dml113
  • 전체
    오늘
    어제
    • 분류 전체보기 (34)
      • Project (0)
      • Kubernetes (17)
        • CNCF (12)
        • TroubleShooting (1)
      • AWS Service (9)
      • Linux (3)
      • Github (2)
      • Production Traffic (3)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dml113
[Kubernetes] 여러 Kubernetes 네임스페이스에서 단일 ALB Ingress 사용하기
상단으로

티스토리툴바