news 2026/6/10 9:52:57

Kubernetes Ingress:管理集群外部访问的入口网关

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kubernetes Ingress:管理集群外部访问的入口网关

在k8s之服务Service章节,我们详细的介绍了Service的组成以及相关的原理。Service可以将自身的服务暴露出去,给集群内部服务或者给外部服务去使用,或者将外部服务分装为一个service,供给集群内部服务使用。而今天介绍的ingress其实和service很类似,他都是将内部的服务暴露出来,给外界(包括集群内或集群外)去使用。只不过它两者工作的网络层级不同罢了。

1. Ingress引入

上一章节介绍的LoadBalancer已经能够将k8s内部服务暴露到公网上去了,似乎就已经可以了,为什么还需要ingress呢?因为服务最终无非就是内部使用或者外部使用。内部使用有clusterIP或者nodeIP,外部使用LoadBalancer,为什么还需要一个ingress呢?从LoadBalancer的原理上我们可以看到,如果每使用一个LoadBalancer Service,就需要一个新的公网LB+IP或者域名,而这些都需要花钱(当然在商业的驱动下,引入ingress也并没有说能够降低成本,但是确实是带来了便捷)。

这时候,ingress就出来了。Igress 是 Kubernetes 中定义“反向代理规则”的一种 API 对象,借助Ingress Controller(例如Nginx Ingress Controller)来执行反向代理。

2. Ingress是什么

ingress一共由2个组件组成:

ingress资源对象:配置了相关http路由转发规则的合集。

配置 Host(域名) 、Path(路径) 与后端 Service 的映射关系。

它本身不处理流量,只是一个“配置清单”。

通常不直接指定 Controller 名称,而是通过 spec.ingressClassName 间接关联

spec:

ingressClassName: nginx-ingresclass # 指向IngressClass的名称

rules:

- host: example.com

http:

paths:

- path: /api

pathType: Prefix

backend:

service:

name: api-svc # 转发到哪个service

port:

number: 80 # service yaml文件中配置的port

ingressClass:ingres资源对象与ingress controller之间的桥梁。

apiVersion: networking.k8s.io/v1

kind: IngressClass

metadata:

name: nginx-ingresclass # Ingress资源定义中的spec.ingressClassName 一致

annotations:

ingressclass.kubernetes.io/is-default-class: "true" # 将这个 IngressClass 标记为集群中的“默认 IngressClass

spec:

controller: k8s.io/ingress-nginx # 与下面ingress controller的启动参数一致

ingress controller:一个运行在集群中的 Pod(或多个 Pod),本质是一个反向代理pod + 控制器(Controller)

反向代理:接收外部 HTTP/HTTPS 请求,根据规则转发到后端 Service 对应的 Pod。

控制器(Controller) :持续监听 Kubernetes API,自动发现 Ingress、Service、Endpoints 的变化,并动态更新自身的代理配置(如 Nginx 配置)。

启动时需声明自己自己的 controller​ 标识符(与 IngressClass 中的 spec.controller 匹配)。

# Ingress Controller Deployment 的启动参数示例

args:

- --controller-class=k8s.io/ingress-nginx # 必须与 IngressClass.spec.controller 一致

spec.ingressClassName

spec.controller

监听并实现

转发流量

Ingress

IngressClass

Ingress Controller

Service → Pod

当启动一个ingresss Controller的时候,会Watch所有的Ingress资源,然后对每个 Ingress,检查:

是否有 spec.ingressClassName

如果有,找到对应的 IngressClass

检查该 IngressClass.spec.controller​ 是否等于自己(k8s.io/ingress-nginx)

如果匹配则处理这个 Ingress(生成相关的反向代理规则),否则则忽略

Ingress能够提供从集群外部到集群内服务的http和https路由,是一组路由规则的集合。以下是一个ingress的请求例子。如果大家知道nginx的话,会发现ingress的原理是不是和nginx很类似。本质上来说ingress controller​[注] 就是一个反向代理的服务(运行在pod上,基于Nginx、Traefik或者其他组件),然后基于路由规则,扮演着集群内部的“智能路由”角色。

互联网的网络流量,通过云产商的LB(或者Nodeport)转发到Ingress Controller上,然后Ingress Controller则会根据Ingress的路由定义,将又转发到Service,然后Service再转发到了pod中的服务。

PlantUML Diagram

Ingress 本身只是一个规则配置(一个资源对象),必须配合 Ingress Controller(如 Nginx、Traefik)才能工作。LoadBalancer 通常用于暴露 Ingress Controller 本身(通过 Service of type=LoadBalancer),而 Ingress Controller 再根据 Ingress 规则将流量分发到不同的内部 Service。

3. Ingress匹配规则

Ingress支持很多匹配规则,以下是相关常用的匹配规则:

匹配维度 规则类型 说明 示例 注意事项

Host(域名)

精确匹配 完全匹配指定域名 ​host: example.com​ → 仅匹配 example.com 区分大小写;必须是合法 DNS 名

单级通配符 仅支持前缀 *.,匹配任意一级子域名 ​host: "*.example.com"​ → 匹配 foo.example.com​,不匹配 a.b.example.com 不支持 example.* 或多级通配

省略 host 匹配所有 Host(包括 IP 直接访问) 无 host 字段 → 任何域名都进入该 rule 生产环境慎用,易造成路由冲突

Path(路径)

​pathType: Prefix 前缀匹配(最常用) ​path: /api​ → 匹配 /api​、/api/v1​、/api/ 不匹配 /apis;路径区分大小写

​pathType: Exact 完全相等匹配 ​path: /api​ → 仅匹配 /api​,不匹配 /api/ 路径末尾 / 视为不同路径

高级匹配 正则表达式(需 annotation) 部分 Controller(如 Nginx)支持通过 annotation 启用正则 ​nginx.ingress.kubernetes.io/use-regex: "true"​ + path: /v[0-9]+ 依赖具体实现,非标准功能

匹配优先级

Host 优先 先匹配 Host,再在匹配的 Host 下匹配 Path ​shop.example.com/api​ 不会匹配 api.example.com/api Host 不匹配则整条 rule 跳过

Path 最长前缀优先 在同一 Host 下,更长的路径优先匹配 ​/api/v1​ 比 /api 优先 避免路径重叠导致意外路由

4. 总结

Ingress 是 Kubernetes 中管理外部访问集群服务的核心机制,主要用于 HTTP/HTTPS 流量的七层路由。它本身只是一个 API 资源,定义了基于主机名(host)和路径(path) 的路由规则,将请求转发到后端 Service。但 Ingress 要真正生效,必须部署对应的 Ingress Controller(如 Nginx、Traefik、ALB 等)。Controller 会监听 Ingress 资源变化,动态生成反向代理配置(如 Nginx 配置),并自动重载以应用新规则。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 19:23:14

【普中实验板】基于51单片机的电子秒表数码管显示

【普中】基于51单片机的电子秒表数码管显示 ( proteus仿真程序设计报告讲解视频) 仿真图proteus8.16(有低版本) 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:P12 1.主要功能: 基于51单片机AT89C51/52&am…

作者头像 李华
网站建设 2026/6/10 12:24:12

Blythe官方专访最小改娃师任晴美:天赋非凡,未来可期!

近日,拥有变形金刚、小马宝莉、小猪佩奇等多个知名品牌的美国玩具公司孩之宝旗下的品牌Blythe小布娃娃,专访了在其举办的“东方绮梦”国风茶话会上荣获“改娃区”比赛一等奖的最小改娃师任晴美。任晴美在比赛上以重塑骨相的绝美国风妆造,惊艳…

作者头像 李华
网站建设 2026/6/10 8:33:11

直接给各位上点轨迹跟踪的干货。这次咱们玩个能自定义参考轨迹的二自由度MPC控制器,重点说说怎么让这铁疙瘩在不同路况下都跟得稳当。先整杯咖啡,咱们边调参边唠

可自定义期望轨迹的二自由动力学 MPC 跟踪控制 可以外部导入轨迹 知道x y s 即纵向位置 横向位置 位移量即可 请注意 要跟踪不同的轨迹,同一参数可能效果不一样 因此需要自己调参数保证控制效果最佳: Q矩阵增大可以保证侧向位置跟踪效果变好&#xff0c…

作者头像 李华
网站建设 2026/6/10 10:58:28

33、利用TiMidity搭建卡拉OK系统全攻略

利用TiMidity搭建卡拉OK系统全攻略 1. TiMidity基础介绍 TiMidity本质上是一款MIDI播放器,并非专门的卡拉OK播放器,不过它具备一定的可扩展性,经过配置后也能用于卡拉OK场景。默认情况下,它仅播放MIDI音乐并打印歌词。例如,运行以下命令: $timidity ../54154.mid执行…

作者头像 李华
网站建设 2026/6/9 19:40:20

骨髓来源抑制细胞(MDSC)

骨髓来源抑制细胞(Myeloid-derived suppressor cells, MDSC)分为粒形/多核形MDSCs(G-MDSC或PMN-MDSC)与MNP样MDSCs(M-MDSC)。单核吞噬细胞(Mononuclear phagocytes (MNPs))包括单核细胞、巨噬细胞和树突状细…

作者头像 李华