Traefik 개요
Traefik은 현대적인 HTTP 반대리 및 부하 분산기로, 마이크로서비스 배포를 용이하게 합니다. 이 문서는 Traefik2의 기능적 장점을 다룹니다.
사전 준비
Helm V3 설치 확인
버전을 확인하는 명령어:
helm version
# 예시 출력: version.BuildInfo{Version:"v3.0.1", ...}
Traefik v2 Helm 차트 구성
GitHub 저장소: traefik-helm-chart
간단한 설정 파일 예시:
service:
type: ClusterIP
ingressRoute:
dashboard:
enabled: false
nodeSelector:
kubernetes.io/hostname: k8s-master-1
ports:
web:
hostPort: 80
websecure:
hostPort: 443
traefik:
port: 8080
hostPort: 8080
exposedPort: 8080
expose: true
additionalArguments:
- "--serversTransport.insecureSkipVerify=true"
- "--api.insecure=true"
- "--api.dashboard=true"
Traefik Helm 차트 등록
helm repo add traefik https://containous.github.io/traefik-helm-chart
helm repo update
Traefik v2 배포
helm install traefik traefik/traefik -f traefik-v2-values.yaml -n kube-system
# helm uninstall traefik -n kube-system
패널 배포
도메인 설정
traefik.example.com을 K8s 클러스터에 포워딩합니다.
서버 인증서 발급
kubectl apply -f certificate-deployment.yaml -n kube-system
인증서 확인
kubectl describe Certificate -n kube-system
인그레스 라우트 구성
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-dashboard-config
spec:
entryPoints:
- websecure
tls:
secretName: example-cert-tls
routes:
- match: Host(`traefik.example.com`)
kind: Rule
services:
- name: traefik
port: 8080
패널 접근
https://traefik.example.com
BasicAuth 설정
비밀번호 생성
htpasswd -nb user1 password1
# 예시 출력: user1:$apr1$...123456
세크릿 생성
apiVersion: v1
kind: Secret
metadata:
name: auth-secret
type: Opaque
stringData:
users: user1:$apr1$...123456
미들웨어 구성
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: auth-middleware
spec:
basicAuth:
secret: auth-secret
인그레스 라우트 업데이트
routes:
- match: Host(`traefik.example.com`)
kind: Rule
services:
- name: traefik
port: 8080
middlewares:
- name: auth-middleware
구성 적용
kubectl apply -f auth-secret.yaml -n kube-system
kubectl apply -f middleware.yaml -n kube-system
kubectl apply -f ingress-route.yaml -n kube-system