Поделиться через


Управляемый входной контроллер NGINX с модулем маршрутизации приложений

Один из способов маршрутизации трафика Протокола гипертекста (HTTP) и безопасного трафика (HTTPS) в приложения, работающие в кластере службы Azure Kubernetes (AKS), — использовать Kubernetes Ingress объект. При создании объекта Ingress, использующего дополнение для маршрутизации приложений классы Ingress NGINX, дополнение создает, настраивает и управляет одним или несколькими Ingress контроллерами в вашем кластере AKS.

В этой статье показано, как развернуть и настроить базовый контроллер входящего трафика в кластере AKS.

Надстройка маршрутизации приложений с функциями NGINX

Надстройка маршрутизации приложений с NGINX обеспечивает следующее:

  • Простая настройка управляемых Ingress-контроллеров NGINX на основе контроллера Kubernetes NGINX Ingress.
  • Интеграция с Azure DNS для управления общедоступными и частными зонами
  • Завершение SSL с сертификатами, хранящимися в Azure Key Vault.

Сведения о других конфигурациях см. в статье:

С выходом Open Service Mesh (OSM) из обращения Cloud Native Computing Foundation (CNCF), использование надстройки маршрутизации приложений с OSM не рекомендуется.

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

  • Подписка Azure. Если у вас еще нет подписки Azure, вы можете создать бесплатную учетную запись.
  • Azure CLI версии 2.54.0 или более поздней версии, установленной и настроенной. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Ограничения

  • Надстройка маршрутизации приложений поддерживает до пяти зон Azure DNS.
  • Надстройка маршрутизации приложений может быть включена только в кластерах AKS с управляемым удостоверением.
  • Все глобальные зоны Azure DNS, интегрированные с надстройкой, должны находиться в одной группе ресурсов.
  • Все частные зоны Azure DNS, интегрированные с надстройкой, должны находиться в одной группе ресурсов.
  • Изменение ingress-nginx ConfigMap в app-routing-system пространстве имен не поддерживается.
  • Следующие аннотации фрагментов блокируются и препятствуют настройке Ingress: load_module, lua_package, _by_lua, location, root, proxy_pass, serviceaccount, {, }, '.

Включение маршрутизации приложений с помощью Azure CLI

Включить на новом кластере

Чтобы включить маршрутизацию приложений в новом кластере az aks create , используйте команду, указав --enable-app-routing флаг.

az aks create \
    --resource-group <ResourceGroupName> \
    --name <ClusterName> \
    --location <Location> \
    --enable-app-routing \
    --generate-ssh-keys

Включите на существующем кластере

Чтобы включить маршрутизацию приложений в существующем кластере az aks approuting enable , используйте команду.

az aks approuting enable --resource-group <ResourceGroupName> --name <ClusterName>

Подключение к кластеру 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>

Развертывание приложения

Надстройка маршрутизации приложений использует аннотации на объектах Ingress в Kubernetes для создания соответствующих ресурсов.

  1. Создайте пространство имен приложения под названием aks-store для запуска примерных pod-ов с помощью команды kubectl create namespace.

    kubectl create namespace aks-store
    
  2. Разверните приложение хранилища AKS с помощью следующего файла манифеста YAML:

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
    

Этот манифест создаст необходимые развертывания и службы для приложения магазина AKS.

Создание объекта Ingress

Надстройка маршрутизации приложений создает класс входящего трафика в кластере с именем webapprouting.kubernetes.azure.com. При создании объекта Ingress с этим классом он активирует надстройку.

  1. Скопируйте следующий манифест YAML в новый файл с именем ingress.yaml и сохраните его на локальном компьютере.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: store-front
      namespace: aks-store
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - http:
          paths:
          - backend:
              service:
                name: store-front
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. Создайте ресурс входящего трафика, используя команду kubectl apply.

    kubectl apply -f ingress.yaml -n aks-store
    

    В следующем примере выходных данных показан созданный ресурс:

    ingress.networking.k8s.io/store-front created
    

Убедитесь, что управляемый Ingress был создан

Вы можете проверить, был ли создан управляемый Ingress с помощью команды kubectl get ingress.

kubectl get ingress -n aks-store

В следующем примере выходных данных показан созданный управляемый ресурс Ingress:

NAME          CLASS                                HOSTS   ADDRESS       PORTS   AGE
store-front   webapprouting.kubernetes.azure.com   *       51.8.10.109   80      110s

Вы можете убедиться, что хранилище AKS работает, направив браузер на общедоступный IP-адрес Ingress-контроллера. Найдите IP-адрес с kubectl:

kubectl get service -n app-routing-system nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"

Удаление надстройки маршрутизации приложений

Чтобы удалить связанное пространство имен, используйте kubectl delete namespace команду.

kubectl delete namespace aks-store

Чтобы удалить надстройку маршрутизации приложений из кластера, используйте az aks approuting disable команду.

az aks approuting disable --name <ClusterName> --resource-group <ResourceGroupName>

Примечание.

Чтобы избежать потенциальных нарушений трафика в кластере при отключении надстройки маршрутизации приложений, некоторые ресурсы Kubernetes, включая configMaps, секреты и развертывание, которое запускает контроллер, останется в кластере. Эти ресурсы находятся в пространстве имен системы маршрутизации приложений. Эти ресурсы можно удалить, если они больше не нужны, удалив пространство имен при помощи kubectl delete ns app-routing-system.

Следующие шаги