【问题标题】:Why Traefik 2.2 & Let's Encrypt does not support new annotations?为什么 Traefik 2.2 & Let's Encrypt 不支持新的注解?
【发布时间】: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 配置。

【问题讨论】:

    标签: traefik traefik-ingress


    【解决方案1】:

    this discussion 的 Traefik.io 团队的帮助下,我现在解决了这个问题:

    要在 Ingress 中使用 traefik 注释,请确保在您的部署对象中添加了“kubernetesingress”提供程序:

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

    对于从 HTTP 到 HTTPS 的全局重定向,您还可以在 traefik 部署对象中进行配置:

    # 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
    

    另请参阅我最新的Blog post

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 2016-03-10
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      相关资源
      最近更新 更多