天天看点

kubernetes基础知识之service服务

作者:王啸皓月山巅

kubernetes服务service暴露的几种方式:

1.ClusterIP:默认值,k8s系统自动分配的虚拟IP,只在集群内部使用。

2.NodePort:将service通过指定的node上的端口暴露给外部,通过此方法,就可以在集群外部访问,通过NodeIP:NodePort的方式访问服务。

3.Load Balancer:使用外接负载均衡器完成到服务的负载分发,此模式需要外部云环境支持。

4.Ingress

5.ExternalName:把集群外部的服务引入集团内部,直接使用。

service类型获取命令:

kubectl get svc --all-namespaces --no-headers | awk -F ' ' '{print $3}' | sort -n |uniq

①:ClusterIP:只在集群内部使用

②:ingress相当于service的service,可以将外部的请求通过不同规则的筛选后,转发到不同的service。ingress的作用是定义请求转发的规则,可以理解为配置模板或者配置文件。ingress-controller 是巨头实现反向代理和负载均衡的程序,通过对ingress中定义的规则进行解析,根据其规则来实现转发。用户可以选择不同的ingress-controller实现功能。

③:可以使用ingress来公开服务,ingress不是服务类型,但是它充当服务的入口点,它可以在同一个IP地址下公开多个服务。

ingress-controller的部署方式分成三种:

Deployment+Load Balancer模式的服务service

Deployment+Node Port模式的服务service

Daemonset + Host Network + node selector

kube-proxy支持三种工作模式:

1.userspace

2.iptables 可以通过iptables -nL查看规则

3.ipvs 可以通过ipvsadm -Ln查看

在使用service之前,需要使用deployment创建出pod,并且给pod设置好标签,比如设置app=nginx-pod的标签。

clusterIP是service的IP地址,如果不写,会默认生成一个。

Port:是服务service的端口。

TargetPort:是pod的端口。

NodePort: 指定绑定的node的端口。

查看service的信息:

kubectl describe svc ${svc_name} -n ${namespace}

这里有一个Endpoints的列表,就是当前service 可以负载到的服务入口。Endpoint是kubernetes中的一个资源对象,存储在etcd中,它用来记录一个service对应的所有pod的访问地址,它是根据service配置文件中Selector描述产生的。

一个service由一组pod组成,这些pod通过Endpoint暴露出来,Endpoints是实现实际服务的端点集合。service和pod之间是通过endpoints实现的,是通过pod的label和service的selector创建关联的。一般是app=xxx的标签。

NodePort的工作原理就是把service的一个端口映射到Node的一个端口上。然后就可以通过NodeIP:NodePort来访问service啦。通过浏览器去访问集群中任意一个节点IP的NodePort端口号,就可以访问pod了。缺点:会占用很多集群机器的端口,当集群服务变多的时候,这个缺点就特别明显。

Load Balancer和NodePort很相似,目的都是向外暴露一个端口。区别在于Load Balancer会在集群的外部再来做一个负载均衡设备,而这个设备需要外部环境的支持。外部设备发送到这个设备的请求,会被设备负载之后转发到集群中。缺点:每个service需要一个LB,浪费、麻烦,并且需要kubernetes集群之外的设备支持。

一般service是作为四层路由的负载,一般ingress作为七层路由的负载。

Ingress相当于一个七层负载均衡器,是kubernetes反向代理的一个抽象。它的工作原理类似于Nginx,可以理解成在Nginx里面建立很多映射规则,ingress-controller通过监听这些配置规则并且转化成nginx的反向代理配置,然后对外部提供服务。

Ingress:kubernetes中的一个对象,作用是定义请求如何转发到service的规则。

ingress-controller:具体实现反向代理和负载均衡的程序,对ingress的规则进行解析。根据配置的规则来实现请求的转发,实现方式有很多,比如Nginx、Haproxy等。

Ingress的工作原理如下:

①:用户编写ingress规则,说明哪个域名对应kubernetes集群中的哪个service。

②:Ingress控制器动态感知ingress服务规则的变化,并且生成一段对应的nginx反向代理配置。

③:Ingress控制器会将生成的nginx配置写入一个运行着的nginx服务中,并且动态更新。

④:到此为止,其实真正工作的就一个nginx了,内部配置了用户定义的请求转发规则。

kubernetes基础知识之service服务

k8s

鼓励的话语:嘚瑟到不能嘚瑟,是生命的终点;嘚瑟到别人不敢嘚瑟,是嘚瑟的境界!

继续阅读