【发布时间】:2020-07-16 11:12:52
【问题描述】:
我在我的自我管理的 kubernetes 集群中设置了 traefik 2.2,并支持 Let's Encrypt。
到目前为止一切正常。但是我眼中的ingress Route 配置还是比较笨拙的。它仅在我定义两个 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 的 announcements 中。有这样的事情:
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 配置。
【问题讨论】: