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 
View Code

●确认

创建: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
View Code

•测试方法:#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
View Code

◆资源记录:

格式:SVC_NAME.NS_NAME.DOMAIN.LTD.

svc.cluster.local.

posted @ 2020-02-05 20:34  山的那一边  阅读(183)  评论(0编辑  收藏  举报