Надстройка маршрутизации приложений HTTP для Служба Azure Kubernetes (AKS) (прекращена)
Внимание!
Надстройка маршрутизации приложений HTTP (предварительная версия) для Служба Azure Kubernetes (AKS) будет прекращена 3 марта 2025 г. К этой дате рекомендуется выполнить миграцию на надстройку "Маршрутизация приложений ".
Надстройка маршрутизации приложений HTTP упрощает доступ к приложениям, развернутых в кластере Служба Azure Kubernetes (AKS), с помощью следующих способов:
- Настройка контроллера входящего трафика в кластере AKS.
- Создание общедоступных DNS-имен для конечных точек приложений
- Создание зоны DNS в подписке. Дополнительные сведения о стоимости DNS см. на этой странице.
Подготовка к работе
- Надстройка маршрутизации приложений HTTP не работает с AKS версии 1.22.6+.
- Если команды выполняются локально, установите
kubectl
с помощьюaz aks install-cli
команды .
Общие сведения о надстройке маршрутизации приложений HTTP
Надстройка развертывает два компонента: контроллер входящего трафика Kubernetes и контроллерExternal-DNS .
-
Контроллер входящего трафика. Контроллер входящего трафика предоставляется в Интернет с помощью службы Kubernetes
LoadBalancer
. Контроллер входящего трафика наблюдает и реализует ресурсы входящего трафика Kubernetes и создает маршруты к конечным точкам приложения. -
Внешний контроллер DNS. Контроллер External-DNS следит за ресурсами входящего трафика Kubernetes и создает записи DNS
A
в зоне DNS для кластера.
Включение маршрутизации приложений HTTP
Создайте кластер AKS и включите надстройку маршрутизации приложений HTTP с помощью
az aks create
команды с параметром--enable-addons
.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-addons http_application_routing \ --generate-ssh-keys
Вы также можете включить маршрутизацию HTTP в существующем кластере
az aks enable-addons
AKS с помощью команды с параметром--addons
.az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
Получите имя зоны 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
Создайте файл с именем 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
Создайте ресурсы с помощью
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
Откройте aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>, например aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io, в веб-браузере и убедитесь, что вы можете видеть демонстрационное приложение. На отображение приложения может потребоваться несколько минут.
Удаление маршрутизации приложений HTTP
Удалите надстройку маршрутизации приложений 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
При отключении надстройки маршрутизации приложений HTTP некоторые ресурсы Kubernetes могут оставаться в кластере. Эти ресурсы включают карты конфигурации и секреты и создаются в пространстве имен 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
Удалите оставшиеся ресурсы с помощью
kubectl delete
команды . Обязательно укажите тип ресурса, имя ресурса и пространство имен. В следующем примере удаляется один из предыдущих объектов configmap.kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
Повторите предыдущий
kubectl delete
шаг для всех ресурсов addon-http-application-routing , оставшихся в кластере.
Диагностика
Просмотрите журналы приложений для приложения External-DNS с помощью
kubectl logs
команды .kubectl logs -f deploy/addon-http-application-routing-external-dns -n kube-system
Журналы должны подтвердить успешное
A
создание записи DNS и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'."
Просмотрите журналы приложений для контроллера входящего трафика 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 на Служба Azure Kubernetes (AKS).
Azure Kubernetes Service
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по