k8s之对外服务ingress

一、service

1、service作用

①集群内部:不断跟踪pod的变化,不断更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制(endpoint存储最终对外提供服务的IP地址和端口)

②集群外部:类似负载均衡器,不涉及转发url(不涉及http和https),把流量(IP地址+端口)转发到pod中

2service类型

(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.yamlk8s之对外服务ingress_第1张图片

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,比较是个大并发的生产环境,性能最好k8s之对外服务ingress_第2张图片

(3)deployment+NodePort模式:七层+四层代理

k8s之对外服务ingress_第3张图片

k8s之对外服务ingress_第4张图片

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

k8s之对外服务ingress_第5张图片

nginx ingress contoller以pod方式运行在集群中

k8s之对外服务ingress_第6张图片k8s之对外服务ingress_第7张图片k8s之对外服务ingress_第8张图片

2、设置节点标签3、每个节点上传控制器镜像并解压

k8s之对外服务ingress_第9张图片

4、在controller控制器创建的pod的节点上查看端口

netstat -antp|grep nginx

8181端口

nginx-controller默认配置的一个bachend,反向代理的端口,所有请求中,只要是不符合ingress配置的请求会转发到8181,相当于一个error页面

5、、创建pvc、pod、service、ingress

k8s之对外服务ingress_第10张图片

k8s之对外服务ingress_第11张图片k8s之对外服务ingress_第12张图片k8s之对外服务ingress_第13张图片k8s之对外服务ingress_第14张图片

kubectl apply -f service-nginx.yamlk8s之对外服务ingress_第15张图片

6、域名映射

k8s之对外服务ingress_第16张图片

7、测试访问

k8s之对外服务ingress_第17张图片

k8s之对外服务ingress_第18张图片

8、测试删除一个pod查看endpoind是否发生变化

k8s之对外服务ingress_第19张图片

结论:endpointIP地址变化

ingress之deployment+NodePort模式暴露服务实验

1、下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

k8s之对外服务ingress_第20张图片

nginx ingress contoller以pod方式运行在集群中

k8s之对外服务ingress_第21张图片

k8s之对外服务ingress_第22张图片

2、下载service-nodeport控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

k8s之对外服务ingress_第23张图片k8s之对外服务ingress_第24张图片

nodeport会在每个节点上创建一个端口

3、创建pv、pod、service、ingressk8s之对外服务ingress_第25张图片k8s之对外服务ingress_第26张图片k8s之对外服务ingress_第27张图片k8s之对外服务ingress_第28张图片k8s之对外服务ingress_第29张图片4、域名映射

k8s之对外服务ingress_第30张图片

5、访问测试

k8s之对外服务ingress_第31张图片

基于deployment+NodePort模式的一个ingress可以访问多个主机实验

1、下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yamlk8s之对外服务ingress_第32张图片

nginx ingress contoller以pod方式运行在集群中

k8s之对外服务ingress_第33张图片k8s之对外服务ingress_第34张图片

2、下载service-nodeport控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

k8s之对外服务ingress_第35张图片

3、创建多个pod、service

pod1、service1

k8s之对外服务ingress_第36张图片k8s之对外服务ingress_第37张图片

pod2、service2

k8s之对外服务ingress_第38张图片k8s之对外服务ingress_第39张图片4、创建多个ingress

k8s之对外服务ingress_第40张图片k8s之对外服务ingress_第41张图片5、主机映射

k8s之对外服务ingress_第42张图片

k8s之对外服务ingress_第43张图片

k8s之对外服务ingress_第44张图片

k8s之对外服务ingress_第45张图片

基于DaemonSet+hostnetwork+nodeSelector模式的一个ingress可以访问多个主机实验

1、下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

k8s之对外服务ingress_第46张图片

nginx ingress contoller以pod方式运行在集群中k8s之对外服务ingress_第47张图片k8s之对外服务ingress_第48张图片k8s之对外服务ingress_第49张图片

2、设置节点标签

3、每个节点上传控制器镜像并解压

k8s之对外服务ingress_第50张图片

4、在controller控制器创建的pod的节点上查看端口

netstat -antp|grep nginx

k8s之对外服务ingress_第51张图片

8181端口

nginx-controller默认配置的一个bachend,反向代理的端口,所有请求中,只要是不符合ingress配置的请求会转发到8181,相当于一个error页面

5、创建多个pod、service

pod1、service1

k8s之对外服务ingress_第52张图片k8s之对外服务ingress_第53张图片k8s之对外服务ingress_第54张图片

pod2、service2

k8s之对外服务ingress_第55张图片k8s之对外服务ingress_第56张图片6、创建多个ingress

k8s之对外服务ingress_第57张图片

k8s之对外服务ingress_第58张图片

7、主机映射

k8s之对外服务ingress_第59张图片

8、测试

k8s之对外服务ingress_第60张图片

你可能感兴趣的:(kubernetes,容器,云原生)