Пустой файл "ca.crt" из cert-manager

Я использую cert-manager для создания сертификатов TLS для своего приложения в Kubernetes с помощью Let’s Encrypt.

Он запущен, и я вижу «ca.crt», «tls.crt» и «tsl.key» внутри контейнера моего приложения (в /etc/letsencrypt/).

Но "ca.crt" пуст, и приложение на это жалуется (Error: Unable to load CA certificates. Check cafile "/etc/letsencrypt/ca.crt"). Два других файла выглядят как обычные сертификаты.

Что это значит?

Какому документу вы следуете?

yasin lachini 04.07.2019 22:22

@yasinlachini это: docs.cert-manager.io/en/latest/index.html

JulienD 04.07.2019 23:36
Как включить TLS в gRPC-клиенте и сервере : 2
Как включить TLS в gRPC-клиенте и сервере : 2
Здравствуйте! 🙏🏻 Надеюсь, у вас все хорошо и добро пожаловать в мой блог.
Обновление драйверов Microsoft ODBC (с 17 до 18) для PHP
Обновление драйверов Microsoft ODBC (с 17 до 18) для PHP
Все знают, что PHP v7.4 потерял поддержку, и наши недавние старые приложения должны обновиться до PHP v8.x. ...
1
2
1 752
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

С cert-manager вы должны использовать контроллер nginx-ingress, который будет работать как точка доступа.

Контроллер ingress nginx создаст один балансировщик нагрузки, и вы сможете настроить там сертификат tls вашего приложения.

В модуле cert-manager нет ничего о сертификате.

поэтому настройте nginx ingress с помощью cert-manager, который поможет управлять сертификатом tls. этот сертификат будет храниться в секрете kubernetes.

Пожалуйста, следуйте этому руководству для более подробной информации:

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes

Ингрессы работают только для HTTP-трафика, если я правильно понял. Поскольку у меня есть что-то другое (MQTT), значит ли это, что я не могу использовать для него cert-manager?

JulienD 04.07.2019 23:47

вы также можете следовать этому руководству https://dzone.com/articles/secure-communication-with-tls-and‌​-the-mosquitto-broke‌​r

Harsh Manvar 05.07.2019 06:15

или вы можете создать сертификат, локально загрузить его в секрет kubernetes и использовать секрет при входе.

Harsh Manvar 05.07.2019 06:16

То есть вы имеете в виду, что нет другого способа, кроме как сгенерировать мой собственный сертификат CA? Хотя я мог бы повторно использовать некоторые внешние полномочия, такие как letsencrypt.

JulienD 05.07.2019 12:03

@JulienD Я не делал этого раньше для mqtt с https, только я так работал.

Harsh Manvar 05.07.2019 12:25

но если что-то вроде ssl для mqtt то лучше попробовать как сгенерировать сертификат вручную и добавить в секретку kubernetes.

Harsh Manvar 05.07.2019 12:26

Согласно документации, cafile предназначен для чего-то другого (доверенные корневые сертификаты), и, вероятно, на большинстве систем было бы правильнее использовать capath /etc/ssl/certs.

Вы можете следовать этому руководству, если у вас есть операционная система Windows: TLS. Статья о том, как разрешить Mosquitto и клиентам использовать протокол TLS.

Для установки безопасного TLS-соединения с брокером Mosquitto требуются файлы ключей и сертификатов. Создание всех этих файлов с правильными настройками — не самая простая задача, но наградой за это является безопасный способ связи с брокером MQTT.

Если вы хотите использовать сертификаты TLS, созданные с помощью службы Let's Encrypt. Вы должны знать, что текущие версии mosquitto никогда не обновляют настройки прослушивателя во время работы, поэтому при повторной генерации сертификатов сервера вам потребуется полностью перезапустить брокер.

Если вы используете DigitalOcean Kubernetes, попробуйте следовать этой инструкции: ка-нинкс, вы можете использовать Cert-Manager и входной контроллер nginx, они будут работать как certbot.

Другое решение — создать сертификат локально на вашем компьютере, а затем загрузить его в секрет kubernetes и использовать секрет при входе.

Речь идет о создании собственного ЦС («1. Создать пару ключей ЦС»). То, что я хочу, это эквивалент certbot, который работал нормально без моего беспокойства, но на Kubernetes.

JulienD 05.07.2019 12:01

@JulienD, вы можете использовать certmanager и входной контроллер nginx, чтобы он работал как certbot.

Harsh Manvar 06.07.2019 17:39
Ответ принят как подходящий

Я заметил это:

$ kubectl describe certificate iot-mysmartliving -n mqtt
...
Status:
  Conditions:
    ...
    Message:  Certificate issuance in progress. Temporary certificate issued.

и связанная строка в документах:

https://docs.cert-manager.io/en/latest/tasks/issuing-certificates/index.html?highlight=gce#temporary-certificates-whilst-issuing

Они объясняют, что два существующих сертификата созданы для некоторой совместимости, но они недействительны до тех пор, пока эмитент не выполнит свою работу.

Это говорит о том, что эмитент настроен неправильно.


Редактировать: да, было. Вызов DNS не удался, отладочная строка, которая помогла, была

kubectl describe challenge --all-namespaces=true

В более общем смысле,

kubectl describe clusterissuer,certificate,order,challenge --all-namespaces=true

да, можно войти внутрь кластера-эмитента или эмитента, однако вы настроили и проверили события эмитента.

Harsh Manvar 05.07.2019 12:27

Другие вопросы по теме