k8s-ingress一

Comfigmap:存储数据

Date:

Key:value

挂载的方式,把配置信息传给容器

生产当中的yml文件很长:

有deployment

容器的探针

资源限制

Configmap

存储卷

Service

Ingress

K8s的对外服务,ingress

Service作用体现在两个方面:

  1. 集群内部:不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制
  2. 集群外部:类似于负载均衡器,把流量IP+端口,不涉及url(http https),把请求转发到pod当中

Service:

NodePort:容器端口---service端口----NodePort,设定了nodePort,每个节点都会有一个端口被打开,30000-32767

IP+端口:节点IP+30000-32767,实现负载均衡

Loadbalancer:云平台上的一种service机制,云平台一个负载均衡IP地址

Extrenal:域名映射

Ingress:基于域名进行映射,把url(http,https)请求转发到service,再由service把请求转发到每一个pod

Ingress只要一个或者少量的公网IP或者LB,可以把多个http请求暴露到网外,七层反向代理

Service的service。是一组基于域名和url路径,把一个或者多个请求转发到service的规则

先是七层代理---四层代理-----pod

Ingress        service      nginx

Ingress的组成:

Ingress是一个api对象,通过yaml文件来进行配置,ingress的作用是定义请求如何转发到service的规则,配置模板

Ingress通过http和https暴露集群内部service,给service提供一个外部的URL,负载均衡,ssl/tsl(https)的能力,实现了一个基于域名的负载均衡

Ingress-controller:具体的实现反向代理和负载均衡的程序,对ingress定义的规则进行解析,根据ingress的配置规则进行请求的转发,Ingress-controller不是k8s自带的组件功能,ingress-controller一个统称

例如nginx ingress controller,traefik都是Ingress-controller,他们都是开源的

Ingress资源的定义项:

  1. 定义外部流量的规则
  2. 定义服务的暴露方式,主机名,访问路径和其他的选择
  3. 负载均衡(ingress-controller)

ingress-controller的运行方式是pod方式运行在集群当中

Nginx-ingress-controller:

如何下载:

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

k8s-ingress一_第1张图片

Ingress暴露服务的方式:

  1. 方式一:deployment+LoadBalance模式,ingress部署在公有云,ingress配置文件里面会有一个type,type:LoadBalancer. 公有云平台会为个Loadbalance的service创建一个负载均衡器,绑定一个公网地址。通过域名指向这个公网地址就可以实现集群对外暴露

  1. 方式二:daemonset+hostnetwork+nodeSelector模式:

解析:

Daemonset:在每个节点都会创建一个pod

Hostnework:pod共享节点主机的网络命名空间,容器内直接使用节点主机的IP+端口。Pod当中的容器可以直接访问网络资源

nodeSelector:根据标签来选择部署的节点,Nginx-ingress-controller部署的节点

缺点:直接利用了节点主机的网络和端口,一个node只能部署一个ingress-controller pod比价适合大并发的生产环境,性能是最好的

核心图:

k8s-ingress一_第2张图片

  1. 方式三:deployment+NodePort 方式

实验演示方式一实现:

1、下载nginx ingress contoller控制器

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

k8s-ingress一_第3张图片

修改一下配置文件:

k8s-ingress一_第4张图片

k8s-ingress一_第5张图片

k8s-ingress一_第6张图片

创建标签:

k8s-ingress一_第7张图片

kubectl get pod -n ingress-nginx -o wide

上传控制器镜像,也就是nginx-ingress-controller的镜像:拖入每个节点

tar -xf ingree.contro-0.30.0.tar.gz

docker load -i ingree.contro-0.30.0.tar 

k8s-ingress一_第8张图片

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

netstat -antp|grep nginx

k8s-ingress一_第9张图片

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27897/nginx: master

tcp        0      0 0.0.0.0:8181            0.0.0.0:*               LISTEN      27897/nginx: master

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      27897/nginx: master

解析:8081端口,nginx-controller默认配置的一个bachend,反向代理的端口

所有请求当中,只要是不符合ingress配置的请求会转发到8081,相当于error的界面

  1. 定义yml脚本,创建pvc、pod、service、ingress

k8s-ingress一_第10张图片

k8s-ingress一_第11张图片

k8s-ingress一_第12张图片

k8s-ingress一_第13张图片

k8s-ingress一_第14张图片

kubectl get pod -o wide

k8s-ingress一_第15张图片

映射

vim /etc/hosts

k8s-ingress一_第16张图片

测试访问

k8s-ingress一_第17张图片

k8s-ingress一_第18张图片

负载均衡已经实现(分别查看三个容器的日志)

k8s-ingress一_第19张图片

k8s-ingress一_第20张图片

k8s-ingress一_第21张图片

结论:endpointIP地址变化

k8s-ingress一_第22张图片

如何实现第二种方式:

如何实现deployment+nodePort (常见模式)

k8s-ingress一_第23张图片

将之前的全部删除

k8s-ingress一_第24张图片

下载nginx ingress contoller控制器

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

k8s-ingress一_第25张图片

k8s-ingress一_第26张图片

将原来的基于daemonset删除ingress删除

k8s-ingress一_第27张图片

k8s-ingress一_第28张图片

下载service-nodeport控制器

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

k8s-ingress一_第29张图片

k8s-ingress一_第30张图片

定义yml脚本,创建pvc、pod、service、ingress

k8s-ingress一_第31张图片

k8s-ingress一_第32张图片

k8s-ingress一_第33张图片

k8s-ingress一_第34张图片

k8s-ingress一_第35张图片

做映射,端口可以随便写

k8s-ingress一_第36张图片

k8s-ingress一_第37张图片

k8s-ingress一_第38张图片

结构图:

解析图:

k8s-ingress一_第39张图片

k8s-ingress一_第40张图片

三种模式:

Nginx-ingress-controller

Host--->ingress的配置找到pod----controller---请求发送到pod

NodePort----controller---ingress-----service----pod

NodePort暴露端口的方式是最简单的方法,NodePort多了一层NAT,(地址转换)

并发量大的对性能会有一定影响,内部会有NodePort

虚拟主机的方式实现http代理:

创建多个pod、service

pod1、service1

k8s-ingress一_第41张图片

pod2、service2

k8s-ingress一_第42张图片

配置ingress

k8s-ingress一_第43张图片

k8s-ingress一_第44张图片

做映射:

k8s-ingress一_第45张图片

k8s-ingress一_第46张图片

k8s-ingress一_第47张图片

k8s-ingress一_第48张图片

总结:

Ingress的核心组件----nginx-ingress-controller和traefik

他们都是开源的ingress--controller

三种方式:

Deployment+loadbalancer 需要云平台提供一个负载均衡的公网地址,公有云上做(需要钱)

Daemonset+hostnetwork+nodeselector指定节点部署controller,缺点就是和宿主机共享网络,只能是一个controller的pod

Deployment+NodePort最常见,最简单的方式,其中一个nodeport端口,所有的ingress的请求都会转发到NodePort,然后service把流量转发到pod,一个nginx的NodePort,实现访问多个虚拟主机

和nginx类型:

一个端口可以访问多个

例如:80端口,可以访问www.test1.com www.test2.com

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