kubernete的service
◆Service的工作模式:userspace, iptables, ipvs
•userspace: 1.1以前;已被淘汰。
•iptables: 1.10以前
• 灵活,功能强大
• 规则遍历匹配和更新,呈线性时延
• 可扩展性
•ipvs: 1.11以后,若没有配置ipvs,则降级为iptables;
• 工作在内核态,有更好的性能
• 调度算法丰富:rr,wrr,lc,wlc,ip hash
◆Service的类型:即服务的对外暴露方式。
•ExternalName:当Service类型是ExternalName时,Service所关联的不是本地Pod应用,而是集群外部的服务。从而实现集群内部的Pod应用调用集群外部的服务,可以把集群外部的服务当作内部服务一样去调用它。当Service类型是ExternalName时,spec.externalName字段才生效。
•ClusterIP:默认,自动分配一个仅cluster内部可以访问的虚拟IP,用于集群内部通信。
•NodePort:分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务,可以在集群外部访问。 访问地址:node端口范围30000-32067。
流:Client→NodeIP:NodePort→ClusterIP:ServicePort→PodIP:containerPort。
•LoadBalancer:分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务。 Kubernetes会请求底层云平台上的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去。
◆service例(类型:ClusterIP/redis-svc.yaml)
1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: redis 5 namespace: default 6 spec: 7 selector: 8 app: redis 9 role: logstor 10 clusterIP: 10.96.97.97 11 type: ClusterIP 12 ports: 13 - port: 6379 14 targetPort: 6379
●确认
创建:kubectl apply -f redis-svc.yaml
查看服务:kubectl get svc
kubectl describe svc redis
查看端口:ss -tnl
◆service例(类型:NodePort/nginx-svc.yaml)
1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: nginx 5 namespace: default 6 spec: 7 selector: 8 app: nginx 9 clusterIP: 10.96.97.97 10 type: NodePort 11 ports: 12 - port: 80 13 targetPort: 80 14 nodePort: 30080
•测试方法:#while true; do curl http://node:30080/; sleep 1; done
▶无头(headless)service
1 apiVersion: v1 2 kind: Service 3 metadata: 4 name: nginx 5 namespace: default 6 spec: 7 selector: 8 app: nginx 9 clusterIP: None #无头service仅支持类型为clusterIP。 10 ports: 11 - port: 80 12 targetPort: 80
◆资源记录:
格式:SVC_NAME.NS_NAME.DOMAIN.LTD.
svc.cluster.local.