kubernetes中服务主要用来进行服务发现和负载均衡。
在集群中我们的工作负载是不稳定的,ip地址可能随着pod重启,升级和扩容等不断发生变化,为了能够让其他工作负载可以稳定访问到这个工作负载,我们需要为其创建一个服务对象。
服务对象也是一个api资源对象,和其他api对象定义方法相同,下面是一个服务对象的定义:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
# 根据标签选择pod
app: nginx
# type: ClusterIP
# clusterIP: 192.168.3.251
ports:
# TCP, UDP, SCTP
- protocol: TCP
appProtocol: http
name: nginx-http
port: 80
targetPort: 80
# 支持多个端口配置
- name: https
protocol: TCP
port: 443
targetPort: 9377
externalTrafficPolicy: Cluster
这个服务对象会创建一个service资源,服务控制器会根据我们的selector选择对应的pod,创建endpoint后endpointslice资源关联到这个服务。服务控制器还会为我们的服务自动创建一个虚拟ip地址,其他工作负载使用这个虚拟ip地址访问这个服务。endpoint资源代表后端真正的服务实例,它关联到pod,访问到虚拟ip的流量会转到对应的后端pod对应的端口上。
通过selector可以让kunbernetes根据标签自动选择pod并创建endpoint关联到service。有些场景我们也可以不使用selector,例如:
引用已有服务的ip列表
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 443
targetPort: 6443…
kubernetes网络 – 服务概念
发布于