Почему Traefik 2.2 & Let's Encrypt не поддерживает новые аннотации? - PullRequest
1 голос
/ 04 апреля 2020

У меня есть настроенный 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.

1 Ответ

1 голос
/ 06 апреля 2020

С помощью команды Traefik.io в этой дискуссии я решил проблему:

Чтобы использовать аннотации traefik в Ingress, убедитесь, что в к вашему объекту развертывания вы добавили поставщика 'kubernetesingress':

...
spec:
  containers:
  - args:
    - --api
    ....
    - --providers.kubernetescrd=true
    - --providers.kubernetesingress=true
....

Для формы глобального перенаправления HTTP на HTTPS вы также можете настроить это в своем объекте traefik deplyoment:

# permanent redirecting of all requests on http (80) to https (443)
- --entrypoints.web.http.redirections.entryPoint.to=websecure
- --entrypoints.websecure.http.tls.certResolver=default

Сейчас Вы можете легко настроить свой вход:

kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
  name: myingress
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web, websecure
spec:
  rules:
  - host: example.foo.com
    http:
      paths:
      - path: /
        backend:
          serviceName: whoami
          servicePort: 80

См. также мой последний пост в блоге .

...