Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить пользовательские доменные имена и СЕРТИФИКАТЫ SSL/TLS для входящего трафика AKS с помощью Azure Key Vault и Azure DNS с надстройкой маршрутизации приложений для AKS.
Предварительные условия
Кластер AKS с надстройкой маршрутизации приложений.
Azure Key Vault, если вы хотите настроить завершение SSL и сохранить сертификаты в хранилище, размещенном в Azure. Если у вас его нет, см. статью "Создание хранилища ключей" с помощью Azure CLI.
Чтобы включить поддержку трафика HTTPS, требуется SSL-сертификат. Если у вас его нет, см. статью о создании сертификата.
Azure DNS, если вы хотите настроить глобальное и частное управление зонами и разместить их в Azure. Если у вас нет зоны Azure DNS, ее можно создать. Чтобы включить поддержку зон DNS, выполните приведенные действия.
- Все глобальные зоны Azure DNS должны находиться в одной группе ресурсов, которая может отличаться от группы ресурсов кластера.
- Все частные зоны Azure DNS должны находиться в одной группе ресурсов, которая может отличаться от группы ресурсов кластера.
- Группа ресурсов не должна находиться в той же подписке, что и кластер.
Требуемые разрешения Azure
Для вашей учетной записи пользователя требуется: роль владельца, администратора учетной записи Azure, или соадминистратора Azure в рамках подписки Azure.
Что делают команды: Когда вы запускаете az aks approuting update --attach-kv или az aks approuting zone add --attach-zones, эти команды используют ваши разрешения на назначение ролей для автоматического предоставления управляемому удостоверению надстройки маршрутизации приложений следующих ролей:
- Роль пользователя сертификата Key Vault в Azure Key Vault (для доступа к сертификатам).
- Роль участника зоны DNS в зонах Azure DNS (для управления записями DNS).
Дополнительные сведения о удостоверениях AKS см. в Сводке об управляемых удостоверениях.
Подключение к кластеру AKS
Чтобы подключиться к кластеру Kubernetes с локального компьютера, используйте kubectlклиент командной строки Kubernetes. Ее можно установить локально с помощью az aks install-cli команды. Если вы используете Azure Cloud Shell, kubectl уже установлен.
Настройте kubectl для подключения к вашему кластеру Kubernetes с помощью команды
az aks get-credentials.# Set environment variables for your resource group and cluster name export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<cluster-name> # Get the AKS cluster credentials az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Создание и экспорт самозаверяющего SSL-сертификата
Для тестирования вместо сертификата, подписанного центром сертификации, можно использовать самозаверяющий открытый сертификат. Если у вас уже есть сертификат, этот шаг можно пропустить.
Внимание
Самозаверяющие сертификаты — это цифровые сертификаты, которые не подписаны доверенным сторонним ЦС. Компания или разработчик, ответственный за веб-сайт или программное обеспечение, создает, выдает и подписывает эти сертификаты. Именно поэтому самозаверяющиеся сертификаты считаются небезопасными для общедоступных веб-сайтов и приложений. Azure Key Vault имеет надежное партнерство с некоторыми центрами сертификации.
Создайте самозаверяющий SSL-сертификат для использования с входящего трафика с помощью
openssl reqкоманды. Убедитесь, что вы замените<host-name>DNS-имя, используемое вами.openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<host-name>" -addext "subjectAltName=DNS:<host-name>"Экспортируйте SSL-сертификат и пропустите строку пароля с помощью
openssl pkcs12 -exportкоманды.openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
Импорт самозаверяющего SSL-сертификата в Azure Key Vault
Импортируйте SSL-сертификат в Azure Key Vault с помощью
az keyvault certificate importкоманды. Если сертификат защищен паролем, можно передать пароль через--passwordфлаг.# Set environment variables for your key vault name and certificate name export KEY_VAULT_NAME=<key-vault-name> export KEY_VAULT_CERT_NAME=<key-vault-certificate-name> # Import the SSL certificate into Azure Key Vault az keyvault certificate import --vault-name $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --file aks-ingress-tls.pfx [--password <certificate password if specified>]
Примечание.
Чтобы включить надстройку маршрутизации приложений для перезагрузки сертификатов из Azure Key Vault при их изменении, необходимо включить функцию автоматической передачи секретов драйвера CSI хранилища секретов. Если авторотация включена, драйвер обновляет крепление pod и секрет Kubernetes, периодически проверяя изменения в зависимости от заданного интервала опроса для ротации. Интервал опроса по умолчанию составляет две минуты.
Включение интеграции Azure Key Vault
Azure Key Vault предлагает две системы авторизации: управление доступом на основе ролей Azure (Azure RBAC), которая работает на плоскости управления, а также модель политики доступа, которая работает как на плоскости управления, так и на плоскости данных. Операция --attach-kv выбирает соответствующую модель доступа для использования.
Получите идентификатор ресурса для хранилища ключей с помощью
az keyvault showкоманды и задайте выходные данные переменной среды.KEY_VAULT_ID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)Обновите надстройку маршрутизации приложений для активации поставщика Azure Key Vault в драйвере CSI хранилища секретов и примените необходимые назначения ролей, используя команду
az aks approuting updateс аргументами--enable-kvи--attach-kv.az aks approuting update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-kv --attach-kv ${KEY_VAULT_ID}
Создание глобальной зоны Azure DNS
Если у вас уже есть зона Azure DNS, можно пропустить этот шаг.
Создайте зону Azure DNS с помощью
az network dns zone createкоманды.# Set environment variables for your resource group and DNS zone name export RESOURCE_GROUP=<resource-group-name> export ZONE_NAME=<zone-name> # Create the Azure DNS zone az network dns zone create --resource-group $RESOURCE_GROUP --name $ZONE_NAME
Включение интеграции Azure DNS
Получите идентификатор ресурса для зоны DNS с помощью
az network dns zone showкоманды и задайте выходные данные переменной среды.ZONE_ID=$(az network dns zone show --resource-group $RESOURCE_GROUP --name $ZONE_NAME --query "id" --output tsv)Обновите надстройку маршрутизации приложений, чтобы включить интеграцию Azure DNS с помощью
az aks approuting zoneкоманды. Вы можете передать разделенный запятыми список идентификаторов ресурсов зоны DNS.az aks approuting zone add --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --ids=${ZONE_ID} --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 $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --query "id" --output tsvВ следующем примере выходных данных показан URI сертификата, возвращенный командой:
https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ab12c34567d89e01f2345g6h78ijkl90Скопируйте следующий манифест YAML в новый файл с именем ingress.yaml и сохраните его на локальном компьютере.
Обновите
<host-name>с именем вашего DNS хоста и<key-vault-certificate-uri>с URI, возвращенным предыдущей командой. Строковое значение для<key-vault-certificate-uri>должно включать толькоhttps://yourkeyvault.vault.azure.net/certificates/certname. Удалите версию сертификата в конце строки URI, чтобы получить текущую версию.Ключ
secretNameв разделеtlsопределяет имя секрета, содержащего сертификат для этого ресурса Ingress. Этот сертификат отображается в браузере, когда клиент переходит по URL-адресу, указанному<host-name>в ключе. Убедитесь, что значение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: <key-vault-certificate-uri> name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <host-name> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix tls: - hosts: - <host-name> secretName: keyvault-<your-ingress-name>Создайте ресурсы кластера с помощью
kubectl applyкоманды.kubectl apply -f ingress.yaml -n hello-web-app-routingВ следующем примере выходных данных показан созданный ресурс:
Ingress.networking.k8s.io/aks-helloworld created
Убедитесь, что управляемый входной шлюз создан.
Убедитесь, что управляемый вход был создан с помощью команды
kubectl get ingress.kubectl get ingress -n hello-web-app-routingВ следующем примере результатов показан созданный управляемый вход:
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 в рамках анализа производительности и использования приложения.