Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ingress — это объект API, определяющий правила, которые позволяют внешним доступ к службам в кластере Azure Kubernetes Service (AKS). При создании объекта Ingress, использующего классы Ingress для маршрутизации приложений nginx, надстройка создает, настраивает и управляет одним или несколькими Ingress контроллерами в вашем кластере AKS.
В этой статье показано, как настроить расширенную конфигурацию входящего трафика для шифрования трафика с помощью SSL/TLS-сертификатов, хранящихся в Azure Key Vault, и использовать Azure DNS для управления зонами DNS.
Дополнение для маршрутизации приложений с функциями nginx
Надстройка маршрутизации приложений с nginx обеспечивает следующее:
- Простая настройка управляемых контроллеров Ingress nginx.
- Интеграция с внешним DNS, например Azure DNS для глобального и частного управления зонами
- Завершение SSL с сертификатами, хранящимися в хранилище ключей, например Azure Key Vault.
Предварительные условия
- Кластер AKS с надстройкой маршрутизации приложений.
- Azure Key Vault, если вы хотите настроить завершение SSL и сохранить сертификаты в хранилище, размещенном в Azure.
- Azure DNS, если вы хотите настроить глобальное и частное управление зонами и разместить их в Azure.
- Чтобы подключить Azure Key Vault или зону Azure DNS, вам потребуется роль владельца, администратора учетной записи Azure или соадминистратора Azure в подписке Azure.
Подключение к кластеру AKS
Чтобы подключиться к кластеру Kubernetes с локального компьютера, используйте kubectl
клиент командной строки Kubernetes. Ее можно установить локально с помощью команды az aks install-cli . Если вы используете Azure Cloud Shell, kubectl
уже установлен.
Настройте kubectl для подключения к вашему кластеру Kubernetes с помощью команды az aks get-credentials
.
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
Завершение трафика HTTPS с помощью сертификатов из Azure Key Vault
Чтобы включить поддержку трафика HTTPS, ознакомьтесь со следующими предварительными условиями:
- SSL-сертификат. Если у вас нет сертификата, можно создать сертификат.
Создание Azure Key Vault для хранения сертификата
Примечание.
Если у вас уже есть Azure Key Vault, этот шаг можно пропустить.
Создайте Azure Key Vault с помощью az keyvault create
команды.
az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true
Создание и экспорт самозаверяющего SSL-сертификата
Для тестирования вместо сертификата, подписанного центром сертификации, можно использовать самозаверяющий открытый сертификат. Если у вас уже есть сертификат, этот шаг можно пропустить.
Внимание
Самозаверяющие сертификаты — это цифровые сертификаты, которые не подписаны доверенным сторонним УЦ. Самозаверяющие сертификаты создаются, выдаются и подписаны компанией или разработчиком, отвечающими за подписанный веб-сайт или программное обеспечение. Именно поэтому самозаверяющиеся сертификаты считаются небезопасными для общедоступных веб-сайтов и приложений. Azure Key Vault имеет надежное партнерство с некоторыми центрами сертификации.
Создайте самозаверяющий SSL-сертификат для использования с входящего трафика с помощью
openssl req
команды. Убедитесь, что вы замените<Hostname>
DNS-имя, используемое вами.openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
Экспортируйте SSL-сертификат и пропустите строку пароля с помощью
openssl pkcs12 -export
команды.openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
Импорт сертификата в Azure Key Vault
Импортируйте SSL-сертификат в Azure Key Vault с помощью az keyvault certificate import
команды. Если сертификат защищен паролем, можно передать пароль через --password
флаг.
az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]
Внимание
Чтобы надстройка могла перезагружать сертификаты из Azure Key Vault после их изменения, вам нужно включить функцию автоматической смены секретов в CSI-драйвере хранилища секретов с аргументом --enable-secret-rotation
. Если авторотация включена, драйвер обновляет крепление pod и секрет Kubernetes, периодически проверяя изменения в зависимости от заданного интервала опроса для ротации. Интервал опроса по умолчанию составляет две минуты.
Включение интеграции Azure Key Vault
В кластере с включенной надстройкой маршрутизации приложений используйте az aks approuting update
команду с помощью --enable-kv
--attach-kv
аргументов, чтобы включить поставщик Azure Key Vault для драйвера CSI Хранилища секретов и применить необходимые назначения ролей.
Azure Key Vault предлагает две системы авторизации: управление доступом на основе ролей Azure (Azure RBAC), которая работает на плоскости управления, а также модель политики доступа, которая работает как на плоскости управления, так и на плоскости данных. Операция --attach-kv
выберет соответствующую модель доступа для использования.
Примечание.
Команда az aks approuting update --attach-kv
использует разрешения пользователя, выполняющего команду, для создания назначения роли Azure Key Vault. Эта роль назначается управляемому идентификатору надстройки. Дополнительные сведения о удостоверениях AKS см. в Сводке об управляемых удостоверениях.
Получите идентификатор ресурса Azure Key Vault.
KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)
Затем обновите надстройку маршрутизации приложений, чтобы включить драйвер CSI хранилища секретов Azure Key Vault и применить назначение роли.
az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}
Включение интеграции Azure DNS
Надстройка маршрутизации приложений может быть настроена для автоматического создания записей в одной или нескольких глобальных и частных зонах DNS, использующих Azure, для узлов, определенных в ресурсах Ingress. Чтобы включить поддержку зон DNS, ознакомьтесь со следующими предварительными условиями:
- Все глобальные зоны Azure DNS должны находиться в одной группе ресурсов, которая может отличаться от группы ресурсов кластера.
- Все частные зоны Azure DNS должны находиться в одной группе ресурсов, которая может отличаться от группы ресурсов кластера.
- Группа ресурсов не должна находиться в той же подписке, что и кластер.
Если у вас нет зоны Azure DNS, ее можно создать.
Создание общедоступной зоны Azure DNS
Примечание.
Если у вас уже есть зона Azure DNS, можно пропустить этот шаг.
Создайте зону Azure DNS с помощью
az network dns zone create
команды.az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
Присоединение зоны Azure DNS к надстройке маршрутизации приложений
Примечание.
Команда az aks approuting zone add
использует разрешения пользователя, выполняющего команду, для создания назначения роли зоны Azure DNS. Эта роль назначается управляемому удостоверению надстройки. Дополнительные сведения об управляемых удостоверениях AKS см. Сводка об управляемых удостоверениях.
Получите идентификатор ресурса для зоны DNS с помощью
az network dns zone show
команды и задайте выходные данные переменной с именем ZONEID.ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
Обновите надстройку, чтобы включить интеграцию с Azure DNS с помощью
az aks approuting zone
команды. Вы можете передать разделенный запятыми список идентификаторов ресурсов зоны DNS.az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
Создать Ingress, использующий имя узла и сертификат из Azure Key Vault
Надстройка маршрутизации приложений создает класс входящего трафика в кластере с именем webapprouting.kubernetes.azure.com. При создании объекта Ingress с этим классом активируется дополнение.
URI сертификата для использования в ingress, полученный из Azure Key Vault с помощью команды
az keyvault certificate show
.az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
В следующем примере выходных данных показан URI сертификата, возвращенный командой:
https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
Скопируйте следующий манифест YAML в новый файл с именем ingress.yaml и сохраните его на локальном компьютере.
Обновите
<Hostname>
с именем вашего хоста DNS и<KeyVaultCertificateUri>
с URI, возвращённым из команды для запроса Azure Key Vault, на шаге 1 выше. Строковое значение для*<KeyVaultCertificateUri>*
должно включать толькоhttps://yourkeyvault.vault.azure.net/certificates/certname
. Версия сертификата в конце строки URI должна быть опущена, чтобы получить текущую версию.Ключ
secretName
в разделеtls
определяет имя секрета, содержащего сертификат для этого ресурса Ingress. Этот сертификат отображается в браузере, когда клиент переходит по URL-адресу, указанному<Hostname>
в ключе. Убедитесь, что значениеsecretName
равноkeyvault-
, за которым следует значение имени ресурса Ingress (изmetadata.name
). В примере YAMLsecretName
должно быть равноkeyvault-<your Ingress name>
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.azure.com/tls-cert-keyvault-uri: <KeyVaultCertificateUri> name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix tls: - hosts: - <Hostname> secretName: keyvault-<your ingress name>
Создайте ресурсы кластера с помощью
kubectl apply
команды.kubectl apply -f ingress.yaml -n hello-web-app-routing
В следующем примере выходных данных показан созданный ресурс:
Ingress.networking.k8s.io/aks-helloworld created
Проверка создания управляемого входящего трафика
Вы можете проверить, был ли создан управляемый Ingress с помощью команды kubectl get ingress
.
kubectl get ingress -n hello-web-app-routing
В следующем примере выходных данных показан созданный управляемый Ingress:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Следующие шаги
Узнайте о мониторинге метрик контроллера Ingress-nginx, входящих в состав надстройки для маршрутизации приложений, с использованием Prometheus в Grafana в рамках анализа производительности и использования вашего приложения.
Azure Kubernetes Service