一、Service简介
- Service为Pod提供固定服务端点
- Service的本质是一条iptables或者ipvs的转发规则
- userspace:1.1-
- iptables:1.1+
- ipvs:1.11+
二、Service类型
- ExternalName
- ClusterIP:使用集群网络提供服务
- NodePort:直接使用节点网络提供服务
- LoadBalancer:例如k8s构建在阿里云上,可以直接使用阿里云提供的SLB服务
三、使用清单创建service
# cat redis-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: redis-svc
namespace: default
spec:
selector: #支持等值选择器
app: redis
role: logstor
clusterIP: 10.99.99.99 #客户不指定,会自动分配
type: ClusterIP
ports:
- port: 6379 #Service端端口
targetPort: 6379 #Pod端端口
# cat myapp-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
namespace: default
spec:
selector: #支持等值选择器
app: myapp
release: canary
clusterIP: 10.99.99.100
type: NodePort
ports:
- port: 80 #Service端端口
targetPort: 80 #Pod端端口
nodePort: 10080 #节点端端口,端口范围:30000-32767
四、资源记录
- SVC_NAME.NS_NAME.DOMAIN.LTD. :资源记录格式
- svc.cluster.local. :默认域名后缀
- redis-svc.default.svc.cluster.local. :以上redis-svc的资源记录endpoint
五、回话粘性
# kubectl patch svc myapp-svc -p '{"spec":{"sessionAffinity":"ClientIP"}}' #来自同一个IP的客户端调度到同一个pod,默认none
六、无头Service(Headless)
- 正常的service:service_name --> cluster_ip
- 无头的service:service_name --> pod_ip
# cat myapp-svc-headless.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc-headless
namespace: default
spec:
selector:
app: myapp
release: canary
clusterIP: "None"
ports:
- port: 80
targetPort: 80
# dig -t A myapp-svc-headless.default.svc.cluster.local. @10.244.0.2 #10.244.0.2为coreDNS的地址,可以解析到myAPP的pod的所以ip
七、开启kubernetes支持ipvs
# vim /etc/sysconfig/kubelet
KUBE_PROXY_MODE=ipvs
开机装载ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4模块