部署入口控制器
适用于: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
后续步骤
有关详细信息,请参阅以下链接: