前言
在这里,你将了解 Kubernetes 集群如何实现通过服务名,进行服务发现,负载均衡,调用后端服务。
这里,我们以服务名为ticknet
为例,假设我们要访问内部服务ticknet的某个http接口,则,我们的请求链接格式可以是:http://ticknet/get/user/10000
目录
- kube-dns服务发现原理
- kube-proxy实现负载均衡
- 总结
- 参考
1. kube-dns服务发现原理
DNS:我们非常熟悉且最简单的一种方式,跟域名和IP映射的原理类似,我们可以将服务域名名称和一到多个机器IP进行关联或者是一个负载均衡器(指向服负载均衡好处是可以避免失效DNS条目问题)。DNS的服务发现方式最大的优点就是它是一种大家熟知的标准形式,技术支持性好。缺点就是当服务节点的启动和销毁变得更加动态时DNS更新条目很难做到高可用和实时性。
K8S选择的是DNS作服务发现,除此之外,感兴趣还可以了解Zookeeper
、Consoul
、Doozerd
、Eureka
、Etcd
注意:Etcd在k8s集群中的作用是用于保存集群所有的网络配置和对象的状态信息。如果etcd需要实现负载均衡,需要与第三方工具结合,常与Registrator(通过检查容器在线或停止来完成相关服务数据的注册和更新)和Confd(为轻量级的配置管理工具通过储存在Etcd中的数据来保持配置文件的最新状态)结合。
a. kube-dns原理
- kube-dns组成
etcd存储SkyDNS需要的各种数据;kube2sky是数据写入方;skydns是数据读入方;execheathz是辅助容器,有健康检查作用。 - 域名格式