Ingress Controller 를 통한 Host 및 Path 기반 라우팅 구현하기

NGINX Ingress Controller 는 kubernetes.io 에서 관리하는 ingress-nginx Controllernginx.org 에서 관리하는 nginx-ingress Controller가 존재합니다.

nginx.org에서 관리하는 NGINX Ingress Controller 의 설치 방법은 NGINX STORE의 NGINX Ingress Controlloer Docs를 참고하세요.

해당 블로그 포스트는 nginx.org 에서 관리하는 nginx-ingress Controller를 통해 Host 및 Path 기반 라우팅과 Wildcard Host 및 Path 기반 라우팅을 구현합니다.
nginx-ingress Controller가 이미 설치되어 있다고 가정합니다.

목차

1. NGINX Ingress Controller – 운영환경
2. NGINX Ingress Controller – Host 및 Path 기반 라우팅
 2-1. VirtualServer – Host 및 Path 기반 라우팅
 2-2. VirtualServer – Wildcard Host 및 Path 기반 라우팅

1. NGINX Ingress Controller – 운영환경

  • Operating System
    • Ubuntu 22.04.3 LTS (Jammy Jellyfish)
cat /etc/os-release

PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
  • Container Runtime
    • Docker version 24.0.7
docker version

Client: Docker Engine - Community
Version: 24.0.7

Server: Docker Engine - Community
Engine:
Version: 24.0.7
  • Kubernetes
    • Client Version: v1.28.2
    • Server Version: v1.28.6
kubectl version

Client Version: v1.28.2
Kustomize Version: v5.0.4-0.2023060116****-***********
Server Version: v1.28.6
  • Cluster
    • 1 Master (Control-Plane)
    • 3 Worker (Data-Plane)
kubectl get nodes

NAME STATUS ROLES AGE VERSION
master Ready control-plane 28d v1.28.2
worker1 Ready 28d v1.28.2
worker2 Ready 28d v1.28.2
worker3 Ready 28d v1.28.2

2. NGINX Ingress Controller – Host 및 Path 기반 라우팅

NGINX Ingress Controller Host and Path Based Routing

위 사진에서 NGINX Ingress Controller는 Client가 dev.devops.com/account 경로(Path)로 요청할 시 Account Service로 라우팅하고, *.devops.com/menu 경로로 요청을 하면 Menu Service로 라우팅합니다.

위와 같은 Host 및 Path 기반 라우팅을 NGINX Ingress Controller에서 구현하기 위해 NGINX Ingress Controller의 VirtualServer Resource를 작성하고 배포해야 합니다.

2-1. VirtualServer – Host 및 Path 기반 라우팅

host-path-virtual-server.yaml

apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: host-path
spec:
host: 'dev.devops.com'
upstreams:
- name: account
service: account-svc
port: 80
routes:
- path: /account
action:
pass: account

작성한 VirtualServer 리소스를 nginx-ingress 네임스페이스에 배포합니다.

kubectl apply -f host-path-virtual-server.yaml -n nginx-ingress

virtualserver.k8s.nginx.org/host-path created

kubectl 명령어를 통해 배포된 VirtualServer 리소스를 확인할 수 있습니다.
VirtualServer의 Host가 dev.devops.com으로 명시되어 있는 것을 확인할 수 있습니다.

kubectl get virtualserver -n nginx-ingress

NAME STATE HOST IP PORTS AGE
host-path Valid dev.devops.com 41m

curl 명령어를 통해 배포된 VirtualServer의 라우팅을 확인할 수 있습니다.

curl dev.devops.com:31886/account

Server address: 10.244.1.39:8080
Server name: account-6dddcf5c4d-nnz5s
Date: 06/Mar/2024:07:20:16 +0000
URI: /account
Request ID: c5297ae792cb0ba4f1f558a230837325

2-2. VirtualServer – Wildcard Host 및 Path 기반 라우팅

wildcard-host-path-virtual-server.yaml

apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: wildcard-host-path
spec:
host: '*.devops.com'
upstreams:
- name: menu
service: menu-svc
port: 80
routes:
- path: /menu
action:
pass: menu

작성한 VirtualServer 리소스를 nginx-ingress 네임스페이스에 배포합니다.

kubectl apply -f wildcard-host-path-virtual-server.yaml -n nginx-ingress

kubectl 명령어를 통해 배포된 VirtualServer 리소스를 확인할 수 있습니다.
VirtualServer의 Host가 *.devops.com으로 명시되어 있는 것을 확인할 수 있습니다.

kubectl get virtualserver -n nginx-ingress
NAME                 STATE   HOST               IP    PORTS   AGE
wildcard-host-path Valid *.devops.com 3m22s

wildcard-host-path VirtualServer 리소스의 Host는 Wildcard (*) 처리가 되어있기 때문에, foo.devops.com 및 abc.devops.com 호스트로 테스트를 진행합니다.
curl 명령어를 통해 배포된 VirtualServer의 라우팅을 확인할 수 있습니다.

curl foo.devops.com:31886/menu

Server address: 10.244.1.40:8080
Server name: menu-75448d8856-skcmz
Date: 08/Mar/2024:04:12:59 +0000
URI: /menu
Request ID: ac0fa87328fbca31c05805ba26faf13f

curl abc.devops.com:31886/menu

Server address: 10.244.3.35:8080
Server name: menu-75448d8856-ml2w2
Date: 08/Mar/2024:04:14:16 +0000
URI: /menu
Request ID: 5d82f47a7f540e53f184bc81e6317d9e

NGINX Ingress Controller 의 상업적 버전을 사용해 보시려면 NGINX STORENGINX Plus Ingress Controller를 참고하세요.

아래 폼으로 지금 바로 Trial License를 신청해보세요!

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required