一、service概述
service 是 Kubernetes 最核心概念,通过创建 Service,可以为一组具有相同功能的容器应 用提供一个统一的入口地 址,并且将请求负载分发到后端的各个容器应用上。
二、service定义
# yaml格式的pod定义文件完整内容:
apiVersion: v1 #必选,版本号,例如v1
kind: Service #必选,Service
matadata: #必选,元数据
name: string #必选,Service名称
namespace: string #必选,Service所属的命名空间
labels:
- name: string #自定义标签名字
annotations: #自定义注释列表
- name: string
spec:
selector: [] #Label Selector配置,选择具有指定label标签的pod作为管理范围
type: string
#service的类型,指定service的访问方式,默认ClusterIP
#ClusterIP:虚拟的服务ip地址,用于k8s集群内部的pod访问,在Node上kube-porxy通过设置的iptables规则进行转发
#NodePort:使用宿主机端口,能够访问各Node的外部客户端通过Node的IP和端口就能访问服务器
#LoadBalancer:使用外部负载均衡器完成到服务器的负载分发
clusterIP: string
#虚拟服务IP地址,当type=ClusterIP时,如不指定,则系统会自动进行分配,也可以手动指定。当type=loadBalancer,需要指定
sessionAffinity: string
#是否支持session,可选值为ClietIP,默认值为空
#ClientIP表示将同一个客户端(根据客户端IP地址决定)的访问请求都转发到同一个后端Pod
ports: #service需要暴露的端口列表
- name: string #端口名称
protocol: string #端口协议,支持TCP或UDP,默认TCP
port: int #服务监听的端口号
targetPort: int #需要转发到后端的端口号
nodePort: int #当type=NodePort时,指定映射到物理机的端口号
status: #当type=LoadBalancer时,设置外部负载均衡的地址,用于公有云环境
loadBalancer: #外部负载均衡器
ingress: #外部负载均衡器
ip: string #外部负载均衡器的IP地址
hostname: string #外部负载均衡器的机主机
三、Service类型
1、ClusterIp
默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP
2、NodePort
在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过: NodePort来访问该服务。
3、LoadBalancer
LoadBalancer和NodePort其实是同一种方式。区别在于LoadBalancer比NodePort多了一步,就是可以调用Cloud provider去创建LB来向节点导流。