Редиректы в Kubernetes + Traefik + Ingress

Пример конфига с настройкой редиректов www->без www и http->https в Kubernetes + Traefik. С помощью Ingress + Middleware.

Разбирался давеча как настроить редиректы в Traefik'е. Делал какими то устаревшими и/или нерабочими методами.

Нужно было реализовать 2 вида редиректов:

  • http -> https
  • www.rame0.ru -> rame0.ru

В итоге разобрался и пришел вот к конфигу Ingress + Middleware ниже.

Суть в следующем. Первый middleware (www-redirect) вешается на хост www.rame0.ru и перенаправляет весе запросы на хост rame0.ruhttp и https) с помощью регулярного выражения.

Второй middleware висит на хосте rame0.ru и перенаправляет запросы http на https.

# Redirect with domain replacement
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: www-redirect
spec:
  redirectRegex:
    regex: http[s]*://www\.rame0\.ru/(.*)
    replacement: https://rame0.ru/${1}
---
# Redirect to https
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: https-redirect
spec:
  redirectScheme:
    scheme: https
    permanent: true
    port: "443"
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ghost-ingres
  annotations:
    kubernetes.io/ingress.class: "traefik"
    acme.cert-manager.io/http01-edit-in-place: "true"
    cert-manager.io/cluster-issuer: letsencrypt-production
    traefik.ingress.kubernetes.io/frontend-entry-points: web, websecure
    traefik.ingress.kubernetes.io/redirect-entry-point: websecure
    traefik.ingress.kubernetes.io/router.middlewares: https-redirect@kubernetescrd
spec:
  rules:
  - host: rame0.ru
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: ghost-blog
            port:
              number: 80
  tls:
    - hosts:
      - "rame0.ru"
      secretName: <.....>-tls
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ghost-ingres-www
  annotations:
    kubernetes.io/ingress.class: "traefik"
    acme.cert-manager.io/http01-edit-in-place: "true"
    cert-manager.io/cluster-issuer: letsencrypt-production
    traefik.ingress.kubernetes.io/frontend-entry-points: web, websecure
    traefik.ingress.kubernetes.io/redirect-entry-point: websecure
    traefik.ingress.kubernetes.io/router.middlewares: www-redirect@kubernetescrd
spec:
  rules:
  - host: www.rame0.ru
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: ghost-blog
            port:
              number: 80
  tls:
    - hosts:
      - "www.rame0.ru"
      secretName: <.....>-tls

Теги: Kubernetes, Traefik, Ingress

Комментарии ()