根据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;
}
这看起来有点矫枉过正。
答案 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