K8S之Service详解

网友投稿 284 2022-09-09

K8S之Service详解

文章目录

​​一、概念​​

​​`1.1.Service存在的意义`​​​​`1.2.三种常用类型`​​

​​(1)ClusterIP(集群内部使用)​​​​(2)NodePort(对外暴露应用)​​​​(3)LoadBalancer(对外暴露应用,适用于公有云)​​

​​二、Service代理模式​​

​​`2.1.iptables模式`​​​​`2.2.IPVS模式【推荐使用】`​​

​​`2.2.1.修改代理模式为ipvs`​​

​​`2.3.Iptables VS IPVS`​​

​​三、示例​​

​​`3.1.tomcat-service.yaml`​​​​`3.2.解释`​​​​`3.3.验证`​​

​​`3.3.1.集群内通过ClusterIP+虚端口可以访问服务`​​​​`3.3.2.集群外通过NodeIP+nodePort端口可以访问Service服务`​​​​`3.3.3.在Pod里面,建议通过ServiceName.Namespace.svc.cluster.local访问`​​

参考视频:IP]:[NodePort]作为后端添加进去

二、Service代理模式

通过两种方式实现负载均衡规则,分别是iptables和IPVS

​​2.1.iptables模式​​

查看规则 iptables-save |grep web

#NodePort转发规则-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web" -m tcp --dport 30018 -j KUBE-SVC-LOLE4ISW44XBNF3G

iptables-save |grep KUBE-SVC-LOLE4ISW44XBNF3G

#ClusterIP转发规则,10.98.116.150为ClusterIP地址-A KUBE-SERVICES -d 10.98.116.150/32 -p tcp -m comment --comment "default/web cluster IP" -m tcp --dport 80 -j KUBE-SVC-LOLE4ISW44XBNF3G#Port转发规则#0.50000000000表示该条规则被匹配的概率为50%,那么后面一条被匹配的概率为100%-A KUBE-SVC-LOLE4ISW44XBNF3G -m comment --comment "default/web" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-WM2JAV2WVEC2WHK4-A KUBE-SVC-LOLE4ISW44XBNF3G -m comment --comment "default/web" -j KUBE-SEP-WT22VOHQFMRGULTR

假设匹配到第一条规则,也即把请求转发给KUBE-SEP-WM2JAV2WVEC2WHK4

iptables-save |grep KUBE-SEP-WM2JAV2WVEC2WHK4

#转发到具体的Pod,10.244.235.234:80-A KUBE-SEP-WM2JAV2WVEC2WHK4 -p tcp -m comment --comment "default/web" -m tcp -j DNAT --to-destination 10.244.235.234:80

实现流程

客户端 ->NodePort/ClusterIP(iptables/Ipvs负载均衡规则) -> 分布在各节点Pod

​​2.2.IPVS模式【推荐使用】​​

​​2.2.1.修改代理模式为ipvs​​

加载ip_vs相关内核模块

modprobe ip_vsmodprobe ip_vs_rrmodprobe ip_vs_wrrmodprobe ip_vs_sh

设置模式为ipvs

kubectl edit configmaps kube-proxy -nkube-system

kubectl delete pod kube-proxy-9lvgh -nkube-system

ipvsadm -Ln #查看规则

​​2.3.Iptables VS IPVS​​

Iptables灵活,功能强大;规则遍历匹配和更新,呈线性时延

IPVS工作在内核态,有更好的性能;调度算法丰富:rr,wrr,lc,wlc,ip hash…

三、示例

​​3.1.tomcat-service.yaml​​

apiVersion: v1kind: Servicemetadata: name: tomcat-servicespec: type: NodePort ports: - port: 8080 name: service-port nodePort: 31005 - port: 8005 name: shutdown-port selector: tier: frontend

kubectl apply -f tomcat-service.yaml

​​3.2.解释​​

定义了一个名为tomcat-service的Service,服务端口为8080和8005,采用NodePort的方式对外提供服务,拥有“tier=frontend”这个标签的所有Pod示例都属于它。

​​3.3.验证​​

kubectl get svc

​​3.3.1.集群内通过ClusterIP+虚端口可以访问服务​​

​​3.3.2.集群外通过NodeIP+nodePort端口可以访问Service服务​​

kubectl get endpoints

kubectl get svc tomcat-service -o yaml

可以看到Service更详细的信息,如名字、命名空间、clusterIP、虚端口

​​3.3.3.在Pod里面,建议通过ServiceName.Namespace.svc.cluster.local访问​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:中超第5轮最后两场爆冷,津门虎首胜申花首败!
下一篇:二进制部署K8S集群
相关文章

 发表评论

暂时没有评论,来抢沙发吧~