一.Service存在的意义:
- 防止Pod失联(服务发现)
- 定义一组Pod的访问策略(负载均衡)
- 支持ClusterIP,NodePort以及LoadBalancer三种类型
- Service的底层实现主要有iptables 和ipvs二种网络模式
二.Pod与Service的关系
- 通过label-selector相关联
- 通过Service实现Pod的负载均衡( TCP/UDP 4层)
三.Service类型
ClusterIP 默认模式,只能在集群内部访问
通过endpoints可知每一个service后端关联的pod
LoadBalancer 要配合支持公有云负载均衡使用比如GCE、AWS。其实也是NodePort,只不过会把<NodeIP>:<NodePort>自动添加到公有云的负载均衡当中
四.Service代理模式
Iptables:
• 灵活,功能强大
• 规则遍历匹配和更新,呈线性时延
• 可扩展性
ipvs(建议)
• 工作在内核态,有更好的性能
• 调度算法丰富:rr,wrr,lc,wlc,ip hash……
通过ipvsadm查看具体转发信息
# yum -y install ipvsadm
# ipvsadm -L -n
五.DNS
DNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析。
下载地址: https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/coredns/coredns.yaml.base(建议复制出来)
下面3部分需要修改:
发布coredns
# kubectl apply -f core-dns.yaml
测试创建busybox:
# vim busybox.yaml
# kubectl apply -f busybox.yaml
# kubectl get svc
# kubectl exec -it busybox -- nslookup nginx-service