目录
- 0. Ingress 解决了什么问题
- 1. Ingress Controller
- 2. 指定 Ingress Class 使用多个 Ingress Controller
- 3. 使用 YAML 描述 Ingress / Ingress Class
- 3.1 Ingress
- 3.2 Ingress Class
- 4. 使用 Ingress / Ingress Class
- 5. 使用 Ingress Controller
Service 比较适合代理集群内部的服务 。如果想要把服务暴露到集群外部 , 就只能使用 NodePort 或者 LoadBalancer 这两种方式,而它们都缺乏足够的灵活性,难以管控 。
Kubernetes 为了解决这个问题 , 引入了一个新的 API 对象做七层负载均衡 。除了七层负载均衡,这个对象还承担了更多的职责——作为流量的总入口,管理进出集群的数据(南北向流量),让外部用户能够安全便捷地访问集群内部的服务 。这个 API 对象被命名为 Ingress,意思就是集群内外边界上的入口 。

文章插图
*图示是一个将所有流量都发送到同一 Service 的简单 Ingress 示例 图片来源
1. Ingress ControllerService 本身是没有服务能力的 , 它只是一些
iptables
规则,真正配置、应用这些规则的实际上是节点里的 kube-proxy 组件 。如果没有 kube-proxy,Service 定义得再完善也没有用 。同样的 , Ingress 也只是一些 HTTP 路由规则的集合 , 相当于一份静态的描述文件,真正要把这些规则在集群里实施运行,还需要有另外一个东西,这就是 Ingress Controller , 它的作用就相当于 Service 的 kube-proxy,能够读取、应用 Ingress 规则,处理、调度流量 。
为了让 Ingress 资源工作 , 集群必须有一个正在运行的 Ingress 控制器 。Ingress 控制器不是随集群自动启动的,用户可以选择最适合集群的 Ingress 控制器实现 。Kubernetes 目前支持和维护 AWS、 GCE 和 Nginx Ingress 控制器 。还有很多控制器可供选择 。
从 Ingress Controller 的描述上我们也可以看到,HTTP 层面的流量管理、安全控制等功能其实就是经典的反向代理,而 Nginx 则是其中稳定性最好、性能最高的产品 , 所以它也理所当然成为了 Kubernetes 里应用得最广泛的 Ingress Controller 。不过,因为 Nginx 是开源的,谁都可以基于源码做二次开发,所以它又有很多的变种 。这里我们选取 Nginx 对 Ingress Controller 的开发实现 NGINX Ingress Controller 。

文章插图
*图示展示了 Ingress Controller 在集群中的位置 图片来源
2. 指定 Ingress Class 使用多个 Ingress ControllerIngressClass Docs
起初,Kubernetes 集群内只有一个 Ingress Controller,这样的用法会带来一些问题:
- 由于某些原因 , 项目组需要引入不同的 Ingress Controller , 但 Kubernetes 不允许这样做
- Ingress 规则太多,都交给一个 Ingress Controller 处理会让它不堪重负
- 多个 Ingress 对象没有很好的逻辑分组方式,管理和维护成本很高
- 集群里有不同的租户,他们对 Ingress 的需求差异很大甚至有冲突,无法部署在同一个 Ingress Controller 上
Kubernetes 用户可以转向管理 Ingress Class , 用它来定义不同的业务逻辑分组,简化 Ingress 规则的复杂度 。比如说,我们可以用 Class A 处理博客流量、Class B 处理短视频流量、Class C 处理购物流量 。这些 Ingress 和 Ingress Controller 彼此独立 , 不会发生冲突 。
3. 使用 YAML 描述 Ingress / Ingress Class首先用命令
kubectl api-resources
查看它们的基本信息:NAMESHORTNAMESAPIVERSIONNAMESPACEDKINDingressclassesnetworking.k8s.io/v1falseIngressClassingressesingnetworking.k8s.io/v1trueIngress
*Ingress Controller 是一个处理流量的应用程序,稍后可以使用 Deployment 和 DaemonSet 来部署3.1 IngressIngress 可以使用
kubectl create
来创建样板文件 , 它需要用两个附加参数:
推荐阅读
- 弹壳特攻队推图选择哪些技能
- 苹果13promax详细参数_参数配置表
- 如何调整屏幕分辨率(分辨率1920x1080怎么设置)
- 计算机分辨率调整(调整分辨率不能满屏)
- 我的世界里怎么骑马(我的世界怎样骑马)
- 我的世界怎么骑马(我的世界马鞍的做法)
- 原神兰伊舍猜谜语答案分别是什么
- 齐博X1-栏目的调用3
- 安卓平板apk文件怎么打开(平板apk用什么打开)
- .net lambda表达式合并