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


Надстройка маршрутизации приложений HTTP для службы Azure Kubernetes Service (AKS) (прекращена)

Внимание

Надстройка маршрутизации HTTP-приложений (предварительная версия) для службы Azure Kubernetes (AKS) будет прекращена эксплуатация 03 марта 2025 года. Мы рекомендуем перейти на дополнительный модуль маршрутизации приложений до указанной даты.

Надстройка маршрутизации приложений HTTP упрощает доступ к приложениям, развернутым в вашем кластере Azure Kubernetes Service (AKS) тем, что:

  • Настройка Ingress-контроллера в кластере AKS.
  • Создание общедоступных DNS-имен для конечных точек приложений
  • Создание зоны DNS в подписке. Дополнительные сведения о стоимости DNS см. Ценообразование DNS.

Прежде чем вы начнёте

  • Надстройка маршрутизации приложений HTTP не работает с AKS версиями 1.22.6+.
  • Если вы выполняете команды локально, установите kubectl с помощью команды az aks install-cli.

Общие сведения о надстройке маршрутизации приложений HTTP

Надстройка развертывает два компонента: контроллер входящего трафика Kubernetes и внешний контроллер DNS .

  • Контроллер входящего трафика: контроллер входящего трафика предоставляется в Интернете с помощью службы Kubernetes LoadBalancer . Контроллер входящего трафика просматривает и реализует ресурсы входящего трафика Kubernetes и создает маршруты к конечным точкам приложения.
  • Внешний контроллер DNS: внешний dns-контроллер следит за ресурсами входящего трафика Kubernetes и создает записи DNS в зоне DNS A , относяющейся к кластеру.

Включение маршрутизации приложений HTTP

  1. Создайте новый кластер AKS и включите надстройку маршрутизации HTTP-приложений с помощью az aks create команды с параметром --enable-addons .

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --enable-addons http_application_routing \
        --generate-ssh-keys
    

    Вы также можете включить маршрутизацию HTTP в существующем кластере AKS с помощью az aks enable-addons команды с параметром --addons .

    az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
    
  2. Получите имя зоны DNS с помощью az aks show команды. Для развертывания приложений в кластере необходимо имя зоны DNS.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
    

    Ваш результат выполнения должен выглядеть следующим образом:

    9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io
    

Подключение к кластеру AKS

  • Настройте kubectl, чтобы подключиться к вашему кластеру Kubernetes, используя команду az aks get-credentials. В следующем примере возвращаются учетные данные для кластера AKS с именем myAKSCluster в группе ресурсов myResourceGroup:

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Использование маршрутизации приложений HTTP

Внимание

Надстройка маршрутизации http-приложений может активироваться только для ресурсов входящего трафика со следующей заметкой:

annotations:
 kubernetes.io/ingress.class: addon-http-application-routing
  1. Создайте файл с именем samples-http-application-routing.yaml и скопируйте его в следующий YAML. На строке 43 обновите <CLUSTER_SPECIFIC_DNS_ZONE> на имя зоны DNS, собранное на предыдущем шаге.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aks-helloworld
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aks-helloworld
      template:
        metadata:
          labels:
            app: aks-helloworld
        spec:
          containers:
          - name: aks-helloworld
            image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
            ports:
            - containerPort: 80
            env:
            - name: TITLE
              value: "Welcome to Azure Kubernetes Service (AKS)"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
    spec:
      type: ClusterIP
      ports:
     - port: 80
      selector:
        app: aks-helloworld
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
    spec:
      rules:
     - host: aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
    
  2. Создайте ресурсы с помощью kubectl apply команды.

    kubectl apply -f samples-http-application-routing.yaml
    

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

    deployment.apps/aks-helloworld created
    service/aks-helloworld created
    ingress.networking.k8s.io/aks-helloworld created
    
  3. Откройте в веб-браузере aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>, например aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io, и убедитесь, что демонстрационное приложение отображается. На отображение приложения может потребоваться несколько минут.

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

  1. Удалите надстройку HTTP маршрутизации приложений, используя параметр [az aks disable-addons][az-aks-disable-addons] command with the addons].

    az aks disable-addons --addons http_application_routing --name myAKSCluster --resource-group myResourceGroup --no-wait
    
  2. При отключении надстройки маршрутизации приложений HTTP некоторые ресурсы Kubernetes могут оставаться в кластере. Эти ресурсы включают configmaps и secrets и создаются в пространстве имен kube-system. Чтобы поддерживать чистоту кластера, можно удалить эти ресурсы. Найдите ресурсы addon-http-application-routing с помощью следующих kubectl get команд:

    kubectl get deployments --namespace kube-system
    kubectl get services --namespace kube-system
    kubectl get configmaps --namespace kube-system
    kubectl get secrets --namespace kube-system
    

    В следующем примере выходных данных показаны карты конфигурации, которые должны быть удалены :

    NAMESPACE     NAME                                                       DATA   AGE
    kube-system   addon-http-application-routing-nginx-configuration         0      9m7s
    kube-system   addon-http-application-routing-tcp-services                0      9m7s
    kube-system   addon-http-application-routing-udp-services                0      9m7s
    
  3. Удалите оставшиеся ресурсы с помощью kubectl delete команды. Обязательно укажите тип ресурса, имя ресурса и пространство имен. В следующем примере удаляется один из предыдущих объектов configmap.

    kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
    
  4. Повторите предыдущий kubectl delete шаг для всех ресурсов addon-http-application-routing, оставшихся в вашем кластере.

Устранение неполадок

  1. Просмотрите журналы приложений для приложения External-DNS с помощью kubectl logs команды.

    kubectl logs -f deploy/addon-http-application-routing-external-dns -n kube-system
    

    Журналы должны подтверждать, что записи DNS A и TXT были созданы успешно, как показано в следующем примере выходных данных.

    time="2018-04-26T20:36:19Z" level=info msg="Updating A record named 'aks-helloworld' to '52.242.28.189' for Azure DNS zone '471756a6-e744-4aa0-aa01-89c4d162a7a7.canadaeast.aksapp.io'."
    time="2018-04-26T20:36:21Z" level=info msg="Updating TXT record named 'aks-helloworld' to '"heritage=external-dns,external-dns/owner=default"' for Azure DNS zone '471756a6-e744-4aa0-aa01-89c4d162a7a7.canadaeast.aksapp.io'."
    
  2. Просмотрите журналы приложений для контроллера входящего трафика NGINX с помощью kubectl logs команды.

    kubectl logs -f deploy/addon-http-application-routing-nginx-ingress-controller -n kube-system
    

    Журналы должны подтвердить CREATE ресурс входящего трафика и перезагрузить контроллер, как показано в следующем примере выходных данных:

    -------------------------------------------------------------------------------
    NGINX Ingress controller
      Release:    0.13.0
      Build:      git-4bc943a
      Repository: https://github.com/kubernetes/ingress-nginx
    -------------------------------------------------------------------------------
    
    I0426 20:30:12.212936       9 flags.go:162] Watching for ingress class: addon-http-application-routing
    W0426 20:30:12.213041       9 flags.go:165] only Ingress with class "addon-http-application-routing" will be processed by this ingress controller
    W0426 20:30:12.213505       9 client_config.go:533] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
    I0426 20:30:12.213752       9 main.go:181] Creating API client for https://10.0.0.1:443
    I0426 20:30:12.287928       9 main.go:225] Running in Kubernetes Cluster version v1.8 (v1.8.11) - git (clean) commit 1df6a8381669a6c753f79cb31ca2e3d57ee7c8a3 - platform linux/amd64
    I0426 20:30:12.290988       9 main.go:84] validated kube-system/addon-http-application-routing-default-http-backend as the default backend
    I0426 20:30:12.294314       9 main.go:105] service kube-system/addon-http-application-routing-nginx-ingress validated as source of Ingress status
    I0426 20:30:12.426443       9 stat_collector.go:77] starting new nginx stats collector for Ingress controller running in namespace  (class addon-http-application-routing)
    I0426 20:30:12.426509       9 stat_collector.go:78] collector extracting information from port 18080
    I0426 20:30:12.448779       9 nginx.go:281] starting Ingress controller
    I0426 20:30:12.463585       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-nginx-configuration", UID:"2588536c-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"559", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-nginx-configuration
    I0426 20:30:12.466945       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-tcp-services", UID:"258ca065-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"561", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-tcp-services
    I0426 20:30:12.467053       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-udp-services", UID:"259023bc-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"562", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-udp-services
    I0426 20:30:13.649195       9 nginx.go:302] starting NGINX process...
    I0426 20:30:13.649347       9 leaderelection.go:175] attempting to acquire leader lease  kube-system/ingress-controller-leader-addon-http-application-routing...
    I0426 20:30:13.649776       9 controller.go:170] backend reload required
    I0426 20:30:13.649800       9 stat_collector.go:34] changing prometheus collector from  to default
    I0426 20:30:13.662191       9 leaderelection.go:184] successfully acquired lease kube-system/ingress-controller-leader-addon-http-application-routing
    I0426 20:30:13.662292       9 status.go:196] new leader elected: addon-http-application-routing-nginx-ingress-controller-5cxntd6
    I0426 20:30:13.763362       9 controller.go:179] ingress backend successfully reloaded...
    I0426 21:51:55.249327       9 event.go:218] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"aks-helloworld", UID:"092c9599-499c-11e8-a5e1-0a58ac1f0ef2", APIVersion:"extensions", ResourceVersion:"7346", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress default/aks-helloworld
    W0426 21:51:57.908771       9 controller.go:775] service default/aks-helloworld does not have any active endpoints
    I0426 21:51:57.908951       9 controller.go:170] backend reload required
    I0426 21:51:58.042932       9 controller.go:179] ingress backend successfully reloaded...
    167.220.24.46 - [167.220.24.46] - - [26/Apr/2018:21:53:20 +0000] "GET / HTTP/1.1" 200 234 "" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 197 0.001 [default-aks-helloworld-80] 10.244.0.13:8080 234 0.004 200
    

Очистка ресурсов

  • Удалите связанные объекты Kubernetes, созданные в этой статье, с помощью kubectl delete команды.

    kubectl delete -f samples-http-application-routing.yaml
    

    В следующем примере вывода показано, что объекты Kubernetes были удалены.

    deployment "aks-helloworld" deleted
    service "aks-helloworld" deleted
    ingress "aks-helloworld" deleted
    

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

Сведения о том, как установить контроллер входящего трафика с защитой HTTPS в AKS, см. в разделе HTTPS ingress в Службе Kubernetes Azure (AKS).