一、service
1、service作用
①集群内部:不断跟踪pod的变化,不断更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制(endpoint存储最终对外提供服务的IP地址和端口)
②集群外部:类似负载均衡器,不涉及转发url(不涉及http和https),把流量(IP地址+端口)转发到pod中
2、service类型
(1)nodeport:容器端口和service端口做映射,设定nodeport后,每个节点都会有一个端口被打开(30000-32767),通过IP+端口实现负载均衡
(2)loadbalance:云平台上的service服务,由云平台提供负载均衡的IP地址
(3)extrenalname:基于域名映射
ingress基于域名进行映射,将url转发到service,再由service把请求转发到每一个pod
二、ingress
1、定义
ingress只要一个或少量的公网IP或者loadbalance,可以把多个http请求暴露到外网。ingress是七层反向代理,可以理解为service的service,是一组基于域名和URL路径把一个或多个请求转发到service的规则
七层代理ingress——四层代理service——pod
客户端发出请求,先由ingress七层代理转发到service,再由service四层代理转发到pod【面试】
2、ingress组成
(1)内部结构:ingress是一个api对象,通过yaml文件来进行配置。ingress的作用是定义请求如何转发到service的规则,相当于一个配置模板,ingress通过http和https暴露集群内部的service,给service提供一个外部的url、负载均衡、ssl/tls(https)功能,实现一个基于域名的负载均衡
(2)ingress-controller:由这个组件来具体实现反向代理和负载均衡,以及对ingress定义的规则进行解析,根据ingress配置来进行请求的转发。ingress-controller不是k8s自带的组件,只是一个统称,凡是能实现上述功能的都称为ingress-controller
1)实现ingress-controller功能的开源工具
①nginx ingress contoller
②traefik
2)ingress-controller资源定义项
①定义外部流量的路由规则
②定义服务的暴露方式、主机名、访问路径和其他选项
③负载均衡(由ingress-contrller实现)
3、下载nginx ingress contoller
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
nginx ingress contoller以pod方式运行在集群中
4、ingress暴露服务的方式
(1)deployment+LoadBalancer模式:把ingress部署在公有云,在ingress配置文件里有一个type,type:LoadBalancer。公有云平台会为loadbalancer的service自动创建一个负载均衡器,且会绑定一个公网地址,通过域名指向这个公网地址可以实现集群对外暴露
(2)DaemonSet+hostnetwork+nodeSelector模式:七层代理。DaemonSet每个节点都会创建一个pod,hostnetwork表示pod共享节点主机的网络命名空间,容器内直接使用节点主机的IP地址+端口,pod中的容器可以直接访问主机上的网络资源;nodeSelector根据标签选择nginx ingress contoller部署的节点
缺点:直接利用节点主机的网络和端口,一个node只能部署一个ingress controller pod,比较是个大并发的生产环境,性能最好
(3)deployment+NodePort模式:七层+四层代理
ingress标签匹配ingress-nodeport标签,ingress-nodeport匹配service标签,service匹配pod标签
ingress之DaemonSet+hostnetwork+nodeSelector模式暴露服务实验
1、下载nginx ingress contoller控制器
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
nginx ingress contoller以pod方式运行在集群中
2、设置节点标签3、每个节点上传控制器镜像并解压
4、在controller控制器创建的pod的节点上查看端口
netstat -antp|grep nginx
8181端口 | nginx-controller默认配置的一个bachend,反向代理的端口,所有请求中,只要是不符合ingress配置的请求会转发到8181,相当于一个error页面 |
5、、创建pvc、pod、service、ingress
kubectl apply -f service-nginx.yaml
6、域名映射
7、测试访问
8、测试删除一个pod查看endpoind是否发生变化
结论:endpointIP地址变化
ingress之deployment+NodePort模式暴露服务实验
1、下载nginx ingress contoller控制器
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
nginx ingress contoller以pod方式运行在集群中
2、下载service-nodeport控制器
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
nodeport会在每个节点上创建一个端口
3、创建pv、pod、service、ingress4、域名映射
5、访问测试
基于deployment+NodePort模式的一个ingress可以访问多个主机实验
1、下载nginx ingress contoller控制器
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
nginx ingress contoller以pod方式运行在集群中
2、下载service-nodeport控制器
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
3、创建多个pod、service
pod1、service1
pod2、service2
4、创建多个ingress
5、主机映射
基于DaemonSet+hostnetwork+nodeSelector模式的一个ingress可以访问多个主机实验
1、下载nginx ingress contoller控制器
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
nginx ingress contoller以pod方式运行在集群中
2、设置节点标签
3、每个节点上传控制器镜像并解压
4、在controller控制器创建的pod的节点上查看端口
netstat -antp|grep nginx
8181端口 | nginx-controller默认配置的一个bachend,反向代理的端口,所有请求中,只要是不符合ingress配置的请求会转发到8181,相当于一个error页面 |
5、创建多个pod、service
pod1、service1
pod2、service2
6、创建多个ingress
7、主机映射
8、测试