Сценарий описывает интеграцию сторонних компонентов и не проверялся в составе Deckhouse Platform.

По умолчанию Istio выпускает сертификаты рабочих нагрузок для mTLS собственным центром сертификации в istiod. Чтобы сертификаты выпускались от промежуточного CA из Stronghold, используйте цепочку:

  1. Механизм секретов PKI Stronghold хранит промежуточный CA для mesh и роль для выпуска сертификатов SPIFFE.
  2. cert-manager обращается к Stronghold через Issuer типа vault, как описано в разделе «cert-manager».
  3. Компонент istio-csr проекта cert-manager принимает запросы на сертификаты от прокси Istio и выпускает их через cert-manager.

Цель

После настройки сертификаты рабочих нагрузок Istio для mTLS выпускает промежуточный CA в Stronghold вместо встроенного CA istiod.

Предварительные требования

Перед началом подготовьте:

  • Механизм секретов PKI по пути pki_int с промежуточным CA, как в разделе «Внутренний PKI на Stronghold».
  • cert-manager в кластере и метод аутентификации Kubernetes в Stronghold, настроенные как в разделе «cert-manager».
  • Istio, установленный в кластере, и права на изменение параметров его установки.
  • Токен Stronghold с правами на запись ролей PKI и политик.

Шаг 1. Настройте Stronghold

Создайте роль PKI для сертификатов рабочих нагрузок и разрешите cert-manager подписывать запросы по ней.

  1. Создайте роль PKI, разрешающую URI SAN в формате SPIFFE, которые использует Istio:

    d8 stronghold write pki_int/roles/istio-mesh allowed_uri_sans="spiffe://cluster.local/*" allow_any_name=true require_cn=false max_ttl=24h

    Роль задаёт короткий max_ttl: сертификаты рабочих нагрузок перевыпускаются автоматически.

  2. Создайте политику, разрешающую подписывать запросы по этой роли:

    d8 stronghold policy write cert-manager-mesh - <<'POLICY'
    path "pki_int/sign/istio-mesh" {
      capabilities = ["create", "update"]
    }
    POLICY
  3. Создайте роль метода Kubernetes с политикой cert-manager-mesh, как описано в разделе «cert-manager». Для ClusterIssuer аудитория токена в роли — vault://<CLUSTER_ISSUER_NAME>, в этом примере vault://stronghold-mesh.

Шаг 2. Настройте cert-manager и Istio

Подключите istio-csr к Stronghold через ClusterIssuer и переключите Istio на istio-csr.

  1. Создайте ClusterIssuer stronghold-mesh типа vault с path: pki_int/sign/istio-mesh.

  2. Установите istio-csr и укажите в его параметрах ClusterIssuer stronghold-mesh. Пример параметров Helm-чарта istio-csr:

    app:
      certmanager:
        issuer:
          name: stronghold-mesh
          kind: ClusterIssuer
          group: cert-manager.io
  3. Настройте Istio на использование istio-csr как CA: укажите адрес сервиса istio-csr в global.caAddress и отключите встроенный CA istiod (переменная ENABLE_CA_SERVER=false).

Прокси должны доверять корневому сертификату цепочки. Это файл root-ca.pem из раздела «Внутренний PKI на Stronghold». Если корневой CA находится в mount pki_root, получите его из Stronghold:

d8 stronghold read -field=certificate pki_root/cert/ca

Проверка

Проверьте результат:

  1. Проверьте, что ClusterIssuer готов:

    d8 k get clusterissuer stronghold-mesh

    В колонке READY должно быть значение True.

  2. Проверьте, что Stronghold выпускает сертификаты для mesh. Список серийных номеров в pki_int должен расти по мере запуска рабочих нагрузок:

    d8 stronghold list pki_int/certs

Очистка

Перед удалением интеграции переключите Istio обратно на встроенный CA istiod и удалите istio-csr. Затем удалите ClusterIssuer и объекты Stronghold:

d8 k delete clusterissuer stronghold-mesh
d8 stronghold delete pki_int/roles/istio-mesh
d8 stronghold policy delete cert-manager-mesh

Удалите также роль метода Kubernetes, созданную на шаге 1.

Дополнительные ресурсы