k8s-ingress篇
kubernetes 的服务暴漏机制:(三个网段:pod 、 node、 service)篇
流量方向:
- 将集群内部pod类对象之间的网络通信称为东西流向
- 将集群外部应用和集群内部中对象之间的网络通信称为南北流向。(南入:ingress ,北出:egress)
场景:基于四层网络,集群外部流量访问集群内部中,从而实现外部客户的正常访问;
- Host方式:通过使用node节点的hostNetwork与hostPort及配套的port映射,间接的方式实现service的效果。
- Service方式:nodePort、externallp等sercice对象方式,借助于namespace、iptables、ipvs等四层反向代理实现流量转发。
四层的弊端:
- 基于sercie或host等多种方式实现集群外部访问内部网络通信都是基于四层协议进行调度,而且应用级别的健康检查功能很难实现。
- 对于外部流量接入,一般都是http/https协议,四层协议是无法实现的,尤其是涉及到各种ssl会话管理
- 不支持基于FQDN的方式进行访问应用
- 不支持基于URL等机制对HTTP/HTTPS协议进行高级路由、超时/重试、基于流量的灰度等高级流量治理机制
- service其本质上,是通过网络规则方式进行转发的,将集群内部的服务器暴漏到外部,这会造成对外过多的地址和端口暴漏
ingress(可以解决以上问题)
简单来说,是一个代理,可以根据配置转发请求到指定的服务上。
概念:ingress是一个k8s的资源类型,用于实现用域名的方式访问k8s内部应用,ingress为k8s集群中的服务提供了入口,可以提供负载均衡、ssl终止和基于名称的虚拟机主机。在生产中常用的ingress有Treafit、Nginx、HAProxy、Istio等。
ingress主要包括俩个组件:ingress API 、 ingress Controller
ingress API : 定义了抽象路由配置信息,只是原数据,需要由相应的控制器动态加载,将代理配置抽象成一个ingress对象,每个服务对应一个yaml配置文件,负责以k8s标准资源格式定义流量调度、路由等规则
ingress Controller : 反向代理程序,需要监视api server 上ingress资源的变动,并生成具体应用的自身的配置文件格式,将新加入的ingress转化成反向代理配置文件并动态加载使其生效,最终完成流量转发。ingress controller 非内置的控制器,需要额外配置,通常以pod形式运行与集群上。
Ingress : 集群流量的唯一入口,service的统一网关入口,基于nginx
安装Ingress :kubectl apply -f Ingress_install.ymal #使用国内yaml源
kubectl apply -f ingress-rule.yaml #建立ingress 和其规则
kubectl get ingress # 查看ingress规则
kubectl edit ingress ingress_name # 修改ingress规则
限流 次数1 :nginx.ingress.kubernetes.io/limit-rps : “1”