Устранение неполадок с сертификатами ЦС надстройки для подключения к сети службы Istio
В этой статье рассматриваются распространенные проблемы, связанные с устранением неполадок, связанных с сертификатами подключаемого центра сертификации (ЦС) для надстройки сетки службы Istio, и предлагаются решения для устранения этих проблем. В этой статье также рассматривается общий процесс настройки сертификатов ЦС подключаемого модуля для надстройки сетки служб.
Примечание.
В этой статье предполагается, что редакция asm-1-17
Istio развернута в кластере.
Предварительные условия
Средство Kubernetes kubectl или аналогичное средство для подключения к кластеру. Чтобы установить kubectl с помощью Azure CLI, выполните команду az aks install-cli .
Следующие стандартные средства оболочки в стиле Linux:
grep
sort
tail
awk
xargs
Средство jq для запроса данных JSON.
Общий процесс установки
Прежде чем включить надстройку Istio для использования функции подключаемых сертификатов ЦС, необходимо включить поставщик Key Vault Azure для надстройки "Хранилище секретов" в кластере. Убедитесь, что Key Vault Azure и кластер находятся в одном клиенте Azure.
После включения надстройки поставщика секретов azure Key Vault необходимо настроить доступ к Key Vault Azure для управляемого удостоверения, назначаемого пользователем, которое создает надстройка.
После предоставления управляемому удостоверению, назначаемому пользователем, разрешение на доступ к Key Vault Azure вы можете использовать функцию сертификатов ЦС подключаемого модуля вместе с надстройкой Istio. Дополнительные сведения см. в разделе Включение надстройки Istio в использование сертификата ЦС подключаемого модуля .
Чтобы кластер автоматически обнаруживать изменения в секретах Key Vault Azure, необходимо включить автоматическую смену.
Хотя изменения в промежуточном сертификате применяются автоматически,
istiod
развертывание необходимо перезапустить после внесения изменений в корневой сертификат. Перезапуск развертывания выполняется с помощью cronjob, как описано в разделе Развернутые ресурсы .
Включение надстройки Istio для использования сертификата ЦС подключаемого модуля
Функция сертификата ЦС подключаемого модуля Istio Istio позволяет настраивать корневые и промежуточные сертификаты подключаемого модуля в сетке кластера. Чтобы предоставить сведения о сертификате подключаемого модуля при включении надстройки, укажите следующие параметры для команды az aks mesh enable в Azure CLI.
Параметр | Описание |
---|---|
--key-vault-id <resource-id> |
Идентификатор ресурса azure Key Vault. Ожидается, что этот ресурс будет находиться в том же клиенте, что и управляемый кластер. Этот идентификатор ресурса должен быть в формате идентификатора ресурса Resource Manager Azure (шаблон ARM). |
--root-cert-object-name <root-cert-obj-name> |
Имя объекта корневого сертификата в хранилище ключей Azure. |
--ca-cert-object-name <inter-cert-obj-name> |
Имя объекта промежуточного сертификата в хранилище ключей Azure. |
--ca-key-object-name <inter-key-obj-name> |
Имя объекта закрытого ключа промежуточного сертификата в хранилище ключей Azure. |
--cert-chain-object-name <cert-chain-obj-name> |
Имя объекта цепочки сертификатов в хранилище ключей Azure. |
Если вы хотите использовать функцию подключаемых сертификатов ЦС, необходимо указать все пять параметров. Все объекты хранилища ключей Azure должны иметь тип Secret.
Дополнительные сведения см. в разделе Подключаемые сертификаты ЦС для надстройки сетки служб на основе Istio на Служба Azure Kubernetes.
Развернутые ресурсы
В рамках развертывания надстройки для функции сертификатов подключаемых модулей в кластере развертываются следующие ресурсы:
Секрет
cacerts
Kubernetes создается вaks-istio-system
пространстве имен во время развертывания надстройки. Этот секрет содержит синхронизированные секреты Azure Key Vault:kubectl describe secret cacerts --namespace aks-istio-system
Name: cacerts Namespace: aks-istio-system Labels: secrets-store.csi.k8s.io/managed=true Annotations: <none> Type: opaque Data ==== ca-cert.pem: 1968 bytes ca-key.pem: 3272 bytes cert-chain.pem: 3786 bytes root-cert.pem: 3636 bytes
Объект
istio-spc-asm-1-17
SecretProviderClass создается вaks-istio-system
пространстве имен во время развертывания надстройки. Этот ресурс содержит параметры, относящиеся к Azure для драйвера CSI хранилища секретов:kubectl get secretproviderclass --namespace aks-istio-system
NAME AGE istio-spc-asm-1-17 14h
Карта
istio-ca-root-cert
конфигурации создается вaks-istio-system
пространстве имен и во всех других пространствах имен, управляемых пользователем. Эта карта конфигурации содержит корневой сертификат, используемый центром сертификации, и используется рабочими нагрузками в пространствах имен для проверки взаимодействия между рабочими нагрузками, как показано ниже.kubectl describe configmap istio-ca-root-cert --namespace aks-istio-system
Name: istio-ca-root-cert Namespace: aks-istio-system Labels: istio.io/config=true Annotations: <none> Data ==== root-cert.pem: ---- -----BEGIN CERTIFICATE----- <certificate data> -----END CERTIFICATE-----
Объект
istio-cert-validator-cronjob-asm-1-17
Cronjob создается вaks-istio-system
пространстве имен. Этот cronjob должен выполняться каждые 10 минут, чтобы проверка обновления корневого сертификата. Если корневой сертификат, который находится вcacerts
секрете Kubernetes, не соответствуетistio-ca-root-cert
карте конфигурации вaks-istio-system
пространстве имен, он перезапускаетistiod-asm-1-17
развертывание:kubectl get cronjob --namespace aks-istio-system
NAME SCHEDULE SUSPEND ACTIVE istio-cert-validator-cronjob-asm-1-17 */10 * * * * False 0
Чтобы проверка журналы cronjob для последнего выполнения, выполните следующую команду:
kubectl logs --namespace aks-istio-system $(kubectl get pods --namespace aks-istio-system | grep 'istio-cert-validator-cronjob-' | sort -k8 | tail -n 1 | awk '{print $1}')
Эта команда создает одно из следующих выходных сообщений в зависимости от того, было ли обнаружено обновление корневого сертификата:
Root certificate update not detected.
Root certificate update detected. Restarting deployment... deployment.apps/istiod-asm-1-17 restarted Deployment istiod-asm-1-17 restarted.
Определение типа сертификата в журналах развертывания
Вы можете просмотреть журналы развертывания, чтобы определить, есть ли у вас самозаверяющий сертификат ЦС или сертификат ЦС BYO (подключаемый модуль). Чтобы просмотреть журналы, выполните следующую команду:
kubectl logs deploy/istiod-asm-1-17 --container discovery --namespace aks-istio-system | grep -v validationController
Непосредственно перед каждой записью журнала сертификатов находится еще одна запись журнала, описывающая этот тип сертификата. Для самозаверяющего сертификата ЦС в записи указано: "Нет подключаемого сертификата в etc/cacerts/ca-key.pem; Используется самозаверяющий сертификат". Для сертификата подключаемого модуля в записи указано "Use plugged-in cert at etc/cacerts/ca-key.pem". Примеры записей журнала, относящиеся к сертификатам, показаны в следующих таблицах.
Записи журнала для самозаверяющего сертификата ЦС
Timestamp Уровень журнала Сообщение 2023-11-20T23:27:36.649019Z info Использование формата файла istiod для подписывания файлов ЦС 2023-11-20T23:27:36.649032Z info Отсутствует подключаемый сертификат в etc/cacerts/ca-key.pem; Используется самозаверяющий сертификат 2023-11-20T23:27:36.649536Z info сертификат x509 — <сведения о сертификате> 2023-11-20T23:27:36.649552Z info Сертификаты Istiod перезагружаются 2023-11-20T23:27:36.649613Z info spiffe Добавлен 1 сертификат для доверенного домена cluster.local в одноранговой проверке сертификатов Записи журнала для сертификата ЦС BYO (подключаемого модуля)
Timestamp Уровень журнала Сообщение 2023-11-21T00:20:25.808396Z info Использование формата файла istiod для подписывания файлов ЦС 2023-11-21T00:20:25.808412Z info Использование подключаемого сертификата в etc/cacerts/ca-key.pem 2023-11-21T00:20:25.808731Z info сертификат x509 — <сведения о сертификате> 2023-11-21T00:20:25.808764Z info сертификат x509 — <сведения о сертификате> 2023-11-21T00:20:25.808799Z info сертификат x509 — <сведения о сертификате> 2023-11-21T00:20:25.808803Z info Сертификаты Istiod перезагружаются 2023-11-21T00:20:25.808873Z info spiffe Добавлен 1 сертификат для доверенного домена cluster.local в одноранговой проверке сертификатов
Сведения о сертификате в записи журнала отображаются в виде разделенных запятыми значений для издателя, субъекта, серийного номера (SN — длинной шестнадцатеричной строки) и начальных и конечных значений меток времени, определяющих, когда сертификат действителен.
Для самозаверяющего сертификата ЦС существует одна подробная запись. Примеры значений для этого сертификата приведены в следующей таблице.
Издатель | Subject | SN | NotBefore | NotAfter |
---|---|---|---|---|
"O=cluster.local" | "" | <32-значное шестнадцатеричное значение> | "2023-11-20T23:25:36Z" | "2033-11-17T23:27:36Z" |
Для сертификата ЦС BYO (подключаемый модуль) существуют три подробные записи. Две другие записи относятся к обновлению корневого сертификата и изменению промежуточного сертификата. Примеры значений для этих записей приведены в следующей таблице.
Издатель | Subject | SN | NotBefore | NotAfter |
---|---|---|---|---|
CN=Промежуточный ЦС - A1,O=Istio,L=cluster-A1" | "" | <32-значное шестнадцатеричное значение> | "2023-11-21T00:18:25Z" | "2033-11-18T00:20:25Z" |
CN=Root A,O=Istio" | "CN=Intermediate CA - A1,O=Istio,L=cluster-A1" | <40-значное шестнадцатеричное значение> | "2023-11-04T01:40:22Z" | "2033-11-01T01:40:22Z" |
CN=Root A,O=Istio" | "CN=Root A,O=Istio" | <40-значное шестнадцатеричное значение> | "2023-11-04T01:38:27Z" | "2033-11-01T01:38:27Z" |
Распространенные проблемы
Проблема 1. Неправильно настроен доступ к azure Key Vault
После включения надстройки поставщика секретов azure Key Vault необходимо предоставить доступ к управляемому удостоверению, назначаемому пользователем, к Key Vault Azure. При неправильной настройке доступа к Azure Key Vault установка надстройки зависает.
kubectl get pods --namespace aks-istio-system
В списке модулей pod можно увидеть, что istiod-asm-1-17
модули pod зависли в состоянии Init:0/2
.
ИМЯ | ГОТОВ | СТАТУС | ПЕРЕЗАГРУЖАЕТСЯ | ВОЗРАСТ |
---|---|---|---|---|
istiod-asm-1-17-6fcfd88478-2x95b | 0/1 | Прекращения | 0 | 5m55s |
istiod-asm-1-17-6fcfd88478-6x5hhh | 0/1 | Прекращения | 0 | 5m40s |
istiod-asm-1-17-6fcfd88478-c48f9 | 0/1 | Инициализация:0/2 | 0 | 54s |
istiod-asm-1-17-6fcfd88478-wl8mw | 0/1 | Инициализация:0/2 | 0 | 39s |
Чтобы проверить проблему с доступом к Key Vault Azure, выполните kubectl get pods
команду , чтобы найти модули pod с secrets-store-provider-azure
меткой в kube-system
пространстве имен:
kubectl get pods --selector app=secrets-store-provider-azure --namespace kube-system --output name | xargs -I {} kubectl logs --namespace kube-system {}
В следующем примере выходных данных показано, что произошла ошибка "403 Запрещено", и вам отказано в разрешении "получить" для секретов в хранилище ключей:
"не удалось обработать запрос на подключение" err="не удалось получить objectType:secret, objectName:<secret-name>, objectVersion:: keyvault. BaseClient#GetSecret: сбой при ответе на запрос: StatusCode=403 - Исходная ошибка: autorest/azure: служба вернула ошибку. Status=403 Code=\"Forbidden\" Message=\"Пользователь, группа или приложение 'appid=<appid>; oid=<oid>; iss=<iss>' не имеет разрешения на получение секретами для хранилища ключей MyAzureKeyVault; location=eastus'. Сведения об устранении этой проблемы см. в разделе https://go.microsoft.com/fwlink/?linkid=2125287\" InnerError={\"code\":\"AccessDenied\"}".
Чтобы устранить эту проблему, настройте доступ к управляемому удостоверению, назначаемому пользователем, для надстройки Azure Key Vault, получив разрешения на получение и перечисление секретов Azure Key Vault и переустановив надстройку Istio. Сначала получите идентификатор объекта управляемого удостоверения, назначаемого пользователем, для надстройки azure Key Vault, выполнив команду az aks show:
OBJECT_ID=$(az aks show --resource-group <my-resource-group> --name <my-managed-cluster> --query 'addonProfiles.azureKeyvaultSecretsProvider.identity.objectId')
Чтобы задать политику доступа, выполните следующую команду az keyvault set-policy , указав полученный идентификатор объекта:
az keyvault set-policy --name MyAzureKeyVault --object-id $OBJECT_ID --secret-permissions get list
Примечание.
Вы создали Key Vault с помощью авторизации Azure RBAC для модели разрешений вместо политики доступа к хранилищу? В этом случае см. статью Предоставление доступа к Key Vault ключам, сертификатам и секретам с помощью управления доступом на основе ролей Azure, чтобы создать разрешения для управляемого удостоверения. Добавьте назначение роли Azure для Key Vault Reader для управляемого удостоверения надстройки, назначаемого пользователем.
Проблема 2. Автоматическое обнаружение изменений секретов Key Vault не настроено
Чтобы кластер автоматически обнаруживать изменения в секретах Key Vault Azure, необходимо включить автоматическую смену для надстройки поставщика Key Vault Azure. Автоматическая смена позволяет автоматически обнаруживать изменения в промежуточных и корневых сертификатах. Для кластера, который включает надстройку поставщика Key Vault Azure, выполните следующую az aks show
команду, чтобы проверка, включена ли автоматическая смена:
az aks show --resource-group <my-resource-group> --name <my-managed-cluster> | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.enableSecretRotation'
Если кластер включил надстройку поставщика Key Vault Azure, выполните следующую az aks show
команду, чтобы определить интервал опроса:
az aks show --resource-group <my-resource-group> --name <my-managed-cluster> | jq -r '.addonProfiles.azureKeyvaultSecretsProvider.config.rotationPollInterval'
Секреты azure Key Vault синхронизируются с кластером по истечении интервала опроса после предыдущей синхронизации. Значение интервала по умолчанию — две минуты.
Проблема 3. Значения сертификатов отсутствуют или настроены неправильно
Если в azure Key Vault отсутствуют секретные объекты или эти объекты настроены неправильно, установка надстройки может быть отложена. Модули istiod-asm-1-17
pod не выходят за пределы Init:0/2
состояния. Чтобы найти основную причину этой проблемы, просмотрите журналы развертывания для этого модуля pod, выполнив следующую kubectl describe
команду:
kubectl describe deploy/istiod-asm-1-17 --namespace aks-istio-system
Команда отображает события, которые могут быть похожи на следующую таблицу выходных данных. В этом примере причина проблемы заключается в отсутствии секрета.
Тип | Reason | Возраст | From | Сообщение |
---|---|---|---|---|
Normal | Scheduled | 3m9s | планировщик по умолчанию | Успешно назначен aks-istio-system/istiod-asm-1-17-6fcfd88478-hqdj для aks-userpool-24672518-vmss000000 |
Предупреждение | FailedMount | 66s | kubelet | Не удается подключить или подключить тома: unmounted volumes=[cacerts], unatted volumes=[], не удалось обработать тома=[]: истекло время ожидания условия |
Предупреждение | FailedMount | 61s (x9 более 3m9s) | kubelet | Сбой MountVolume.SetUp для тома "cacerts": ошибка rpc: code = Unknown desc = не удалось подключить объекты хранилища секретов для pod aks-istio-system/istiod-asm-1-17-6fcfd88478-hqdj, err: ошибка rpc: code = Unknown desc = не удалось подключить объекты, ошибка: не удалось получить objectType:secret, objectName:test-cert-chain, objectVersion:: keyvault. BaseClient#GetSecret: сбой при ответе на запрос: StatusCode=404 - Исходная ошибка: autorest/azure: служба вернула ошибку. Status=404 Code="SecretNotFound" Message="Секрет с (имя/идентификатор) test-cert-chain не найден в этом хранилище ключей. Если вы недавно удалили этот секрет, вы можете восстановить его с помощью правильной команды восстановления. Сведения об устранении этой проблемы см. в разделе https://go.microsoft.com/fwlink/?linkid=2125182" |
Ресурсы
Устранение неполадок с надстройкой сетки службы "Общий Istio"
Устранение неполадок с надстройкой сетки службы Istio MeshConfig
Устранение неполадок с надстройкой входящего шлюза Istio service mesh
Устранение неполадок при обновлении дополнительных исправлений надстройки сетки службы Istio
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.
Заявление об отказе от ответственности за контактные данные сторонней организации
Корпорация Майкрософт предоставляет сторонние контактные данные, чтобы помочь вам найти дополнительные сведения по этой теме. Эти данные могут быть изменены без предварительного уведомления. Корпорация Майкрософт не гарантирует точность контактной информации сторонних поставщиков.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по