kubernetes Traefik -中间件重定向Regex不工作

kqlmhetl  于 2023-01-20  发布在  Kubernetes
关注(0)|答案(1)|浏览(195)

我有一个简单的网站运行在我的Kubernetes集群中,并通过Traefik向Internet公开。我的Ingress对象如下所示(我在这里只更改了名称和域名):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-staging
    kubernetes.io/ingress.class: traefik
  name: my-cool-website
  namespace: default
spec:
  rules:
  - host: my-cool-website.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-cool-website
            port:
              number: 80
  - host: www.my-cool-website.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-cool-website
            port:
              number: 80
  tls:
  - hosts:
    - my-cool-website.com
    - www.my-cool-website.com
    secretName: my-cool-website-tls

这个工作。它允许我从my-cool-website.comwww.my-cool-website.com访问网站。但我希望发生的是,如果有人访问前者,Traefik会自动将他们重定向到后者。我在网上找到了一些推荐创建Traefik中间件的指南,所以我就这样做了。但不幸的是,它并没有像预期的那样工作。下面是我的中间件定义:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: my-cool-website-force-www
spec:
  redirectRegex:
    regex: ^https?://my-cool-website.com/(.*)
    replacement: https://www.my-cool-website.com/${1}

然后,我将以下注解添加回ingress对象:

traefik.ingress.kubernetes.io/router.middlewares: my-cool-website-force-www

但一旦我这样做,它就会破坏我的Web应用程序。我的意思是,当应用注解时,而不是服务于我的网站,当我试图访问域时,我开始看到一个通用的nginx页面,看起来像这样(而且它也不执行重定向):

我不得不假设这个Hello World页面是由Traefik作为某种通用默认页面提供的,因为它肯定不是来自我的pod。所以这告诉我这个中间件(或者我是如何用注解调用它的)不起作用。我错过了什么?

deyfvvtc

deyfvvtc1#

通过端口转发到Traefik Dashboard并查看那里的服务,我发现了这个问题。它显示了一个中间件未找到的错误。然后我点击了中间件,意识到它们最终使用了一个更长的规范名称。所以在我的注解中,我不得不将引用从my-cool-website-force-www更改为default-my-cool-website-force-www@kubernetescrd,然后一切都正常了。

相关问题