小言_互联网的博客

Kubernetes资源对象:service

205人阅读  评论(0)

service是对一组提供相同功能的 Pods 的抽象,并为它们提供一个统一的入口。借助 Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。

service作为pods 的入口,通过labelselector找寻到满足label的pods,这样就能把service 与 pods 的对应关系确立。

apiVersion: v1

kind: Service

metadata:

  labels:

    run: nginx

  name: nginx

  namespace: default

spec:

  ports:

  - port: 80

    protocol: TCP

    targetPort: 80

  selector:

    run: nginx

根据上述的service yaml,当pod有着run:nginx的label的时候,就会被service 捕获到; service 的 targetPort 对应着捕获到pod的port

service 类型

service 有着种类型:NodePort,LoadBalancer,ClusterIP,ExternalNme

  • ClusterIP:默认类型,自动分配一个仅 cluster 内部可以访问的虚拟 IP,该IP 取自kube-apiserver的配置--service-cluster-ip-range=10.96.0.0/12
  • NodePort:在 ClusterIP 基础上为 Service 在每台机器上绑定一个端口,这样就可以通过 <NodeIP>:NodePort 来访问该服务。如果 kube-proxy 设置了 --nodeport-addresses=10.240.0.0/16(v1.10 支持),那么仅该 NodePort 仅对设置在范围内的 IP 有效。
  • LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均衡器,并将请求转发到 <NodeIP>:NodePort
  • ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过 spec.externlName 设定)。需要 kube-dns 版本在 1.7 以上

不指定selector的service

不指定selector,则不会自动创建endpoint,关于这个转发,则有两种方式

  •  自定义endpoint:手动创建endpoint ,各组件去寻找endpoint,寻找方式是去找同一个namespace且与service name 一致的endpoint资源
  •  在service 配置externalName
    kind: Service

     apiVersion: v1

     metadata:

       name: my-service

       namespace: default

     spec:

       type: ExternalName

       externalName: my.database.example.com

     该service不会赋予有clusterip,服务访问该service,域名解析返回externalName 参数对应的my.database.example.com

headless service

即不需要 Cluster IP 的服务,即在创建service的时候,配置 spec.clusterIPNone, kube-apiserver则不会分配ip给该service

headless service包括两种类型

  • 不指定 Selectors,但设置 externalName,通过 CNAME 记录处理
  • 指定 Selectors,通过 kube-dns 返回endpoint 列表,也就是kube-dns进行负载均衡

ClusterIP 模式的 Service 为你提供的,就是一个 Pod 的稳定的 IP 地址,即 VIP。并且,这里 Pod 和 Service 的关系是可以通过 Label 确定的。

而 Headless Service 为你提供的,则是一个 Pod 的稳定的 DNS 名字,并且,这个名字是可以通过 Pod 名字和 Service 名字拼接出来的。


转载:https://blog.csdn.net/fly910905/article/details/102091145
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场