1. service存在意义

Service是Kubernetes里最​核心​的资源对象之一,Service定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实力。 Service与其后端Pod副本集群之间则是通过​​Label Selector​​来实现"​无缝对接​"。而RC的作用实际上是保证Service 的服务能力和服务质量处于预期的标准。

十三、kubernetes 核心技术Service_kubernetes

  • 防止Pod失联(服务发现)
    十三、kubernetes 核心技术Service_kubernetes_02

  • 定义一组Pod访问策略(负载均衡)

十三、kubernetes 核心技术Service_云环境_03

2. Pod和Service关系(虚拟IP)

根据lable和selector标签建立关联的

# service.yaml
selector:
app: nginx

# Pod.yaml
lables:
app: nginx

3. 常用Service类型

类型

说明

ExternalName

用于将集群外部的服务引入到集群内部,在集群内部可直接访问来获取服务

ClusterIP

用于为集群内Pod访问时,提供的固定访问地址,默认是自动分配地址,可使用ClusterIP关键字指定固定IP.

NodePort

用于为集群外部访问Service后面Pod提供访问接入端口.

LoadBalancer

用于当K8s运行在一个云环境内时,若该云环境支持LBaaS,则此类型可自动触发创建

一个软件负载均衡器用于对Service做负载均衡调度

3.1 ClusterIP(集群内部使用)

apiVersion: v1
kind: Service
metadata:
labels:
app: web01
name: web01
spec:
type: ClusterIP
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 8443
protocol: TCP #仅支持TCP和UDP,不写默认TCP
targetPort: 8443
selector:
app: web01
status:
loadBalancer: {}

参数

解释

Port

port表示:service暴露在cluster ip(Seriver ip )上的端口,:port 是提供给集群内部客户访问service的入口。

NodePort

nodePort是kubernetes提供给集群外部客户访问service入口的一种方式(另一种方式是LoadBalancer,:nodePort 是提供给集群外部客户访问service的入口。

targetPort

targetPort很好理解,targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。

3.2 NodePort(对外访问应用使用)

apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: web01
name: web01-nodeport
spec:
type: NodePort
ports:
- name: aaaa
port: 80
nodePort: 23232 # 指定对外提供端口, 不加则随机分配
targetPort: 80
- name: bbb
port: 9090
targetPort: 9090
selector:
app: web01
status:
loadBalancer: {}

3.3 LoadBalancer(对外访问应用使用,公有云)

LadBlancer Service 是Kubernetes深度结合云平台的一个组件;当使用LoadBlancer Service 暴露服务时,实际上是通过​向底层云平台申请创建一个负载均衡器​来向外暴露服务;目前LoadBlancer Service支持的云平台已经相对完善,比如国外的GCE、DigitalOcean,国内的阿里云,私有云(Openstack)等等,由于LoadBlancer Service深度结合了云平台,所以只能在一些云平台上使用