kubernete-service详解

service时k8s的核心概念。通过service,我们可以为一组具有相同功能的容器提供相同的访问入口,以及将负载均衡到后端的各个容器中。

apiVersion: v1
kind: Service
namespace: string
metadata:
  name:
  labels:
    - name: string   #标签列表
  annotations:
    - name: string  #自定义注解列表

spec:
  selector: []  #将选择指定标签的Pod作为管理列表
  type: string #service 的类型:clusterIp(默认):虚拟的服务ip地址,用于集群内部pod相互访问;nodePort:映射的宿主机端口,外部使用该nodede的ip和端口访问服务。
  clusterIp: string #虚拟的服务地址,当type为clusterIp时,系统会自动分配,也可以自己指定;type为loadbalancer时需要手动指定。
  sessionAffinity: string #是否支持session,默认为空,可选为clientIp,表示相同的用户ip请求同一个pod
  ports:  #service 需要暴露的端口列表。
  - name: string #端口名称
  - protocol: string #端口使用的协议 TCP(默认)/UDP
    port: int  #服务需要监听的端口
    targetPort: int #转发到的后端pod的端口
    nodePort: int   #spe.type=nodePort时指定需要映射的物理宿主机端口
  status:
    loadBalancer: #外部负载均衡器
      ingress:  #外部负载均衡器
      ip: string #外部负载均衡器的ip
      hostName: string #外部负载均衡器的主机名


1.多端口service:提供多个访问端口
2.外部服务:在某些环境中,应用系统需要将一个外部数据库作为后端服务进行连接,或将另一个集群或Namespace中的服务作为服务的后端,这时可以通过创建一个无LabelSelector的Service来实现:
在这里插入图片描述
通过该定义创建的是一个不带标签选择器的Service,即无法选择后端的Pod,系统不会自动创建Endpoint,因此需要手动创建一个和该Service同名的Endpoint,用于指向实际的后端访问地址。创建Endpoint的配置文件内容如下:在这里插入图片描述
3.Headless Service
在某些应用场景中,开发人员希望自己控制负载均衡的策略,不使用Service提供的默认负载均衡的功能,或者应用程序希望知道属于同组服务的其他实例。Kubernetes提供了Headless Service来实现这种功能,即不为Service设置ClusterIP(入口IP地址),仅通过Label Selector将后端的Pod列表返回给调用的客户端。例如:
在这里插入图片描述

这样,Service就不再具有一个特定的ClusterIP地址,对其进行访问将获得包含Label“app=nginx”的全部Pod列表,然后客户端程序自行决定如何处理这个Pod列表。例如,StatefulSet就是使用Headless Service为客户端返回多个服务地址的。对于“去中心化”类的应用集群,Headless Service将非常有用。

从集群外访问pod或service:

由于Pod和Service都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问它们。为了让外部客户端可以访问这些服务,可以将Pod或Service的端口号映射到宿主机,以使客户端应用能够通过物理机访问容器应用。

将pod的端口号映射到物理机
(1)通过设置容器级别的hostPort,将容器应用的端口号映射到物理机上,通过物理机的IP地址和8081端口号访问Pod内的容器服务.在这里插入图片描述

2)通过设置Pod级别的hostNetwork=true,该Pod中所有容器的端口号都将被直接映射到物理机上。

将Service的端口号映射到物理机
(1)通过设置nodePort映射到物理机,同时设置Service的类型为NodePort:
在这里插入图片描述
通过物理机的IP地址和nodePort 8081端口号访问服务。
(2)通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。在下面的例子中,status.loadBalancer.ingress.ip设置的146.148.47.155为云服务商提供的负载均衡器的IP地址。对该Service的访问请求将会通过LoadBalancer转发到后端Pod上,负载分发的实现方式则依赖于云服务商提供的LoadBalancer的实现机制:在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值