DevOps/K8S

[K8S] Traefik을 이용한 경로 기반 라우팅 (Path-Based Routing)

kyoulho 2025. 3. 6. 14:40
728x90

개요

Traefik은 Kubernetes에서 동적인 경로 기반 라우팅을 수행하는 경량의 Ingress Controller 및 Reverse Proxy입니다.

Ingress Controller 없이도 IngressRoute와 Middleware를 조합하여 강력한 트래픽 관리가 가능합니다.

Kubernetes에서 API Gateway 없이도 서비스별 라우팅을 간단하게 설정할 수 있는 점이 큰 장점입니다.

1. Traefik 설치

Traefik을 Kubernetes 클러스터에 설치하려면 Helm을 사용하는 것이 가장 간편합니다.

Helm을 이용한 Traefik 설치

helm repo add traefik https://traefik.github.io/charts
helm repo update

helm install traefik traefik/traefik \
  --namespace kube-system \
  --set ingressClass.enabled=true \
  --set service.type=LoadBalancer

이제 Traefik이 Ingress Controller로 동작할 준비가 되었습니다.

 

2. Traefik Middleware 설정

Traefik을 이용하여 /keycloak 을 특정 서비스(keycloak-svc)로 연결하되, /keycloak 프리픽스를 제거해야 합니다.

Middleware 설정 (strip-keycloak-prefix.yaml)

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: strip-keycloak-prefix
  namespace: default
spec:
  stripPrefix:
    prefixes:
      - "/keycloak"

 

3. Traefik IngressRoute 설정

Traefik을 사용하여 특정 경로로 요청을 라우팅하는 설정을 추가해야 합니다.

IngressRoute 설정 (keycloak-route.yaml)

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: keycloak-route
  namespace: default
spec:
  entryPoints:
    - web
  routes:
    - match: PathPrefix(`/keycloak`)
      kind: Rule
      services:
        - name: keycloak-svc
          port: 8080
      middlewares:
        - name: strip-keycloak-prefix

위 설정은 Traefik이 /keycloak/*로 들어오는 모든 요청을 keycloak-svc:8080/* 으로 전달하도록 구성합니다.

4. Kubernetes에 적용

이제 위에서 작성한 설정을 Kubernetes 클러스터에 배포합니다.

kubectl apply -f strip-keycloak-prefix.yaml
kubectl apply -f keycloak-route.yaml

배포 후 다음 명령어로 설정이 적용되었는지 확인합니다.

kubectl get ingressroute -n default
kubectl get middleware -n default

5. 테스트

Traefik을 통해 경로 기반 라우팅이 정상적으로 동작하는지 확인합니다.

curl -H "Host: example.com" http://<TRAFFIK_IP>/keycloak/auth

위 요청이 정상적으로 keycloak-svc:8080/auth로 전달되면 성공입니다.

 

728x90

'DevOps > K8S' 카테고리의 다른 글

[K8S] 클러스터 버전 업그레이드  (0) 2024.10.16
[K8S] 테인트와 톨러레이션  (0) 2024.10.14
[K8S] StatefulSet  (1) 2024.10.10
[K8S] Metric Server  (0) 2024.10.10
[K8S] MetalLB  (1) 2024.10.10