Kubernetes와 Traefik 빠른 시작
출처: Kubernetes와 Traefik 빠른 시작 (Kubernetes and Traefik Quick Start)
본문
Kubernetes와 Traefik 시작하기
Kubernetes는 Traefik에서 일급 시민(first-class citizen)이라서 Kubernetes 리소스와 최신 Kubernetes 표준을 기본으로 지원해요. Traefik의 IngressRoute CRD를 쓰든, Ingress를 쓰든, Kubernetes Gateway API를 쓰든, Traefik은 Kubernetes 트래픽을 관리할 매끄러운 환경을 제공합니다.
이 가이드는 다음을 보여줘요:
-
k3d로 Kubernetes 클러스터 만들기
-
Helm으로 Traefik 설치하기
-
Traefik 대시보드 노출하기
-
샘플 애플리케이션 배포하기
-
IngressRoute와 Gateway API로 기본 라우팅 구성하기
사전 준비물
-
Kubernetes
-
Helm 3
-
kubectl
-
k3d (로컬 클러스터 생성용)
Kubernetes 클러스터 만들기
k3d 사용하기
다음 명령으로 클러스터를 만드세요. 이 명령은:
-
"traefik"이라는 이름의 k3d 클러스터를 만들어요
-
서비스 접근을 위해 포트 80, 443, 8000을 로드밸런서에 매핑해요
-
충돌을 피하려고 내장 Traefik 인그레스 컨트롤러를 비활성화해요
k3d cluster create traefik \
--port 80:80@loadbalancer \
--port 443:443@loadbalancer \
--port 8000:8000@loadbalancer \
--k3s-arg "--disable=traefik@server:0"
kubectl을 구성하세요:
kubectl cluster-info --context k3d-traefik
Traefik 설치하기
Helm Values 파일 사용하기
Traefik Helm 저장소를 추가하세요:
helm repo add traefik https://traefik.github.io/charts
helm repo update
values 파일을 만드세요. 이 구성은:
-
포트 80과 443을 web, websecure 엔트리포인트에 매핑해요
-
특정 호스트명 규칙으로 대시보드를 활성화해요
-
Kubernetes Gateway API 프로바이더를 활성화해요
-
Gateway가 모든 네임스페이스의 HTTPRoute를 노출하게 해요
# values.yaml
ingressRoute:
dashboard:
enabled: true
matchRule: Host(`dashboard.localhost`)
entryPoints:
- web
providers:
kubernetesGateway:
enabled: true
gateway:
listeners:
web:
namespacePolicy:
from: All
정보
Helm 차트를 쓸 때 KubernetesCRD 프로바이더는 기본으로 활성화되기 때문에 values 파일에 설정할 필요가 없어요.
Traefik을 설치하세요:
helm install traefik traefik/traefik -f values.yaml --wait
Helm CLI 인자 사용하기
대신 CLI 인자로 Traefik을 설치할 수도 있어요. 이 명령은:
-
포트 30000과 30001을 web, websecure 엔트리포인트에 매핑해요
-
특정 호스트명 규칙으로 대시보드를 활성화해요
-
Kubernetes Gateway API 프로바이더를 활성화해요
-
Gateway가 모든 네임스페이스의 HTTPRoute를 노출하게 해요
helm install traefik traefik/traefik --wait \
--set ingressRoute.dashboard.enabled=true \
--set ingressRoute.dashboard.matchRule='Host(`dashboard.localhost`)' \
--set ingressRoute.dashboard.entryPoints={web} \
--set providers.kubernetesGateway.enabled=true \
--set gateway.listeners.web.namespacePolicy.from=All
정보
Helm 차트를 쓸 때 KubernetesCRD 프로바이더는 기본으로 활성화되기 때문에 CLI 인자에 설정할 필요가 없어요.
Traefik이 Gateway API 프로바이더를 활성화한 채 설치되면, traefik이라는 이름의 기본 GatewayClass를 자동으로 만들어요:
kubectl describe GatewayClass traefik
대시보드 노출하기
설치 중 Helm values에서 정의한 것처럼, 대시보드는 차트가 제공하는 IngressRoute로 노출돼요.
다음에서 접근하세요:
http://dashboard.localhost/dashboard/
샘플 애플리케이션 배포하기
디플로이먼트를 만드세요:
# whoami.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: whoami
spec:
replicas: 2
selector:
matchLabels:
app: whoami
template:
metadata:
labels:
app: whoami
spec:
containers:
- name: whoami
image: traefik/whoami
ports:
- containerPort: 80
서비스를 만드세요:
# whoami-service.yaml
apiVersion: v1
kind: Service
metadata:
name: whoami
spec:
ports:
- port: 80
selector:
app: whoami
매니페스트를 적용하세요:
kubectl apply -f whoami.yaml
kubectl apply -f whoami-service.yaml
IngressRoute(CRD)로 애플리케이션 노출하기
IngressRoute를 만드세요:
# whoami-ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: whoami
spec:
entryPoints:
- web
routes:
- match: Host(`whoami.localhost`)
kind: Rule
services:
- name: whoami
port: 80
매니페스트를 적용하세요:
kubectl apply -f whoami-ingressroute.yaml
셋업 테스트하기
애플리케이션이 제대로 노출됐는지 확인하려면 다음 curl 명령을 쓸 수 있어요:
curl http://whoami.localhost
Hostname: whoami-76c9859cfc-6v8hh
IP: 127.0.0.1
IP: ::1
IP: 10.42.0.11
IP: fe80::20ad:eeff:fe44:a63
RemoteAddr: 10.42.0.9:38280
GET / HTTP/1.1
Host: whoami.localhost
User-Agent: curl/8.7.1
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 127.0.0.1
X-Forwarded-Host: whoami.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: traefik-598946cd7-zds59
X-Real-Ip: 127.0.0.1
브라우저에서 http://whoami.localhost 를 방문해 애플리케이션이 제대로 노출됐는지 확인할 수도 있어요:
Gateway API로 애플리케이션 노출하기
Traefik은 Kubernetes Gateway API 사양을 지원해요. 이는 Kubernetes에서 인그레스를 구성하는 더 표준화된 방법을 제공하죠. 앞서 Traefik을 설치할 때 Gateway API 프로바이더를 활성화했어요. Traefik 대시보드의 프로바이더 섹션에서 확인할 수 있습니다.
Gateway API를 쓰려면:
클러스터에 Gateway API CRD를 설치하세요:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.2/standard-install.yaml
HTTPRoute를 만드세요. 이 구성은:
-
"whoami"라는 이름의 HTTPRoute를 만들어요
-
설치 중 Traefik이 만든 기본 Gateway에 연결해요
-
"whoami-gatewayapi.localhost" 호스트명에 대한 라우팅을 구성해요
-
모든 트래픽을 포트 80의 whoami 서비스로 라우팅해요
# httproute.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: whoami
spec:
parentRefs:
- name: traefik-gateway
hostnames:
- "whoami-gatewayapi.localhost"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: whoami
port: 80
매니페스트를 적용하세요:
kubectl apply -f httproute.yaml
셋업 테스트하기
애플리케이션이 제대로 노출됐는지 확인하려면 다음 curl 명령을 쓸 수 있어요:
curl http://whoami-gatewayapi.localhost
Hostname: whoami-76c9859cfc-6v8hh
IP: 127.0.0.1
IP: ::1
IP: 10.42.0.11
IP: fe80::20ad:eeff:fe44:a63
RemoteAddr: 10.42.0.9:38280
GET / HTTP/1.1
Host: whoami.localhost
User-Agent: curl/8.7.1
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 127.0.0.1
X-Forwarded-Host: whoami.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: traefik-598946cd7-zds59
X-Real-Ip: 127.0.0.1
이제 브라우저에서 http://whoami.localhost 를 방문해 애플리케이션이 제대로 노출됐는지 확인할 수 있어요:
Traefik 대시보드의 HTTP Routes 섹션으로 가면, whoami.localhost 라우트가 Traefik Kubernetes Gateway API 프로바이더가 관리하고 있다는 걸 확인할 수 있어요:
이제 끝났어요! Kubernetes 클러스터에서 Traefik을 성공적으로 배포하고 라우팅을 구성한 거예요.
다음 단계
-
TLS 구성하기
-
미들웨어 세팅하기
-
메트릭 활성화하기
-
Kubernetes CRD 프로바이더에 대해 더 배우기
-
Kubernetes Gateway API 프로바이더에 대해 더 배우기
프로덕션에서 Traefik OSS를 쓰고 있나요?
직장에서 Traefik을 쓰고 있다면, 엔터프라이즈급 API 게이트웨이 기능이나 Traefik OSS용 상업 지원을 추가하는 걸 고려해 보세요.
-
API Gateway 데모 영상 보기
-
24/7/365 OSS 지원 요청하기
Traefik OSS에 API 게이트웨이 기능을 더하는 건 빠르고 매끄러워요. 갈아엎을 필요도 없고 모든 구성이 그대로 유지됩니다. 짧은 영상으로 직접 확인해 보세요.