涨薪技能|Kubernetes(k8s)之Service服务范例

打印 上一主题 下一主题

主题 937|帖子 937|积分 2811

前次我们对Service服务有了具体的了解,今天给大家分享Service服务究竟有哪些范例以及各个范例又是怎么样的存在?


对一些应用(如 Frontend)的某些部分,可能希望通过外部(Kubernetes 集群外部)IP地点袒露Service服务。
Kubernetes Service Types答应指定一个需要的范例的Service,默认是ClusterIP范例。
服务范例有:
1. ClusterIP
2. nodePort
3. LoadBalancer
4. ExternalName

01ClusterIP

ClusterIP(内网ip),袒露集群IP和端标语,办理IP随Pod变化的标题.
编辑一个service-clusterip.yaml文件,内容如下:
  1. apiVersion: v1kind: Servicemetadata:name: service-clusteripnamespace: testspec:selector:app: nginxclusterIP: 10.96.0.11 #表示sevice的IP地址,可以设置,也可以不设置,不设置会默认分配一个IP地址type: ClusterIPports:- protocol: TCPport: 80 #表示设置service的端口targetPort: 80 #表示设置pod的端口
复制代码


再使用以下命令举行创建
  1. [root@master ~]# kubectl apply -f service-clusterip.yaml
复制代码
创建成功后,可以使用以下命令查察service的详情
  1. [root@master ~]# kubectl describe svc service-clusterip -n testName: service-clusteripNamespace: testLabels: <none>Annotations: <none>Selector: app=nginxType: ClusterIPIP: 10.96.0.11Port: <unset> 80/TCPTargetPort: 80/TCPEndpoints: 10.244.104.29:80,10.244.104.51:80,10.244.104.7:80Session Affinity: NoneEvents: <none>
复制代码
在上面的信息中可以看到三个POD节点对应的IP地点,此中endpoints是kubernetes中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地点,它是根据service配置文件中selector描述产生的。
再使用以下命令查察KUBE-SERVICES target:​​​​​​​
  1. [root@master ~]# iptables -nvL -t nat | grep KUBE-SVC0 0 KUBE-SVC-QVNRCSZEL5TGFQEZ tcp -- * * 0.0.0.0/00.0.0.0/0 /* test/service-nodeport */ tcp dpt:300020 0 KUBE-SVC-LOLE4ISW44XBNF3G tcp -- * * 0.0.0.0/00.0.0.0/0 /* default/web */ tcp dpt:322590 0 KUBE-SVC-CEZPIJSAUFW5MYPQ tcp -- * * 0.0.0.0/00.0.0.0/0 /* kubernetes-dashboard/kubernetes-dashboard */ tcpdpt:323490 0 KUBE-SVC-JD5MR3NA4I4DYORP tcp -- * * 0.0.0.0/010.96.0.10 /* kube-system/kube-dns:metrics cluster IP */ tcpdpt:91530 0 KUBE-SVC-Z6GDYMWE5TV2NNJN tcp -- * * 0.0.0.0/010.96.59.159 /* kubernetes-dashboard/dashboard-metrics-scrapercluster IP */ tcp dpt:80000 0 KUBE-SVC-NPX46M4PTMTKRN6Y tcp -- * * 0.0.0.0/010.96.0.1 /* default/kubernetes:https cluster IP */ tcp dpt:4430 0 KUBE-SVC-QVNRCSZEL5TGFQEZ tcp -- * * 0.0.0.0/010.96.217.148 /* test/service-nodeport cluster IP */ tcp dpt:800 0 KUBE-SVC-LOLE4ISW44XBNF3G tcp -- * * 0.0.0.0/010.96.210.17 /* default/web cluster IP */ tcp dpt:800 0 KUBE-SVC-H6S3G453RTJY5LVE tcp -- * * 0.0.0.0/010.96.0.11 /* test/service-clusterip cluster IP */ tcp dpt:80
复制代码
接下来可以使用以下命令来测试负载的算法:​​​​​​​
  1. [root@master ~]# while true;do curl 10.96.0.11:80;sleep 5;done;10.244.104.710.244.104.2910.244.104.5110.244.104.5110.244.104.51
复制代码
上面的测试是先修改了每台nginx首页的内容,具体如何修改,步骤如下:​​​​​​​
  1. #1.先查看pod节点名[root@master ~]# kubectl get pods -n testNAME READY STATUS RESTARTS AGEweb-test-7f4fc68488-4swtz 1/1 Running 10 66dweb-test-7f4fc68488-b4t6r 1/1 Running 10 66dweb-test-7f4fc68488-jcwhx 1/1 Running 10 66d#2.进入pod节点容器[root@master ~]# kubectl exec -it web-test-7f4fc68488-4swtz -n test -- /bin/sh#3.执行echo命令,修改首页内容# echo '10.244.104.7' > /usr/share/nginx/html/index.html
复制代码

02nodePort

上面先容了ClusterIP的通信方式,但有一个标题是ClusterIP只答应内部通信,这个通信是不能通过外界来访问的,假如需要将这个端口袒露到表面,则可以使用nodeport方式。
生产情况比较好的方案就是借助云服务商使用LoadBalancer的方式,但由于是测试情况就使用了比较简朴的NodePort来袒露服务,在实践过程中,也加深了对K8s概念的明确。
NodePort是外部流量访问K8s的一种方式,即nodeIP:nodePort,是提供给外部流量访问K8s集群资源的一种方式。
比方需要袒露服务的端口给外界访问的话可以通过命令:​​​​​​​
  1. [root@master ~]# kubectl expose deployment web-test --type=NodePort -n testservice/web-test exposed
复制代码


编辑一个nodeport的yaml文件,内容如下:​​​​​​​
  1. apiVersion: v1kind: Servicemetadata:name: service-nodeportnamespace: testspec:selector:app: nginxtype: NodePortports:- protocol: TCPport: 80 #服务器访问端口nodePort: 30002 #指定绑定的node的端口(默认的取值范围是:30000-32767),如果不指定,会默认分配targetPort: 80 #容器端口
复制代码
容器的端口,也是终极底层的服务所提供的端口,所以说targetPod也就是Pod的端口。从port或者是nodePort进入的流量,颠末路由转发之后,终极都会都通过targetPort进入到Pod中。
再创建service资源
  1. [root@master ~]# kubectl apply -f service-nodeport.yaml
复制代码
再使用以下命令查察service的具体信息​​​​​​​
  1. [root@master ~]# kubectl get svc -n test -o wideNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGESELECTORservice-clusterip ClusterIP 10.96.0.11 <none> 80/TCP 23happ=nginxservice-nodeport NodePort 10.96.217.148 <none> 80:30002/TCP 67dapp=nginxweb-test NodePort 10.96.50.184 <none> 80:30648/TCP 52mapp=nginx
复制代码
这可样就可以通过http://192.168.158.100:30002/来访问站点


03LoadBalancer

使用云提供商的负载均衡器向外部袒露服务。外部负载均衡器可以将流量路由到主动创建的NodePort 服务和 ClusterIP 服务上。


loadbalancer-my-service.yaml 配置文件的内容如下,设置 type 的值为 LoadBalancer,将为Service 提供负载均衡器。负载均衡器是异步创建的,关于被提供的负载均衡器的信息将会通过 Service的 status.loadBalancer 字段发布出去。通过 kubectl 命令创建,kubectl apply -f loadbalancer-myservice.yaml。​​​​​​​
  1. apiVersion: v1kind: Servicemetadata:name: loadbalancer-my-servicespec:selector:app: MyAppports:- protocol: TCPport: 80targetPort: 9376type: LoadBalancerstatus:loadBalancer:ingress:- ip: 192.0.2.127
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表