将Traefik中的一个域重定向到另一个域

时间:2018-02-05 17:04:56

标签: kubernetes traefik kubernetes-ingress

根据documentation你应该可以让Traefik使用以下方式执行302重定向:

  • traefik.ingress.kubernetes.io/redirect-regex
  • traefik.ingress.kubernetes.io/redirect-replacement

我的目标是从地址中删除www.

这是我尝试过的,但我找不到404服务。

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: www-redirect
  namespace: public
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/redirect-regex: ^https?://www.example.com/(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://example.com/$1
spec:
  rules:
  - host: www.example.com

不幸的是,如何使用它们的文档并不明确。在撰写本文时,唯一的谷歌就是文档(上图)。

我目前的工作(假设它有助于解释问题)是将www.流量路由到返回302的nginx。

server {
    listen       80;
    server_name  www.example.com;
    return 302 https://example.com$request_uri;
}

这看起来有点矫枉过正。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,最终使其适用于:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: www-redirect
  namespace: public
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/preserve-host: "true"
    traefik.ingress.kubernetes.io/redirect-permanent: "true"
    traefik.ingress.kubernetes.io/redirect-regex: "^https://www.(.*)"
    traefik.ingress.kubernetes.io/redirect-replacement: "https://$1"
spec:
  tls:
    - hosts:
        - "example.com"
        - "www.example.com"
      secretName: example-tls
  rules:
  - host: example.com
  - host: www.example.com

基本上我需要两个规则。

作为旁注,我还使用以下标志启动trafik吊舱:

args:
   - --api
   - --kubernetes
   - --logLevel=INFO
   - --entryPoints=Name:https Address::443 TLS
   - --entrypoints=Name:http Address::80 Redirect.EntryPoint:https
   - --defaultentrypoints=https,http