Kubernetes-Ingress、Ingress Controller、Ingress Class

概念

1.Ingress 是对K8S集群中服务的外部访问进行管理的 API 对象。Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。 2.Ingress Controller 通常负责通过负载均衡器来实现 Ingress。 3.必须拥有一个 Ingress Controller 才能满足 Ingress 的要求。 仅创建 Ingress 资源本身没有任何效果。

Ingress

Ingress和Ingress Controller是两回事

    ingress定义路由规则; ingress用于监听pod的变化,注入ingress controller。

当一个负载均衡器Pod要代理多个服务的时候:

后端服务Pod要通过Service分类(Service此时只起到分类的作用),ingress基于service的分类识别出有几个Pod和Pod IP地址,并且把Pod的IP地址返回注入到7层负载均衡器的配置文件内,负载均衡器重载配置文件。(Treafik、Envory会自动重载配置文件)

Ingress Controller

为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。 与作为 kube-controller-manager 可执行文件的一部分运行的其他类型的控制器不同, Ingress Controller不是随集群自动启动的。Ingress Controller通常是一组拥有7层代理能力服务的Pod。

Ingress Class

在 Kubernetes 1.18 版本引入 IngressClass 资源和 ingressClassName 字段。此前Ingress配置中是通过 Ingress 中的一个 kubernetes.io/ingress.class 注解来指定Ingress Class的。

Ingress、Ingress Class、Ingress Controller三者的关系

我们通过yaml文件的内容,观察三者的关联关系。

    Ingress Controller,会指定要关联的ingress class,和在k8s中注册自己controller的信息; Ingress Class,会指定要关联的controller的信息; Ingress,会指定要关联的Ingress Class的信息; 最终,Ingress Class作为“桥梁”,将Ingress和Ingress Controller关联起来。

参考文档

经验分享 程序员 微信小程序 职场和发展