Kubernetes Ingress与Ingress Controller深度解析及实战部署指南

一、Ingress核心概念解析

1.1 什么是Ingress?

在Kubernetes集群中,Ingress作为服务对外暴露的统一接入点,承担着集群内外部流量管理的核心职责。与传统Service相比,Ingress具有以下特性:

  • 智能路由:基于HTTP/HTTPS协议实现七层负载均衡
  • 统一入口:通过单一公网IP暴露所有服务(如图示)
  • 规则驱动:支持基于Host、URL路径的精细化流量分发

1.2 Ingress资源限制

需特别注意:

  • 仅支持HTTP/HTTPS协议
  • 高级特性(如负载算法、会话保持)需在Controller层配置
  • 必须配合Ingress Controller才能生效

二、Ingress Controller工作原理

2.1 核心组件关系

10-Kubernetes Ingress与Ingress Controller深度解析及实战部署指南_nginx

  • Service:后端服务的逻辑抽象
  • Ingress:定义流量转发规则的声明式配置
  • Ingress Controller:实时解析规则并执行流量转发的控制平面

2.2 动态配置机制

Controller通过以下流程实现配置热更新:

  1. 监控APIServer获取Ingress变更
  2. 生成Nginx配置文件(如nginx.conf)
  3. 执行nginx -s reload重载配置
  4. 更新路由规则(无需中断现有连接)

Ingress基本概念

在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量。Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则,从而达到根据不同的规则设置访问集群内不同的Service后端Pod。

Ingress资源仅支持配置HTTP流量的规则,无法配置一些高级特性,例如负载均衡的算法、Sessions Affinity等,这些高级特性都需要在Ingress Controller中进行配置。

Ingress Controller工作原理

为了使得Ingress资源正常工作,集群中必须要有个Ingress Controller来解析Ingress的转发规则。Ingress Controller收到请求,匹配Ingress转发规则转发到后端Service,而Service转发到Pod,最终由Pod处理请求。Kubernetes中Service、Ingress与Ingress Controller有着以下关系:

Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。
Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service上。例如根据请求中不同的Host和URL路径,让请求落到不同的 Service上。
Ingress Controller是一个反向代理程序,负责解析Ingress的反向代理规则。如果Ingress有增删改的变动,Ingress Controller会及时更新自己相应的转发规则,当Ingress Controller收到请求后就会根据这些规则将请求转发到对应的Service。
  • 1.
  • 2.
  • 3.

Ingress 通过和APIServer交互获取Ingress 资源的变化,动态生成Load Balancer (列如Nginx)所需的配置文件(列如nginx.conf)然后重新加载Load Balancer (列如执行 nginx -s reload 重新加载Nginx)来生成新的路由转发规则。

通常,services和Pod只能通过集群内网络访问。 所有在边界路由器上的流量都被丢弃或转发到别处。 
从概念上讲,这可能看起来像:

    internet
        |
  ------------
  [ Services ]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

另外可以我们通过LoadBalancer负载均衡来提供外部流量的的访问,但这种模式对于实际生产来说,用起来不是很方便,而且用这种模式就意味着每个服务都需要有自己的的负载均衡器以及独立的公有IP。

我们这是用Ingress,因为Ingress只需要一个公网IP就能为K8s上所有的服务提供访问,Ingress工作在7层(HTTP),Ingress会根据请求的主机名以及路径来决定把请求转发到相应的服务,如下图所示:

10-Kubernetes Ingress与Ingress Controller深度解析及实战部署指南_Nginx_02

Ingress是允许入站连接到达集群服务的一组规则。即介于物理网络和群集svc之间的一组转发规则。 
其实就是实现L4 L7的负载均衡:
注意:这里的Ingress并非将外部流量通过Service来转发到服务pod上,而只是通过Service来找到对应的Endpoint来发现pod进行转发

   
    internet
        |
   [ Ingress ]   ---> [ Services ] ---> [ Endpoint ]
   --|-----|--                                 |
   [ Pod,pod,...... ]<-------------------------|
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

结构是,公网访问ingress资源 ingress -nginx-controller 解析 解析之后转到对应的 service 他的流量并不是直接转到service 他只是通过service 去发现 这个svc 关联的endpoint 后面的服务pod ,获取对应的podip 直接把流量转发到pod上面去的

组件介绍

Ingress基本概念

在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量。Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则,从而达到根据不同的规则设置访问集群内不同的Service所对应的后端Pod。

Nginx Ingress Controller工作原理

为了使得Nginx Ingress资源正常工作,集群中必须要有个Nginx Ingress Controller来解析Nginx Ingress的转发规则。Nginx Ingress Controller收到请求,匹配Nginx Ingress转发规则转发到后端Service所对应的Pod,由Pod处理请求。Kubernetes中Service、Nginx Ingress与Nginx Ingress Controller有着以下关系:

Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。

Nginx Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service所对应的Pod上。例如根据请求中不同的Host和URL路径,让请求落到不同Service所对应的Pod上。

Nginx Ingress Controller是Kubernetes集群中的一个组件,负责解析Nginx Ingress的反向代理规则。如果Nginx Ingress有增删改的变动,Nginx Ingress Controller会及时更新自己相应的转发规则,当Nginx Ingress Controller收到请求后就会根据这些规则将请求转发到对应Service的Pod上。

三、生产级Ingress Controller部署实战

3.1 环境准备

[root@master01 ingress-nginx]# kubectl create ns ingress-nginx
  • 1.
[root@master01 ingress-nginx]# cat ingress-nginx.yaml
  • 1.
apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress