Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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