1,service介绍
Service(简称svc)定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象,Service是对一组提供相同功能的Pods的抽象,并为他们提供一个统一的入口,借助 Service 应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。Service通过标签(label)来选取后端Pod,一般配合ReplicaSet或者Deployment来保证后端容器的正常运行。
注意:svc在整个集群中负责网络服务(并不是底层容器网络实现),因为pod实际上是不可靠的,可能会被停止或者重启,一旦重启就会导致IP地址发生变化
2,service网络服务模式
Service 创建网络服务一般分为集群内部访问(clusterIP )和集群外部访问(NodePort)模式:
clusterIP 默认类型,自动分配一个仅集群内部可以访问的虚拟IP
NodePort 是通过映射端口到宿主机的方式,访问地址为宿主机IP地址加上端口的方式,和hostPort 类似,但是NodePort 会在kubernetes集群的所有node上监听,也就是说创建一个Service ,配置了一个NodePort 监听30000端口,那么集群内所有的node都会监听30000端口,不管访问该node上有没有对应的pod,随意访问任何一台node的30000端口都可以被转发到正确的后端pod中
3,创建service
(1)集群内部访问(clusterIP )
[root@kube-master-01 yaml]# cat ng-rc-svc.ymlapiVersion: v1kind: Servicemetadata:name: ng-svclabels:name: ng-svcspec:ports:# 指的是监听88端口- port: 88# 指定后端pod监听的端口targetPort: 80protocol: TCPselector:# 指定具有app标签,且值为ng-rc 的pod全部纳入本组Serviceapp: ng-rc
# 通过create 创建好后可以查看到clusterIP和端口等信息[root@kube-master-01 yaml]# kubectl get svcng-svc -o wideNAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTORng-svc 10.254.99.239 88/TCP 1d app=ng-rc
(2)集群外部访问(nodeport模式)
通过这种模式,创建svc以后,集群里边的每一个node都会监听我们定义好的端口,并将该端口映射到pod,这样就实现了外部访问
[root@kube-master-01 yaml]# cat ng-rc-svc-nodeport.ymlpiVersion: v1kind: Servicemetadata:name: ng-svc-nodeportlabels:name: ng-svc-nodeportspec:type: NodePortports:- port: 30000targetPort: 80protocol: TCP# 是实际提供外部访问的端口,默认端口是30000-32767 范围,为了避免混淆,建议把除targetPort外的端口都设相同nodePort: 30000selector:app: ng-rc
# 查看Service 是否正确接管pod的网络服务可以使用命令[root@kube-master-01 yaml]# kubectl get endpointsNAME ENDPOINTS AGEkubernetes 10.1.14.11:6443 1dng-svc 172.40.3.2:80,172.40.3.3:80,172.40.7.2:80 + 1 more... 1dng-svc-nodeport 172.40.3.2:80,172.40.3.3:80,172.40.7.2:80 + 1 more... 21h
