深入理解Service
-
防止Pod失联(服务发现)
-
定义一组Pod的访问策略(负载均衡)
8.2 Pod与Service的关系
-
通过label-selector相关联
-
-
8.2 Service三种类型
-
ClusterIP:集群内部使用,默认,分配一个稳定的IP地址,即VIP,只能在集群内部访问(同Namespace内的Pod)。
-
NodePort:对外暴露应用。在每个节点上启用一个端口来暴露服务,可以在集群外部访问。也会分配一个稳定内部集群IP地址。访问地址:<NodeIP>:<NodePort>
-
LoadBalancer:对外暴露应用,适用公有云、与NodePort类似,在每个节点上启用一个端口来暴露服务。除此之外,Kubernetes会请求底层云平台上的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去。
-
Iptables:
-
灵活,功能强大
-
规则遍历匹配和更新,呈线性时延
IPVS:
-
工作在内核态,有更好的性能
-
调度算法丰富:rr,wrr,lc,wlc,ip hash...
启用ipvs:
lsmod|grep ip_vs kubectl edit configmap kube-proxy -n kube-system kubectl delete pod xxx -n kube-system ipvsadm -ln
Service DNS名称
DNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析。
ClusterIP A记录格式:<service-name>.<namespace-name>.svc.cluster.local
示例:my-svc.my-namespace.svc.cluster.local
小结
-
采用NodePort对外暴露应用,前面加一个LB实现统一访问入口
-
优先使用IPVS代理模式
-
集群内应用采用DNS名称访问