본문 바로가기
WIKI 기술 지식 베이스

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 게이트웨이 기능을 더하는 건 빠르고 매끄러워요. 갈아엎을 필요도 없고 모든 구성이 그대로 유지됩니다. 짧은 영상으로 직접 확인해 보세요.

더 알아보기 (Learn more)