【问题标题】:Traefik & Keycloak: error SSL_ERROR_RX_RECORD_TOO_LONGTraefik 和 Keycloak:错误 SSL_ERROR_RX_RECORD_TOO_LONG
【发布时间】:2018-09-19 15:53:33
【问题描述】:

我使用 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 重定向问题有一些提示吗?

提前谢谢你。

【问题讨论】:

    标签: kubernetes haproxy keycloak traefik


    【解决方案1】:

    听起来您在入口处丢失了 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
    

    希望对你有帮助!

    【讨论】:

    • 我的cert.pem 是haproxy 方面的。无论如何我都会尝试你的建议,但我认为问题与 keycloak 重定向更相关。
    • 是的。 keycloak 也支持 TLS 吗?你有证书吗?
    【解决方案2】:

    我使用以下 traefik 注释解决了我的问题:

    traefik.frontend.passHostHeader: "true"

    将客户端 Host 标头转发到后端。

    这里有一个完整的入口示例:

    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

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2014-09-24
      • 1970-01-01
      • 2021-02-08
      • 2022-11-12
      • 2019-11-20
      • 2010-11-29
      • 1970-01-01
      • 2019-05-28
      相关资源
      最近更新 更多