Ingress отдаёт «Kubernetes Ingress Controller Fake Certificate»

Viewed 76

В Ingress указан секрет с моим сертификатом, но браузер показывает Kubernetes Ingress Controller Fake Certificate. Иногда на всех доменах, иногда только на поддоменах.

1 Answers

Это самоподписанный сертификат ingress-nginx по умолчанию. Контроллер отдаёт его, если не нашёл подходящий сертификат для запрошенного имени. Проверьте по порядку:

  • Ingress ссылается на секрет. Хост указан в spec.tls[].hosts, в secretName указан ваш секрет. Секрет лежит в том же пространстве имён, имеет тип kubernetes.io/tls, а ключ соответствует сертификату.

  • Сертификат покрывает имя. *.example.com покрывает a.example.com, но не a.b.example.com и не сам example.com:

    d8 k -n <ns> get secret <tls-secret> -o jsonpath='{.data.tls\.crt}' | base64 -d \
      | openssl x509 -noout -ext subjectAltName
    
  • Ingress обслуживает нужный контроллер. spec.ingressClassName у Ingress совпадает с spec.ingressClass у IngressNginxController, и под этого контроллера запущен. Если два контроллера с inlet HostPort используют одни и те же hostPort.httpPort и httpsPort, под второго не запустится на узле, и отвечать будет первый со своим сертификатом по умолчанию. Разнесите порты или узлы.

  • TLS терминируется на внешнем балансировщике. Тогда сертификат меняют на нём, а не в кластере.

Неполная цепочка fake-сертификат не вызывает: браузер покажет ваш сертификат с ошибкой доверия. Цепочка в tls.crt идёт в порядке leaf → intermediate.

Сертификат по умолчанию можно заменить своим: spec.defaultSSLCertificate.secretRef в IngressNginxController.