ingress解析
1.什么是ingress
了解ingress之前,要知道为什么会用到ingress:(什么是pod)
Pod是的生命周期相对短暂,它门会被频繁创建杀死, 每个pod都由自己的ip,这些IP也随着pod的生命周期发生改变。这样就引发了一个问题:如果一些Pods (例如后台程序)提供了一些功能供其它的Pod(例如前台程序)使用,在kubernete集群中实现让这些前台能够持续的追踪到这些后台的,就是通过service。Service 是一个定义了一组pod的策略的抽象,这些被服务标记的Pod都是一般通过label Selector决定的,即service会维护一组pod的映射关系,无论pod的ip是多少,pod的数量是多少,相同label Selector的pod会被绑定到同一个service上。
Ingress 是反向代理规则,用来规定 HTTP/S 请求应该被转发到哪个 Service 上,比如根据请求中不同的 host 和 path 路径让请求落到不同的 Service 上。总的来说Ingress就是为进入集群的请求提供路由规则的集合。
HTTP(S)负载均衡器-ingress
Ingress是kubernetes API的标准资源类型之一,其本质就是一组基于DNS名称(host)或URL路径把请求转发至指定的Service资源的规则,用于将集群外的请求流量转发至集群内部完成服务发布。
Ingress控制器(Ingress Controller)可以由任何具有反向代理(HTTP/HTTPS)功能的服务程序实现,如Nginx、Envoy、HAProxy、Vulcand和Traefik等。Ingress控制器本身也作为Pod对象与被代理的运行为Pod资源的应用运行于同一网络中。
可以参考反向代理服务器(负载均衡)来理解
我们访问url到反向代理,反向代理根据收到到url来选择换到哪个服务器,具体怎么选择与ingress的配置有关,下面就写一下ingress的配置。
这里需要解释一下这个配置文件,annotation:下面写的是nginx的相关配置,
apiVersion: extensions/v1beta1 #目前kubernetes只有这一种配置ingress的,只要这样写即可;
kind: Ingress #表明这个配置是ingress配置;
metadata:
annotations: #nginx的相关配置
nginx.ingress.kubernetes.io/configuration-snippet: “” #这里主要配置url的跳转,下面会提到这个问题
nginx.ingress.kubernetes.io/proxy-body-size: 10m #与代理相关的配置
nginx.ingress.kubernetes.io/ssl-redirect: false #看到redirect就知道与重定向有关
nginx.ingress.kubernetes.io/use-regex: true
name: aaaaaaaaaaaaa
namespace: beta
spec:
rules:
- host: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx #host是基础url
http:
paths: - backend:
serviceName: nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn #实际访问的服务器
servicePort: 8080
path: pppppppppppppppppppp #在基础url的基础上加上这个path,这里就变成了实际访问 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这个url时,才会用到这个ingress配置
如果在path里写了内容的话,在实际访问服务器时,会加上path中的路径一起访问
以这里为例,实际访问的路径就是:nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 服务器的 pppppppppppppppppppp, 所以如果不想要这样访问数据的话,就要配置rewrite,在这里配置nginx.ingress.kubernetes.io/configuration-snippet: “” ,在引号里配置相关参数,”rewrite 正则匹配路径 实际服务器访问的url“
如下图:
ingress配置不只是这一种,具体的可以看下面的连接:
https://juejin.im/post/6859635679421431815
https://www.kubernetes.org.cn/ingress