具有应用程序路由加载项的托管 NGINX Ingress

将超文本传输协议 (HTTP) 和安全 (HTTPS) 流量路由到在 Azure Kubernetes 服务 (AKS) 群集上运行的应用程序的一种方法是使用 Kubernetes Ingress 对象。 创建使用应用程序路由加载项 的 NGINX Ingress 类的 Ingress 对象时,加载项会在 AKS 群集中创建、配置和管理一个或多个 Ingress 控制器。

本文介绍如何在 AKS 群集中部署和配置基本 Ingress 控制器。

具有 NGINX 功能的应用程序路由加载项

具有 NGINX 的应用程序路由加载项提供以下优势:

有关其他配置,请参阅:

随着云原生计算基础 (CNCF) 停用 Open Service Mesh (OSM),使用应用程序路由附加产品是所有 AKS 群集的默认方法。

先决条件

  • Azure 订阅。 如果你没有 Azure 订阅,可以创建一个试用版订阅
  • 安装并配置了 Azure CLI 2.54.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI
  • 安装版本 0.5.171 或更高版本的 aks-preview Azure CLI 扩展

限制

  • 应用程序路由附加产品最多支持五个 Azure DNS 区域。
  • 与附加产品集成的所有全局 Azure DNS 区域都必须位于同一资源组中。
  • 与附加产品集成的所有专用 Azure DNS 区域都必须位于同一资源组中。
  • 不支持编辑 app-routing-system 命名空间中的任何资源,包括 Ingress-nginx ConfigMap。

使用 Azure CLI 启用应用程序路由

在新群集上启用

若要在新群集上启用应用程序路由,请使用 az aks create 命令,并指定 --enable-app-routing 标志。

az aks create -g <ResourceGroupName> -n <ClusterName> -l <Location> --enable-app-routing

在现有群集上启用

若要在现有群集上启用应用程序路由,请使用 az aks approuting enable 命令。

az aks approuting enable -g <ResourceGroupName> -n <ClusterName>

连接到 AKS 群集

若要从本地计算机连接到 Kubernetes 群集,请使用 kubectl(Kubernetes 命令行客户端)。 可以使用 az aks install-cli 命令在本地进行安装。 如果使用的是 Azure Cloud Shell,则 kubectl 已安装。

使用 az aks get-credentials 命令将 kubectl 配置为连接到你的 Kubernetes 群集。

az aks get-credentials -g <ResourceGroupName> -n <ClusterName>

部署应用程序

应用程序路由附加产品使用 Kubernetes Ingress 对象的注释来创建适当的资源。

  1. 创建名为 hello-web-app-routing 的应用程序命名空间,以使用 kubectl create namespace 命令运行示例 Pod。

    kubectl create namespace hello-web-app-routing
    
  2. 通过将以下 YAML 清单复制到名为 deployment.yaml 的新文件中来创建部署,并将该文件保存到本地计算机。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aks-helloworld  
      namespace: hello-web-app-routing
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aks-helloworld
      template:
        metadata:
          labels:
            app: aks-helloworld
        spec:
          containers:
          - name: aks-helloworld
            image: mcr.azk8s.cn/azuredocs/aks-helloworld:v1
            ports:
            - containerPort: 80
            env:
            - name: TITLE
              value: "Welcome to Azure Kubernetes Service (AKS)"
    
  3. 通过将以下 YAML 清单复制到名为 service.yaml 的新文件中来创建服务,并将该文件保存到本地计算机。

    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: aks-helloworld
    

创建 Ingress 对象

应用程序路由附加产品在名为 webapprouting.kubernetes.azure.com 的群集上创建一个 Ingress 类。 使用此类创建 Ingress 对象时,会激活附加产品。

  1. 将以下 YAML 清单复制到名为 ingress.yaml 的新文件中,并将该文件保存到本地计算机。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <Hostname>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. 使用 kubectl apply 命令创建群集资源。

    kubectl apply -f deployment.yaml -n hello-web-app-routing
    

    以下示例输出显示了创建的资源:

    deployment.apps/aks-helloworld created
    
    kubectl apply -f service.yaml -n hello-web-app-routing
    

    以下示例输出显示了创建的资源:

    service/aks-helloworld created
    
    kubectl apply -f ingress.yaml -n hello-web-app-routing
    

    以下示例输出显示了创建的资源:

    ingress.networking.k8s.io/aks-helloworld created
    

验证是否已创建托管 Ingress

可以使用 kubectl get ingress 命令验证是否已创建托管 Ingress。

kubectl get ingress -n hello-web-app-routing

以下示例输出显示了创建的托管 Ingress:

NAME             CLASS                                HOSTS               ADDRESS       PORTS     AGE
aks-helloworld   webapprouting.kubernetes.azure.com   myapp.contoso.com   20.51.92.19   80, 443   4m

删除应用程序路由加载项

若要删除关联的命名空间,请使用 kubectl delete namespace 命令。

kubectl delete namespace hello-web-app-routing

若要从群集中删除应用程序路由附加产品,请使用 az aks approuting disable 命令。

az aks approuting disable --name myAKSCluster --resource-group myResourceGroup 

当应用程序路由加载项被禁用时,某些 Kubernetes 资源可能会保留在群集中。 这些资源包括 configMap 和 secret,并且是在 app-routing-system 命名空间中创建的。 如果需要,可以删除这些资源。

后续步骤