3.2.10 服务发现
优化域名解析请求
DNS域名解析请求是Kubernetes最高频的网络行为之一,其中很多请求是可以优化和避免的。您可以通过以下方式优化域名解析请求:
•(推荐)使用连接池:当一个容器应用需要频繁请求另一服务时,推荐使用连接池。连接池可以将请求上游服务的链接缓存在内存中,避免每次访问时域名解析和TCP建连的开销。
•使用DNS缓存:
•(推荐)当您的应用无法改造成通过连接池连接另一服务时,可以考虑在应用侧缓存DNS解析结果,具体操作,请参见使用节点DNS缓存NodeLocal DNSCache。
•如果NodeLocal DNSCache无法适用的,可以在容器内置NSCD(Name Service Cache1Daemon)缓存。关于如何使用NSCD缓存,请参见在Kubernetes集群中使用NSCD。
•优化resolv.conf文件:由于resolv.conf文件中ndots和search两个参数的机制作用,容器内配置域名的不同写法决定了域名解析的效率,关于ndots和search两个参数的机制详情,请参见DNS原理和配置说明。
•优化域名配置:当容器内应用需要访问某域名时,该域名按以下原则配置,可以最大程度减少域名解析尝试次数,继而减少域名解析耗时。
•Pod访问同命名空间的Service,优先使用访问,其中service-name代指Service名称。
•Pod跨命名空间访问Service,优先使用.访问,其中namespace-name代指Service所处的命名空间。
•Pod访问集群外部域名时,优先使用FQDN类型域名访问,这类域名通过常见域名最后加半角句号(.)的方式来指定地址,可以避免search搜索域拼接带来的多次无效搜索,例如需要访问www.aliyun.com,则优先使用FQDN类型域名www.aliyun.com.来访问。
使用合适的容器镜像
Alpine容器镜像内置的musl libc库与标准glibc的实现存在以下差异:
•3.3及更早版本Alpine不支持search参数,不支持搜索域,无法完成服务发现。
•并发请求/etc/resolv.conf中配置的多个DNS服务器,导致NodeLocal DNSCache优化失效。
•并发使用同一Socket请求A和AAAA记录,在旧版本内核上触发Conntrack源端口冲突导致丢包问题。
关于以上问题的更多信息,请参见musl libc。
当Kubernetes集群中部署的容器采用了Alpine作为基础镜像时,可能会因为上述musl libc特性而无法正常解析域名,建议尝试更换基础镜像,如Debian、CentOS等。
使用合适的CoreDNS版本
CoreDNS对Kubernetes版本实现了较好的向后兼容,建议您保持CoreDNS版本为较新的稳定版本。ACK组件管理中心提供了CoreDNS的安装、升级能力,您可以关注组件管理中组件状态,若CoreDNS组件显示可升级,请尽快选择业务低峰期进行升级。
•关于升级的具体操作,请参见CoreDNS自动升级。
•关于CoreDNS版本的发布记,请参见CoreDNS。CoreDNS v1.7.0以下的版本存在风险隐患,包括且不仅限于以下:
•CoreDNS与APIServer连通性异常(例如APIServer重启、APIServer迁移、网络抖动)时,CoreDNS会因错误日志写入失败导致容器重启。更多信息,请参见Set klog's logtostderr flflag。
•启动CoreDNS时会占用额外内存,默认采用的Memory1Limit在较大规模集群下可能触发OOM(OutOfMemory)问题,严重时可能导致CoreDNS1Pod反复重启下可能触发OOM(OutOfMemory)问题,严重时可能导致CoreDNS Pod反复重启无法自动恢复。更多信息,请参见CoreDNS uses a lot memory during initialization phase。
•CoreDNS存在若干可能影响Headless Service域名、集群外部域名解析的问题。更多信息,请参见plugin/kubernetes: handle tombstones in default processor和Data is not synced when CoreDNS reconnects to kubernetes api server after protracted disconnection。
•在集群节点异常情况下,部分旧版本CoreDNS默认采用的容忍策略,可能会导致CoreDNS Pod部署在异常节点上,且CoreDNS Pod无法被自动驱逐,继而导致域名解析异常。
《企业级云原生白皮书项目实战》——第三章 容器——3.2 业务部署——3.2.10 服务发现(2) https://developer.aliyun.com/article/1229230?groupCode=supportservice