Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Надстройка маршрутизации 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
Создайте новый кластер 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
Получите имя зоны 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 могут оставаться в кластере. Эти ресурсы включают 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
Удалите оставшиеся ресурсы с помощью
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
Журналы должны подтверждать, что записи 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'."
Просмотрите журналы приложений для контроллера входящего трафика 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).