Traefik & Keycloak: ошибка SSL_ERROR_RX_RECORD_TOO_LONG - PullRequest
0 голосов
/ 19 сентября 2018

Я использую 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 (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.

У кого-то есть какие-то подсказки для этой проблемы перенаправления с клавиатурой через прокси?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Я решил свою проблему, используя следующую аннотацию 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

0 голосов
/ 19 сентября 2018

Похоже, вы пропустили свои сертификаты 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

Надеюсь, это поможет!

...