周顺的技术博客

  • 一 Ingress 控制器(网关)
  • 概念介绍
  • 首页
  • 榜上有名
  • 文章归档
  • 读者排行
  • 豆瓣书影
  • 友情链接
  • DevOps (4)
  • Docker (4)
  • k8s (9)
  • linux (11)
  • Mysql (9)
  • Python (2)
  • Redis (1)
  • Shell (6)
  • 主题 (0)
  • 未分类 (0)

Ingress工具

  • xiaoteng
  • 2026-03-24
  • 0

一 Ingress 控制器(网关)

概念介绍

官方手册:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/

没有Ingress(入口)之前,pod对集群外提供访问,只能通过nodeport或者loadbalancer方式,也就是端口映射方式,但是这个缺点很明显,如果遇到多个服务要监听80端口,很明显无论哪种类型都无法实现,其他服务就无法使用了。如果非要实现,就得在k8s集群外部部署一个lb设备,来代理到对应的service资源

为了解决这个问题Ingress控制器资源出现了,它允许外部流量进入集群,并提供路由规则来决定如何将该流量路由到不同的服务。作用就是实现七层的协议转发,通过域名、路径的匹配转发,提供k8s集群的访问入口

内部的微服务,用Ingress暴露给外部访问者是一个整体

Ingress真正的用武之地在于微服务的场景,k8s集群内的一个微服务对应一个service,多个service被Ingress组织起来,统一对外暴露,外部看起来是一个整体,请求到了Ingress后根据匹配不同的的url路径分发到不同的service来处理

Ingress是用来做流量发转的一种机制,请求抵达Ingress后,Ingress会匹配url地址,将不同的url地址转发给不同的service处理

注意:提到Ingress是干嘛的,很多人都说是暴露服务的,如果仅仅只是暴露服务,直接用service的nodeport类型和loadbanlancer类型就可以了,完全没必要诞生Ingress出来,引入Ingress价值到底是什么?

其实Ingress真正的意义就在于内部构建是微服务架构,而利用Ingress内部的微服务架构构建成一个单体,外部访问Ingress就可以了

流程是这样的:

  • 负载均衡层(自己构建或云厂商),代理多个物理节点的ip+端口,这个端口是Ingress的svc的nodeport
  • Ingress层:Ingress的service->Ingress的endpoints->Ingress的pod(内部集成nginx,不同的地址转发到不同的service的clusterip+port)

nginx也是可以实现七层代理转发,为什么还要有Ingress?

  • 毕竟你要注意你的应用,以pod形式在k8s环境内运行,外部的nginx无法动态发现k8s创建的资源

Ingress和svc的区别

  • svc只能实现四层的代理,而Ingress实现了七层的代理

总结:

Ingress就是一种转发规则,把用户的请求,通过Ingress配置好的规则转发到后端的Pod服务。类似Nginx中的location标签

注意:Ingress默认只是一套转发规则,需要用户自定义(类似产品说明书),本身并没有实现请求转发等操作。如果想对Ingress规则具体实现转发等操作,需要使用K8S中的Ingress Controller

Ingress是一个资源类型,用于实现用域名的方式访问K8S集群内部的应用。类似微服务的网关功能或nginx,提供请求路由、流量控制、负载均衡、映射域名等功能

Kubernetes(K8s)的Ingress是一种API对象,它提供了HTTP和HTTPS路由到集群中服务的机制。Ingress可以配置负载均衡、SSL终止、名称虚拟主机等,并且支持基于名称、路径、主机名和URL前缀的请求路由

Ingress通常与Service一起使用,以将外部流量路由到集群中的服务。Ingress控制器是实现Ingress规则的软件,它可以管理Ingress资源并处理传入的请求

作用:

  • Ingress在K8s集群中扮演着重要的角色,作为整个集群流量的入口。它的主要功能是暴露服务,将外部流量路由到内部集群服务。Ingress资源对象可以实现暴露多个service,即当外部客户端向一个ingress发送连接请求时,ingress会根据请求的主机和路径来决定将请求转发给对应的service
  • 然而,在一个集群中,可能需要使用不同的 Ingress 控制器来满足不同的需求,而每个控制器都需要使用不同的配置和规则。这就是 IngressClass 的作用。此外,Ingress的简写为ing,想要使用ingress,首先必须先创建 ingress-controller ,即 ingress控制器 ,ingress控制器有很多种,目前k8s官方的ingress控制器是 ingress-nginx-controller ,由此可见ingress其实也是使用了nginx的7层反向代理来实现的
  • 因此,要使用Ingress,不仅需要安装相应的Ingress Controller,还需要了解和配置IngressClass以适应不同的需求。同时,由于K8S集群拥有强大的副本控制能力,Pod随时可能从一个节点上被驱逐到另一个节点上,或者直接销毁再来一个新的,这也使得Ingress的使用变得更为复杂和必要

Ingress-Controller并不是k8s自带的组件,实际上Ingress-Controller只是一个统称,用户可以选择不同的Ingress-Controller实现

  1. nginx imagess
  2. treafik
  3. 网络服务 istio

目前由k8s维护的Ingress-Controller只有google晕的gce和ingress-nginx两个,我们当时在百度使用最多的是ingress-nginx,它是基于nginx的ingress控制

Ingress Controller可以为外网用户访问K8S集群内部pod提供代理服务

  • 提供全局访问代理
  • 访问流程
  • 用户--> ingress controller(支持http协议、https协议)-->service-->pod
© 2026 周顺的技术博客
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}