【发布时间】:2018-11-02 02:32:15
【问题描述】:
我追求一个非常简单的要求 - 但在外部负载均衡器后面时,似乎不可能让 Traefik 将流量从 HTTP 重定向到 HTTPS。
这是我的 GCE 入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: platform
name: public-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: "kubernetes-cluster-dev-ip"
kubernetes.io/ingress.class: "gce"
ingress.gcp.kubernetes.io/pre-shared-cert: "application-dev-ssl,application-dev-graphql-ssl"
spec:
backend:
serviceName: traefik-ingress-service
servicePort: 80
从 HTTP(S) 接收流量然后转发到 Traefik 到端口 80。
我最初尝试使用 Traefik 的重定向方式匹配架构与此配置:
[entryPoints]
[entryPoints.http]
address = ":80"
compress = true
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
compress = true
[entryPoints.https.tls]
但显然会进入无限重定向循环,因为负载均衡器总是将流量代理到 Traefik 端口 80。
完成这项工作的简单解决方案正是 GCE 所建议的 https://github.com/kubernetes/ingress-gce#ingress-cannot-redirect-http-to-https
能够检查http_x_forwarded_proto 标头并基于此进行重定向。
Nginx 等效
# Replace '_' with your hostname.
server_name _;
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
请有人建议使用 Traefik 处理此问题的最佳方法是什么!
【问题讨论】:
-
你最后是怎么解决这个问题的?
标签: https kubernetes google-kubernetes-engine traefik traefik-ingress