service是一组pod的服务抽象,相当于一组pod的LB,负责将请求分发给对应的pod。service会为这个LB提供一个IP,一般称为cluster IP 。使用Service对象,通过selector进行标签选择,找到对应的Pod:
kubectl create ns test
yaml:
apiVersion: v1
kind: Service
metadata:
name: mysvc
namespace: test
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8002
selector:
app: mysvc
type: ClusterIP
kubectl create test.yaml
kubectl get endpoints mysvc
service对象创建的同时,会创建同名的endpoints对象,若服务设置了readinessProbe, 当readinessProbe检测失败时,endpoints列表中会剔除掉对应的pod_ip,这样流量就不会分发到健康检测失败的Pod中
为mysql服务创建service:
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: test
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
selector:
app: mysql
type: ClusterIP
访问mysql:
kubectl get svc mysql
mysql ClusterIP 10.108.213.86 <none> 3306/TCP 3s
curl 10.108.213.86:3306