一、Service的概念
Service能够为应用提供一个统一的访问地址(入口地址),并且,Service也提供了负载均衡功能,从而将客户端的请求分发到后端的各个容器中。
Service的两个主要作用:
- 通过标签Label与Pod关联,实现与Pod的通信
- 提供不同的访问策略,以实现访问Pod请求的负载均衡
这里以NodePort规则访问来进行说明
1、用户访问192.168.190.200:30014
2、k8s集群根据用户访问的30014端口号找到对应的service
3、service根据同名的endpoints中绑定的Pod IP地址进行负载均衡,转发给其中一个pod
4、根据pod IP 和端口号请求指定服务
二、Service资源的四种类型
2.1 ClusterIP
ClusterIP是Service默认的发布类型。它将在集群内部分配一个可以访问的虚拟IP地址,通过IP地址暴露服务。因此,这类型的Service只能实现同一个集群内部之间的相互访问。
示例:
[root@master clusterIp]# cat service-clusterip.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: deploy-clusterip
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: ngin
---
apiVersion: v1
kind: Service
metadata:
name: service-clusterip
spec:
ports:
- name: http
port: 1234
protocol: TCP
targetPort: 80
selector:
app: nginx
[root@master clusterIp]# kubectl apply -f service-clusterip.yaml
访问:[root@master clusterIp]# curl 10.11.71.44:1234
2.2 NodePort
把Service的type字段设置为NodePort时,Kubernetes将在每个节点上随机分配一个端口作为外部用户的访问入口(该端口号的默认范围是30000-32767,也是可以修改的)。