Насколько я понимаю, эта политика не разрешает входящий трафик c, не являющийся mtls.
Это правда, если вы устанавливаете режим tls в строгий, то клиентский сертификат должен быть представленным, соединение в TLS.
Меня больше беспокоит мой клиентский модуль здесь, так как я не уверен, как включить mtls на уровне модуля.
Есть хорошая статья о том, как заставить это работать, особенно часть
Настройка mTLS для одного соединения между двумя службами
Поскольку Bookinfo - это Hello World of Istio, я собираюсь использовать это для объяснения того, как настроить mTLS от страницы продукта до сервиса подробностей, как показано в приведенном выше фрагменте графика.
В этом есть две части :
Установите Политику, чтобы сообщить Подробности, что он хочет получить трафик TLS c (только):
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
name: details-receive-tls
spec:
targets:
- name: details
peers:
- mtls: {}
Установите DestinationRule, чтобы сообщить клиентам (на странице продукта), чтобы они говорили на TLS с деталями:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: details-istio-mtls
spec:
host: details.bookinfo.svc.cluster.local
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
Ниже приведено графическое представление задействованных служб и где предыдущий применяются два документа конфигурации.
Теперь, когда вы внимательно посмотрите на приведенную выше Политику, вы увидите и введите для аутентификации однорангового узла
peers:
- mtls: {}
Это означает, что проверка TLS является строгой, и Istio (или, скорее, прокси-серверу в модуле) требуется TLS traffi c и действительный сертификат. Мы можем передать флаг, чтобы получить разрешающий режим:
peers:
- mtls:
mode: PERMISSIVE
Правильно ли, что правило назначения, политики Authn и Authz должны быть на уровне поставщика услуг?
Насколько я знаю, да.
А клиент просто должен включить MTLS для успешной работы связи?
Я не уверен насчет этого, поскольку MTLS работает внутри меня sh, это зависит от требований вашего приложения.
Я хочу сделать это на уровне модуля с помощью файла yaml.
Имеется ссылка на документацию istio об аутентификации, которая включает
И еще один из github
Или вы можете расширить определение вашего шлюза для поддержки взаимного TLS. Измените учетные данные входного шлюза, удалив его секрет и создав новый. Сервер использует сертификат CA для проверки своих клиентов, и мы должны использовать имя cacert для хранения сертификата CA. Вы можете использовать cert-manager для генерации сертификата клиента.
Я нашел несколько учебных пособий, которые могут оказаться полезными, ознакомьтесь с ними.
Дайте мне знать, если у вас есть еще вопросы.