Настройка входного контроллера HAPROXY с использованием mTLS с configmap только с балансировщиком входной нагрузки, поскольку он разгружен по SSL. Нет необходимости в внутренней проверке
Мне удалось добиться разгрузки SSL с помощью Haproxy. Отличный продукт, и я ценю эту возможность!
С учетом вышесказанного мне нужно выполнить взаимный TLS, но я немного не понимаю, как это будет работать с конфигурационной картой входного контроллера.
Просматривая эту ссылку, я создал сертификат клиента, промежуточный сертификат и корневой сертификат.
Следует отметить, что в настоящее время я прекращаю действие сертификата SSL (который получен от letsencrpt) на балансировщике нагрузки.
Однако сертификат клиента и центр сертификации организации отличаются от сертификата lesencrypt tls/ssl, который я сейчас назначил в качестве SSL; это имеет значение?
Итак, первый вопрос, который у меня возникнет, заключается в том, должен ли SSL-сертификат быть установлен для центра сертификации, который будет подписывать сертификаты клиента и сервера, или я могу просто использовать новые, которые я создал в инструкции.
Настройка карты конфигурации.
Это та часть, в которой я запутался.
Вы можете настроитьserver-ca
иserver-crt
но я не думаю, что это применимо здесь, потому что после разгрузки SSL нет ничего, что нужно было бы проверять. Однако мне нужен mTLS через завершение SSL.
Итак, есть конфигурацияclient-ca
Устанавливает центр сертификации клиента, позволяющий HAProxy проверять сертификат клиента (аутентификация TLS), тем самым включая mTLS клиента. Обратите внимание: для работы аутентификации TLS должна быть включена разгрузка SSL.
В данном случае клиентом является тот клиент, который мне нужен, то есть устройство/интерфейс. Не балансировщик нагрузки, действующий как клиент внутреннего сервера.
Когда я смотрю на то, как это настроено:
frontend mysite
bind 192.168.56.20:80
bind 192.168.56.20:443 ssl crt /etc/haproxy/certs/ssl.crt verify required ca-file /etc/haproxy/certs/intermediate-ca.crt ca-verify-file /etc/haproxy/certs/root-ca.crt
http-request redirect scheme https unless { ssl_fc }
default_backend apiservers
Можно ли сделать то же самое с картой конфигурации контроллера, как указано ниже? В этой методологии применения клиентского mTLS происходит гораздо больше, чем то, что я рассматриваю как флаги/конфигурации. Есть ли способ добиться этого в Kubernetes без configmap?
Параметр ssl включает завершение SSL для этого прослушивателя. Параметр crt определяет расположение SSL-сертификата в формате PEM. Этот сертификат должен содержать как открытый сертификат, так и закрытый ключ.
Вы можете ограничить доступ к вашему приложению, предоставив доверенным клиентам сертификат, который они должны предъявить при подключении. HAProxy проверит это, если вы добавите обязательный параметр проверки в строку привязки, как показано:
- аргумент SSL включает HTTPS
- аргумент crt указывает SSL-сертификат сервера, который вы обычно получаете от поставщика сертификатов, такого как Let's Encrypt.
- аргумент «проверить требуемый» требует, чтобы клиенты отправили сертификат клиента
- аргумент ca-file указывает промежуточный сертификат, с помощью которого мы проверим, что сертификат клиента был подписан центром сертификации нашей организации.
- Аргумент ca-verify-file (введенный в HAProxy 2.2) включает сертификат корневого центра сертификации, что позволяет HAProxy отправлять более короткий список центров сертификации клиенту в сообщении SERVER HELLO, которое будет использоваться для проверки, но сохраняя при этом центры сертификации верхнего уровня, например как корень, вне этого списка. HAProxy требует, чтобы корневой центр сертификации был установлен с помощью этого аргумента или включен в файл промежуточного CA.crt (совместимость со старыми версиями HAProxy).
Кроме того, моя причина, по которой я сейчас хочу использовать letsencrypt, а не частный центр сертификации, заключается в том, что я не могу обновлять сертификаты устройств каждые 60–90 дней. Это было бы неэффективно. В этом случае, и, пожалуйста, дайте мне знать в противном случае, я думаю, что лучше использовать либо реального поставщика ключей/сертификатов, либо при тестировании разработки использовать сертификаты openssl, как в инструкции HAProxy.
Это странно, но вам действительно нужно подумать о том, что такое «клиент» с этими абстракциями, потому что я бы никогда не использовал это для обычного входа в систему на веб-странице, а скорее для связи между серверами, и в этом смысле этот сервер является клиентом для этого сервера. Или, в моем случае, это устройство является клиентом этого балансировщика нагрузки.