Ingress Controller 를 통한 Host 및 Path 기반 라우팅 구현하기
NGINX Ingress Controller 는 kubernetes.io 에서 관리하는 ingress-nginx Controller와 nginx.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는 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 STORE의 NGINX Plus Ingress Controller를 참고하세요.
아래 폼으로 지금 바로 Trial License를 신청해보세요!
댓글을 달려면 로그인해야 합니다.