K8s——Service详解
Posted IT小分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8s——Service详解相关的知识,希望对你有一定的参考价值。
1 Service 含义
K8s service可以理解为对一组Pod的抽象。类似于nginx能够把请求转发
2 Service作用
2.1 pod使用时因某些问题重启,从而导致pod 的IP发生变化,会导致旧的IP不能用,影响用户对系统使用。service的出现很好
2.2 对外暴露pod访问请求端口。
2.3 固定IP。
2.4 负载均衡。
3 Service 工作机制
3.1 userspace代理模型流程
userspace指Linux操作系统的用户空间(物理上为内存)。对于service会对外暴露端口号,用户空间中的kube-proxy会监控service端口上请求,并把请求转发到对应的pod上。
请求到达内核空间后经由套接字送往用户空间的kube-proxy,并调度至后端pod。请求会在内核和用户空间之间来回转发导致效率不高。(如下图)
3.2 iptables代理模型流程
kube-proxy负责跟踪API Server上的Service和Endpoints对象的变动,并根据变动做出iptables的变动。
iptables捕捉到达clusterIP与端口的请求,并将请求转发到当前service后端pod。
iptables模型不用将流量在用户空间和内核空间来回切换,因而更加高效和可靠,不过其缺点是iptables代理模型不会在被挑中的后端Pod资源无响应时进行重定向。
3.3 ipvs代理模型
K8s从1.9版本引入ipvs代理模型,且从1.11版本起成为默认设置。
它和iptables模型很类似,唯一一点不同的是在其请求流量的调度功能由ipvs实现,余下的功能仍由iptables完成。
ipvs是建立在netfilter的钩子函数上,但它使用hash表作为底层数据结构并工作于内核空间,因此流量转发速度特别快、规则同步性很好,
而且它支持众多调度算法,rr(轮询)、lc(最小连接数)、dh(目标哈希)、sh(源哈希)、sed(最短期望延迟)、nq(不排队调度)。
3 Service 类型
3.1 ClusterIp:默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP.
3.2 NodePort:在ClusterIP基础上为Service在每台机器上绑定一个端口,这样可以通过NodeIP:NodePort来访问服务。
也可以这样理解在于在 node 上暴露了一个端口,将向该端口的流量导入到 kube-proxy,然后由 kube-proxy 进一步到给对应的 pod。
k8s配置好对外访问端口后,linux防火墙也需要通过命令配置(-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT)
3.3 LoadBalancer:在NodePort基础上,借助cloud provider创建一个外部负载均衡器,并将请求转发到NodeIP:NodePort。
另一种理解调用cloud provider 去创建 LB 来向节点导流
3.4 ExternalName: 把集群外部的服务引入到集群内部来,在集群内部直接使用,没有任何类型代理被创建,这只有kubernetes1.7 或更高版本的kube-dns才支持
4 port nodePort targetPod 区别
4.1 port service暴露在cluster ip上的端口,<cluster ip>:port 是提供给集群内部客户访问service的入口
4.2 nodePort 是kubernetes提供给集群外部客户访问service入口的一种方式(另一种方式是LoadBalancer),所以,<nodeIP>:nodePort 是提供给集群外部客户访问service的入口.
4.3 targetPort 是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器
4 Service脚本创建
apiVersion: v1
kind: Service
metadata:
name: myService
spec:
selector:
app: tomcat
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
- name: https
protocol: TCP
port: 443
targetPort: 443
selector字段中指定了为哪一个标签的app进行负载均衡即暴露pod 的name为tomcat对外的访问端口。
最后预祝各位小伙伴新年快乐,牛年吉祥! 这次分享对大家工作学习有帮助吧,欢迎下方留言,提出建议或意见。
以上是关于K8s——Service详解的主要内容,如果未能解决你的问题,请参考以下文章