1. service存在意义
Service是Kubernetes里最核心的资源对象之一,Service定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实力。 Service与其后端Pod副本集群之间则是通过Label Selector
来实现"无缝对接"。而RC的作用实际上是保证Service 的服务能力和服务质量处于预期的标准。
-
防止Pod失联(服务发现)
-
定义一组Pod访问策略(负载均衡)
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深度结合了云平台,所以只能在一些云平台上使用