kubernetes概念 - Service
在Kubernetes集群中,Pod是有生命周期的,为了能够给对应的客户端提供一个固定访问端点,因此在客户端与服务端(Pod之间)添加了一个固定中间层,这个中间层被称之为Service。Service的工作严重依赖于在Kubernetes集群之上,部署的附件Kubernetes DNS服务。较新版本使用的coreDNS,1.11之前使用的KubeDNS。 service的名称解析是强依赖于DNS附件的。因此在部署完Kubernetes后,需要部署CoreDNS或KubeDNS。 Kubernetes要想向客户端提供网络功能,依赖于第三方方案,在较新版本中,可通过CNI容器网络插件标准接口,来接入任何遵循插件标准的第三方方案。 Service从一定程度上来说,在每个节点之上都工作有一个组件Kube-proxy,Kube-proxy将始终监视apiserver当中,有关service资源的变动状态。此过程是通过Kubernetes中固有的请求方法watch来实现的。一旦有service资源的内容发生变动,kube-proxy都将其转换为当前节点之上的能够实现service资源调度至特定Pod之上的规则。 service实现方式 在Kubernetes中service的实现方式有三种模型。 userspace 用户空间,可以理解为,用户的请求。 1.1之前包括1.1使用此模型。 用户的请求到达当前节点的内核空间的iptables规则(service规则),由service转发至本地监听的某个套接字上的用户空间的kube-proxy,kube-proxy在处理完再转发给service,最终代理至service相关联的各个Pod,实现调度。 iptables 1.10- 客户端IP请求时,直接请求serviceIP,IP为本地内核空间中的service规则所截取,并直接调度至相关Pod。service工作在内核空间,由iptables直接调度。 ipvs 1.11默认使用,如IPVS没有激活,默认降级为iptables 客户端请求到达内核空间后,直接由ipvs规则直接调度至Pod网络地址范围内的相关Pod资源。 使用清单创建service资源 SVC中的kubernetes service是集群中各Pod需要与Kubernetes集群apiserver联系时需要通过此svc地址联系。这个地址是集群内的apiserver服务地址。 service类型 ClusterIP 默认值,表示分配集群IP地址,仅用于集群内通信。自动分配地址,如需固定,需要指定相应地址,在创建后无法修改。当使用ClusterIP时,只有两个端口有用,port与targetPort NodePort 接入集群外部流量,默认分配的端口是30000~32767 LoadBalancer 表示将Kubernetes部署在虚拟机上,虚拟机是工作在云环境中,云环境支持lbaas(负载均衡及服务的一键调用)。 ExternaName 表示将集群外部服务引用到集群内部中来,在集群内部直接使用。 yaml 1 2 3 4 5 6 7 8 9 10 11 12 spec: ports: # 将哪个端口与后端容器端口建立关联关系。 - port # service对外提供服务的端口 name 指明port的名称 targetPort # 容器的端口 nodePort # 只有类型为NodePort时,才有必要用节点端口,否则此选项是无用的。 protocol 协议,默认TCP seletcor 关联到哪些Pod资源上 app: redis run: redis clusterIP: # clusterIP可以动态分贝可以不配置 type: ClusterIP yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 apiVersion: v1 kind: Service metadata: name: redis namespace: default spec: selector: run: redis clusterIP: 10....