24.ExternalName

ExternalName类型的Service映射到一个外部的DNSName,而不是一个pod label selector。可通过spec.externalName字段指定外部DNSName。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

apiVersion: v1
kind: Service
metadata:
    name: my-service
    namespace: prod
spec:
    type: ExternalName
    externalName: my.database.example.com

执行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。