Service资源是Kubernetes中最核心的资源对象之一,service定义了这样一个抽象:一个Pod的逻辑文组,一个可以访问它们的策略-----通常称为微服务,客户端可以通过这个入口地址访问其背后的一组由Pod副本组成的集群实例。Service 与其后端Pod副本集群之间则是通过Label Selector 标签选择器来实现动态注册和调度的。
service的几种代理模式:
service通过标签选择器关联至拥有相关标签的Pod对象,客户端向Service进行请求,而非直接请求Pod对象
Service默认类型为ClusterIP,还有ExternalName,NodePort ,LoadBalanc er和Headless,共5种类型
·ClusterIP:默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP
·NodePort:在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过:NodePort来访问该服务
·LoadBalancer:在NodePort的基础上,借助cloud provider创建一个外部负载均衡器,并将请求转发到:NodePort
·ExternalName:把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有k8s1.7或更高版本的kube-dns才支持
·Headless (DNS解析): Headless Service 属于 Cluster IP的一种,Pod 通过 service_name 方式直接解析到后端 Pod IP。 有时不需要或者不想要负载均衡的 Service,遇到这种情况,可以通过指定 Cluster IP的值为 None,来创建Headless Service。这类Service 并不会分配 ClusterIP,kube-proxy不会处理他们,而且平台也不会为他们进行负载均衡和路由。
Service的相关命令:
service配置字段的查看命令: kubectl explain SVC
API配置查看:kubectl explain endpoints
endpoints信息查看: kubectl get endpoints -A
endpoints为service中的网络端点,用于接收service发来的请求,并将其转发至相关的.上游服务( deployment )。