kubernetes service

  sre

5ff2c9c0e697a4507.jpg_e680.jpg

kubernetes service

kubernetes services支持TCP & UDP协议,默认为tcp。
默认情况下,请求会随机选择一个backend。可以将service.spec.sessionAffinity 设置为 “ClientIP” (the default is “None”),这样可以根据client-ip来维持一个session关系来选择pod。
在kubernetes中,service是基于三层(TCP/UDP over IP)的架构,目前还没有提供专门作用于七层(http)的services。
没有使用到selector,因此没有一个明确的Endpoint对象被创建。 因此需要手动的将service映射到对应的endpoint:
注意,使用multi-port时,必须为每个port设定name,如:
用户可以为service指定自己的cluster ip,通过字段spec.clusterIP来实现。用户设定的ip必须是一个有效的ip,必须符合service_cluster_ip_range 范围,如果ip不合符上述规定,apiserver将会返回422。

会话保持:

#当不设置session保持时,service向后台pod转发规则是轮询
sessionAffinity: ClientIP
sessionAffinityConfig:
    clientIP:
      #timeoutSeconds指的是session保持的时间,这个时间默认是10800秒,也就是三个小时
      timeoutSeconds: 10800

kubernetes service类型

ClusterIP:通过集群的内部IP暴露服务,默认的ServiceType

选择该值,服务只能够在集群内部可以访问
注意:Endpoint IP 地址不能是 loopback(127.0.0.0/8)、 link-local(169.254.0.0/16)、或者 link-local 多播(224.0.0.0/24)
Headless services 你可以创建一个”headless“类型的service,将spec.clusterIP字段设置为”None“。

NodePort:通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务

Type = NodePort
如果将type字段设置为NodePort,kubernetes master将会为service的每个对外映射的port分配一个”本地port“,这个本地port作用在每个node上,且必须符合定义在配置文件中的port范围(为–service-node-port-range)。这个被分配的”本地port“定义在service配置中的spec.ports[*].nodePort字段,如果为这个字段设定了一个值,系统将会使用这个值作为分配的本地port 或者 提示你port不符合规范,未设置值则随机给定一个port
NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。

LoadBalancer:使用云提供商的负载局衡器

LoadBalancer: 使用一个ClusterIP & NodePort,但是会向cloud provider申请映射到service本身的负载均衡。
注意:NodePort支持TCP/UDP,LoadBalancer只支持TCP。
私有集群有一个开源实现metallb

metallb 为私有Kubernetes集群创建LoadBalancer服务-不支持IPVS

ExternalName:CNAME

通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容(例如, foo.bar.example.com)。
没有任何类型代理被创建,这只有 Kubernetes 1.7 或更高版本的 kube-dns 才支持。
ExternalName Service 是 Service 的特例,它没有 selector,也没有定义任何的端口和 Endpoint。
相反地,对于运行在集群外部的服务,它通过返回该外部服务的别名这种方式来提供服务。
当查询主机 my-service.prod.svc.CLUSTER时,集群的 DNS 服务将返回一个值为 my.database.example.com 的 CNAME 记录

LEAVE A COMMENT

Captcha Code