ExternalName类型的Service映射到一个外部的DNSName,而不是一个pod label selector
。可通过spec.externalName
字段指定外部DNSName。
|
|
执行nslookup my-service.prod.svc.cluster.local
指令时,集群的DNS服务将返回一个CNAME记录,其对应的值为my.database.example.com
。
访问my-service与访问其他类型的Service相比,网络请求的转发发生在DNSLevel,而不是使用proxy(理解为各个服务再次请求一次DNS么)。
External Ip
(我对这部分的应用不是很理解,所以暂时不处理了)
区分ExternalName、HeadlessService、无SelectorLabel
再不区分,会将这些概念混在一起的。
ExternalName是Service中的一种类型,其特点在于从CoreDNS请求该Service时,返回的是一个CNAME记录,且这个记录的值就是externalName字段记录的。我觉得一个应用点是,搞个ExternalName,然后将这个ExternalName设置成一些第三方的API接口地址,这样,我们代码里就可以使用ServiceName了,但是感觉这种应用根本就不是痛点。
HeadlessService就是将ClusterIp字段设置为空。
无SelectorLabel就是不选择目标的Pod,由用户手动创建Endpoint。