Traefik 和 Keycloak:错误 SSL_ERROR_RX_RECORD_TOO_LONG
Traefik & Keycloak: error SSL_ERROR_RX_RECORD_TOO_LONG
我使用 HAProxy
将所有请求从 80 端口重定向到 443,并使用 NodePort 进入 traefik-ingress-controller
(v1.6.6,在 Kubernetes 集群内)。
这里是HAProxy.conf
:
frontend http-frontend
bind *:80
reqadd X-Forwarded-Proto:\ http
default_backend http_app
frontend https-frontend
bind *:443 ssl crt /etc/ssl/certs/my-cert.pem
reqadd X-Forwarded-Proto:\ https
default_backend traefik_app
backend http_app
redirect scheme https if !{ ssl_fc }
backend traefik_app
server traefik localhost:30010 check
我的 Kubernetes 集群上的每个应用程序 运行 都有一个 Ingress。
其中我有一个带有此入口的 Keycloak pod(v4.1.0,用于身份验证):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: keycloak
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: login.myapp.it
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
这里是图片:
当我连接到 https://login.myapp.it/auth/admin/ 时,我被重定向到
https://login.myapp.it:80/auth/admin/master/console/(注意端口 80),我收到 SSL_ERROR_RX_RECORD_TOO_LONG
错误。
有人对代理后面的 keycloak 的重定向问题有一些提示吗?
提前谢谢你。
听起来您的入口缺少 TLS 证书:
$ kubectl -n kube-system create secret tls your-k8s-tls-secret --key=tls.key --cert=tls.crt
然后:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: keycloak
annotations:
kubernetes.io/ingress.class: traefik
spec:
tls:
- secretName: your-k8s-tls-secret
rules:
- host: login.myapp.it
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
希望对您有所帮助!
我使用以下 traefik 注释解决了我的问题:
traefik.frontend.passHostHeader: "true"
将客户端 Host header 转发到后端。
这是一个完整的入口示例:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: keycloak
annotations:
kubernetes.io/ingress.class: traefik
traefik.frontend.passHostHeader: "true"
spec:
rules:
- host: login.myapp.it
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
另外,我可能已将以下内容添加到 haproxy.cfg:
reqadd X-Forwarded-Port:\443
我使用 HAProxy
将所有请求从 80 端口重定向到 443,并使用 NodePort 进入 traefik-ingress-controller
(v1.6.6,在 Kubernetes 集群内)。
这里是HAProxy.conf
:
frontend http-frontend
bind *:80
reqadd X-Forwarded-Proto:\ http
default_backend http_app
frontend https-frontend
bind *:443 ssl crt /etc/ssl/certs/my-cert.pem
reqadd X-Forwarded-Proto:\ https
default_backend traefik_app
backend http_app
redirect scheme https if !{ ssl_fc }
backend traefik_app
server traefik localhost:30010 check
我的 Kubernetes 集群上的每个应用程序 运行 都有一个 Ingress。
其中我有一个带有此入口的 Keycloak pod(v4.1.0,用于身份验证):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: keycloak
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: login.myapp.it
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
这里是图片:
当我连接到 https://login.myapp.it/auth/admin/ 时,我被重定向到
https://login.myapp.it:80/auth/admin/master/console/(注意端口 80),我收到 SSL_ERROR_RX_RECORD_TOO_LONG
错误。
有人对代理后面的 keycloak 的重定向问题有一些提示吗?
提前谢谢你。
听起来您的入口缺少 TLS 证书:
$ kubectl -n kube-system create secret tls your-k8s-tls-secret --key=tls.key --cert=tls.crt
然后:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: keycloak
annotations:
kubernetes.io/ingress.class: traefik
spec:
tls:
- secretName: your-k8s-tls-secret
rules:
- host: login.myapp.it
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
希望对您有所帮助!
我使用以下 traefik 注释解决了我的问题:
traefik.frontend.passHostHeader: "true"
将客户端 Host header 转发到后端。
这是一个完整的入口示例:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: keycloak
annotations:
kubernetes.io/ingress.class: traefik
traefik.frontend.passHostHeader: "true"
spec:
rules:
- host: login.myapp.it
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
另外,我可能已将以下内容添加到 haproxy.cfg:
reqadd X-Forwarded-Port:\443