Назад | Перейти на главную страницу

ERR_SSL_PROTOCOL_ERROR для других рабочих входов / сервисов кубернетов

У меня есть базовое развертывание nginx и существующий сертификат, выданный Let's encrypt через cert-manager. Я думал, что все готово, чтобы начать использовать сертификат, но я не могу подключиться по https.

Подключение к IP LoadBalancer и домену работает. При подключении к домену с https не удается подключиться. Chrome говорит ERR_SSL_PROTOCOL_ERROR, Firefox говорит SSL_ERROR_RX_RECORD_TOO_LONG и SSL Labs говорит Assessment failed: No secure protocols supported. Это все та же проблема.

Вот услуга:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: example
  labels:
    app: example
spec:
  type: LoadBalancer
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
  - name: https
    protocol: TCP
    port: 443
    targetPort: 80
  selector:
    app: example

Вот вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
  namespace: example
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-production
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
  tls:
    - hosts:
      - 'example.com'
      secretName: example-production-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 443

Сертификат заполняется:

kubectl describe secret
...
Data
====
tls.crt:  3574 bytes
tls.key:  1675 bytes
ca.crt:   0 bytes

И ресурс сертификата принадлежит правильному входу. Я заменил свой домен на "пример" выше.

Кажется, все на месте, но я не уверен, почему не могу подключиться через https. Что я могу запустить для устранения этой проблемы?

ОБНОВЛЕНИЕ: я обнаружил, что у меня отсутствуют некоторые конфигурации для развертывания и образа nginx. Я выполнил все шаги здесь: https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/#securing-the-service

Как и раньше, я могу подключиться к IP-адресу LoadBalancer на 443 и 80, но соединение https не работает. Работа с http:

curl http://<EXTERNAL-IP> -k
<html>
<h1>Hello!</h1>
  <p>Stay tuned for launch!</p>
</html>

Ошибка https:

curl https://<EXTERNAL-IP> -k
curl: (35) error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number

В данном случае проблема заключалась в сочетании развертывания и обслуживания. Я перенаправлял трафик https на порт 80 с помощью этой строки в служебном yaml:

- name: https
  protocol: TCP
  port: 443
  targetPort: 80

Это не удалось завершить рукопожатие SSL, что является причиной curl: (35) error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number было около.

Я думал, что это будет нормально, потому что в предыдущей службе с работающим SSL я маршрутизировал порт 80 и 443 на 3000 на puma. Я не уверен, что произойдет, если маршрутизировать с 443 на 80 на puma, но это определенно сломалось с nginx. Изменение вышеуказанного сервисного yaml это решило (после того, как nginx прослушивал 443 и включил SSL с listen 443 ssl; в default.conf):

- name: https
  protocol: TCP
  port: 443
  targetPort: 443