服务发现机制
Kubernetes提供了两种发现Service的方法:
1.环境变量
当Pod运行的时候,Kubernetes会将之前存在的Service的信息通过环境变量写到Pod中。
这种方法要求Pod必须要在Service之后启动。
在Service之前启动的Pod就不会有该Service的环境变量。
采用DNS的方式就没有这个限制。
2.DNS
当有新的Service创建时,就会自动生成一条DNS记录。
使用这种方法,需要安装Cluster DNS。
在kubernetes中每一个service都会被分配一个虚拟IP,每一个Service在正常情况下都会长时间不会改变,这个相对于pod的不定IP,对于集群中APP的使用相对是稳定的。但是Service的信息注入到pod目前使用的是环境变量的方式,并且十分依赖于pod(rc)和service的创建顺序,这使得这个集群看起来又不那么完美,于是kubernetes以插件的方式引入了DNS系统,利用DNS对Service进行一个映射,这样我们在APP中直接使用域名进行引用,避免了之前的变量泛滥问题,也避免了创建顺序的尴尬局面。
Cluster DNS扩展插件用于支持Kubernetes的服务发现机制,Cluster DNS主要包含如下几项:
● SkyDNS:提供DNS解析服务
● Etcd:用于SkyDNS的存储
● Kube2sky:监听Kubernetes,当有新的Service创建时,生成相应记录到SkyDNS。