У меня есть настроенный traefik 2.2 в моем самоуправляемом кластере kubernetes с поддержкой Let's Encrypt.
Пока все работает. Но конфигурация входного маршрута в моих глазах все еще неуклюжа. Это работает, только если я определю два IntgresRoutes - один для HTTP с промежуточным программным обеспечением перенаправления на https и один для https. Поэтому мои объекты выглядят так:
# Middleware for Redirect http -> https
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: https-redirect
spec:
redirectScheme:
scheme: https
# IngressRoute http for a simple whoami service
---
kind: IngressRoute
apiVersion: traefik.containo.us/v1alpha1
metadata:
name: whoami-notls
namespace: default
spec:
entryPoints:
- web
routes:
- match: Host(`mydomain.foo.com`)
kind: Rule
services:
- name: whoami
port: 8080
# redirect http to https
middlewares:
- name: https-redirect
# IngresRoute https
---
kind: IngressRoute
apiVersion: traefik.containo.us/v1alpha1
metadata:
name: whoami-tls
namespace: default
spec:
entryPoints:
- websecure
routes:
- match: Host(`mydomain.foo.com`)
kind: Rule
services:
- name: whoami
port: 8080
tls:
certResolver: default
Нет ли более простого способа просто сказать traefik, что мой сервис - который прослушивает порт 8080 - в любом случае должен быть перенаправлен на HTTPS. Зачем мне нужно два отдельных ingresRoutes в моей настройке?
В объявлениях для traefik 2.2. было что-то вроде этого:
kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
name: foo
namespace: bar
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web, websecure
traefik.ingress.kubernetes.io/router.middlewares: redirect-http@kuberntes-crd
spec:
rules:
- host: foo.com
http:
paths:
- path: ""
backend:
serviceName: service1
servicePort: 80
Это выглядит очень просто. Но это не сработало для меня - traefik не распознает эту конфигурацию Ingress.