首页 文章

Traefik&Keycloak:错误SSL_ERROR_RX_RECORD_TOO_LONG

提问于
浏览
0

我使用 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

这是一张图片:

enter image description here

当我连接到https://login.myapp.it/auth/admin/时,我被重定向到https://login.myapp.it:80/auth/admin/master/console/(注意端口80),我收到 SSL_ERROR_RX_RECORD_TOO_LONG 错误 .

有人对代理后面的keycloak的重定向问题有一些提示吗?

先感谢您 .

2 回答

  • 0

    听起来你错过了入口上的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
    

    希望能帮助到你!

  • 1

    我使用以下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

相关问题