部署入口控制器

适用于:Azure 本地 22H2 上的 AKS、Windows Server 上的 AKS

入口控制器是一项 Kubernetes 资源,可支持对 Kubernetes 群集中的服务进行外部访问。 操作员可通过入口向外部网络请求(通常为 HTTP 或 HTTPS)公开服务。 可以通过创建一组规则来配置访问权限,这些规则定义访问特定服务的入站连接。

入口控制器是为 Kubernetes 服务提供可配置流量路由的软件。 Kubernetes 入口资源用于配置各个 Kubernetes 服务的入口规则和路由。 借助入口控制器和入口规则,可以使用单个 IP 地址将流量路由到 Kubernetes 群集中的多个服务。

在环境中部署控制器后,可以创建和部署入口清单。 目前,使用 NGINX 入口控制器在 AKS Arc 中使用入口。 有关如何安装、配置和使用 NGINX 入口控制器的信息,请参阅 安装清单

入口与 NodePort 和 LoadBalancer 有一种独特的区别,它以成本相对较低的方式改进了到群集的流量路由。 定义 NodePort 服务会创建许多随机端口,并定义 LoadBalancer 服务会增加云资源的成本比你可能想要的要多。 定义入口控制器时,会将流量传递规则合并为作为群集的一部分运行的单个资源。 使用 NodePort 和 LoadBalancer 可以通过在服务类型中指定相应值来公开服务,而入口是用于服务的独立资源。 入口与服务分开定义、创建和销毁。

可以根据用例需要以不同方式部署入口。 入口资源用于更新入口控制器中的配置,以确定其工作方式。

使用入口,通过外部可访问的 URL 来公开服务

以下 YAML 清单中显示了使用入口的示例。 元数据 ingress.class (在此示例中), ingress-nginx此设置允许 NGINX 入口控制器知道监视和更新所需的内容:

apiVersion: networking.k8s.io/v1  
kind: Ingress  
metadata: 
      name: hello-world
      annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /
        kubernetes.io/ingress.class: "nginx"
  spec:  
      rules:
       - host: test.example.com
          http:
             paths: 
             - path: /hello-world
pathType: Prefix
backend:
    service: 
         name: hello-world 
                    port:  
                     number: 8080

spec 部分提供有关配置的内容的信息。 在此示例中,定义规则(或规则集)并包含以下项:

  • 应用规则的主机。
  • 流量是 HTTP 还是 HTTPS。
  • 受监视的路径。
  • 发送流量的内部服务和端口。

使用入口对流量进行负载均衡

在以下示例中,另一个路径添加到清单中,该清单允许在应用程序的不同后端之间进行负载均衡。 在此示例中,操作员可以拆分流量,并按所述路径将流量发送到不同的服务终结点和部署。 每个路径后面是一个部署和服务,这对接收更多流量的终结点很有帮助:

apiVersion: networking.k8s.io/v1  
kind: Ingress  
metadata: 
      name: hello-world-and-earth
      annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /
  spec:  
      rules:
       - host: test.example.com
          http:
             paths: 
             - path: /hello-world
pathType: Prefix
backend:
    service: 
         name: hello-world 
                    port:  
                     number: 8080
               - path: /hello-earth
pathType: Prefix
backend:
    service: 
         name: hello-earth 
                    port:  
                     number: 8080

使用入口将 HTTP 流量路由到同一 IP 地址上的多个主机名

可以为每个主机使用不同的入口资源,这样便可以使用多个主机名来控制流量。 若要使用不同的入口资源,请将多个主机名指向用于 LoadBalancer 服务的同一公共 IP 地址。 在下面的清单文件中,添加了 hello-world 的一个生产版本。 使用了主机名 prod.example.com,并将流量指向新的服务 hello-world-prod。 流量通过负载均衡器 IP 地址传入,并根据主机名和提供的路径路由:

apiVersion: networking.k8s.io/v1  
kind: Ingress  
metadata: 
      name: hello-world-prod
      annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /
  spec:  
      rules:
       - host: test.example.com
          http:
             paths: 
             - path: /hello-world
pathType: Prefix
backend:
    service: 
         name: hello-world-test 
                    port:  
                     number: 8080
       - host: prod.example.com
          http:
              paths:
               - path: /hello-world
pathType: Prefix
backend:
    service: 
         name: hello-world-prod 
                    port:  
                     number: 8080

后续步骤

有关详细信息,请参阅以下链接: