service 的弊端
一个服务一个端口映射,要管理端口避免冲突
nodeport 实现的是四层转发
没有统一的入口
Igress
简单理解为在service 基础上加入了一个负载代理。
实现原理
ingress是一个负载代理规则,它是通过ingress-controller 实现的。它通过统一的端口(80/443)可实现4/7层负载,为每个服务创建一个域名,每个node 节点部署一个ingress代理,实际与pod 通讯还是会经过service。
它的底层实际就是nginx或者其他的负载软件,每一个服务做代理的过程即使为这个服务的pod 创建一个upstream和proxy.
Igress 的创建
先创建ingress 控制器,再创建ingress 规则
创建ingress 控制器
通过编写yaml 文件或者命令方式,在yaml 中可以定义对外提供的统一端口。
kubectl apply -f ingress.yaml
kubectl get pods -n ingress-nginx #查看创建的ingress,必须在它自己的命名空间ingress-nginx 中查看
创建Ingress 规则
vi ingress.yaml
dns解析
把任意一个 ingress controler所在的pod 的ip 地址解析为定义的应用程序域名,访问域名后请求到底controller,控制器通过规则和域名找到应用程序实现负载转发。