详情页标题前

阿里云容器服务ACK服务发现DNS-云淘科技

详情页1

DNS域名解析是ACK Serverless集群内实现服务发现的方式之一。本文主要介绍ACK Serverless集群中DNS域名解析原理和DNS服务发现方案。

索引

  • 注意事项

  • ACK Serverless集群中DNS域名解析原理

  • ACK Serverless集群支持的DNS服务发现方案

  • 常见问题

  • 相关文档

注意事项

  • 如果在创建ACK Serverless集群时,未开启任意DNS服务发现组件,容器Pod将默认使用VPC提供的DNS服务器进行域名解析。该模式下不支持Kubernetes内Service服务名的域名解析。

  • 对于已创建的ACK Serverless集群,启用DNS服务发现方案仅对新建的容器Pod生效,即启用前创建的容器Pod并不会随着方案的启用而切换其DNS配置文件,需重新创建容器Pod来使其接入新的DNS服务发现方案。

  • CoreDNS(托管)组件会逐步替换CoreDNS(非托管),直至CoreDNS(非托管)下线,后续您可能无法在控制台看到CoreDNS(非托管)。如需使用CoreDNS(非托管)组件,请提交工单咨询。

ACK Serverless集群中DNS域名解析原理

在ACK Serverless集群创建容器Pod时,默认情况下,/etc/resolv.conf文件的内容如下。该文件指定了DNS服务器、搜索域和一些其他参数。

# nameserver表示本容器Pod使用的DNS服务器IP地址。
nameserver 172.xx.x.xx
# search表示请求服务时需要拼接的域名后缀,当Pod处于kube-system命名空间时如下。
search kube-system.svc.cluster.local svc.cluster.local cluster.local
# 其他参数
options ndots:5

关于DNS域名解析配置文件和Pod DNSPolicy的字段含义,请参见DNS原理和配置说明。

ACK Serverless集群支持的DNS服务发现方案

DNS服务发现方案

说明

CoreDNS(托管)

推荐使用。容器Pod使用CoreDNS(托管)组件进行域名解析,由ACK Serverless来创建并保证CoreDNS的正常运行。您无需关心CoreDNS的运行状态,免除手动运维。此外,该方案不占用集群中的ECI实例。

CoreDNS(非托管)

容器Pod使用CoreDNS(非托管)组件进行域名解析,您必须确保正确配置CoreDNS,并时刻关注CoreDNS副本的运行状态。

PrivateZone

容器Pod使用PrivateZone组件进行域名解析,ACK Serverless会自动创建、更新PrivateZone中的域名解析记录。

CoreDNS(托管)

托管版CoreDNS组件通过kube-system命名空间下的kube-dns服务的集群IP暴露DNS服务。业务Pod使用托管CoreDNS的流程如下。

阿里云容器服务ACK服务发现DNS-云淘科技

链路

说明

客户端(Client Pod)访问上游服务(TargetService)时,会先从本地DNS域名解析配置文件(/etc/resolv.conf)中获取DNS服务器地址,再向DNS服务器地址发出域名解析请求,查询TargetService对应的目标IP地址。

在本方案中,DNS服务器地址为ACK Serverless集群的kube-system命名空间下创建的名为kube-dns集群IP的IP地址。kube-dns的集群IP的后端由ACK Serverless集群负责动态维护更新,您无需关注。

阿里云容器服务ACK服务发现DNS-云淘科技

客户端(Client Pod)请求集群外部域名时,托管CoreDNS会将域名请求转发至VPC提供的DNS服务器(100.100.2.136、100.100.2.138)进行解析。

客户端(Client Pod)通过DNS服务器获取到上游服务(TargetService)的IP地址后,向该IP发出请求。

开启CoreDNS(托管)组件

重要

  • 开启CoreDNS(托管)组件后,ACK Serverless集群会自动在kube-system命名空间下创建名为kube-dns的集群IP服务。请勿手动修改。

  • CoreDNS(托管)组件逐步开放中,如在控制台无法看到CoreDNS(托管)组件,表明当前地域尚未开放支持CoreDNS(托管)组件。CoreDNS(托管)组件的自定义配置功能逐步开放中,如有使用需求,请提交工单咨询。

  • 方式一:对于新建的ACK Serverless集群,您可以在创建集群时,指定CoreDNS(托管)作为DNS服务发现,启用托管版CoreDNS组件。

    阿里云容器服务ACK服务发现DNS-云淘科技

  • 方式二:对于已创建的ACK Serverless集群,您可以在集群管理页面,选择运维管理 > 组件管理,单击网络页签,然后单击CoreDNS(托管)组件的安装,启用托管版CoreDNS组件。具体操作,请参见管理组件。

CoreDNS(非托管)

CoreDNS(非托管)是Kubernetes集群中负责DNS解析的组件,能够支持解析集群内部自定义服务域名和集群外部域名。CoreDNS(非托管)具备丰富的插件集,在集群层面支持自建DNS、自定义Hosts、CNAME、Rewrite等需求。与Kubernetes一样,CoreDNS项目由CNCF托管,关于CNCF的更多信息,请参见CNCF。关于CoreDNS的更多信息,请参见CoreDNS: DNS and Service Discovery。

非托管版CoreDNS组件通过kube-system命名空间下的kube-dns集群IP暴露DNS服务,业务Pod使用非托管CoreDNS的流程如下。

阿里云容器服务ACK服务发现DNS-云淘科技

链路

说明

客户端(Client Pod)访问上游服务(TargetService)时,会先从本地DNS域名解析配置文件(/etc/resolv.conf)中获取DNS服务器地址,再向该DNS服务器地址发出域名解析请求,查询TargetService对应的目标IP地址。

在本方案中,DNS服务器地址为ACK Serverless集群kube-system命名空间的kube-dns集群IP的IP地址。

阿里云容器服务ACK服务发现DNS-云淘科技

客户端(Client Pod)请求集群外部域名时,CoreDNS会将域名请求转发至VPC提供的DNS服务器(100.100.2.136、100.100.2.138)进行解析。

客户端(Client Pod)通过DNS服务器获取到上游服务(TargetService)的IP地址后,向该IP发出请求。

开启CoreDNS(非托管)组件

  • 方式一:对于新建的ACK Serverless集群,您可以在创建集群时,指定CoreDNS作为DNS服务发现,启用非托管版CoreDNS组件。

    阿里云容器服务ACK服务发现DNS-云淘科技

  • 方式二:对于已创建的ACK Serverless集群,您可以在集群管理页面,选择运维管理 > 组件管理,单击网络页签,然后单击CoreDNS组件的安装,启用非托管版CoreDNS组件。具体操作,请参见管理组件。

PrivateZone

关于如何使用PrivateZone方案,请参见通过动态监听Kubernetes集群中各个命名空间中的Service、Endpoint资源,动态地将其域名注册至PrivateZone产品中。ACK Serverless中的容器Pod通过PrivateZone DNS解析服务完成Kubernetes的服务发现。关于如何使用,请参见ACK Serverless集群基于云解析PrivateZone的服务发现。

PrivateZone通过VPC提供的DNS服务器(100.100.2.136、100.100.2.138)暴露DNS服务,业务Pod使用PrivateZone的流程如下。

阿里云容器服务ACK服务发现DNS-云淘科技

链路

说明

PrivateZone控制器连接至APIServer,监听集群中服务的创建和更新事件。

PrivateZone控制器监听到服务的创建和更新事件后,将其同步至PrivateZone产品中权威Zone解析记录中。

客户端(Client Pod)访问上游服务(TargetService)时,会先从本地DNS域名解析配置文件(/etc/resolv.conf)中获取DNS服务器地址,再向该DNS服务器地址发出域名解析请求,查询TargetService对应的目标IP地址。

在本方案中,DNS服务器地址为DNS域名解析配置文件中配置VPC提供的DNS服务器IP地址(100.100.2.136、100.100.2.138)。DNS服务器会从PrivateZone获取正确的解析记录,返回给客户端。

客户端(Client Pod)通过DNS服务器拿获取到上游服务(TargetService)的IP地址后,向该IP发出请求。

开启PrivateZone组件

  • 方式一:对于新建的ACK Serverless集群,您可以在创建集群时,指定PrivateZone作为DNS服务发现,启用PrivateZone组件。

    阿里云容器服务ACK服务发现DNS-云淘科技

  • 方式二:对于已创建的ACK Serverless集群,您可以在eci-profile配置项中设置enablePrivateZone参数值为true,启用PrivateZone组件。

常见问题

如何确认当前集群CoreDNS(托管)、CoreDNS(非托管)、PrivateZone组件已成功开启?

  • CoreDNS(托管)和CoreDNS(非托管)组件

    登录容器服务管理控制台,在集群管理页面,选择运维管理 > 组件管理,单击网络页签,如果组件右上角有已安装字样,说明当前集群的CoreDNS(托管)或CoreDNS(非托管)组件已开启成功。

    以CoreDNS(托管)组件为例,如下图所示。

    阿里云容器服务ACK服务发现DNS-云淘科技

  • PrivateZone组件

    登录PrivateZone控制台,通过ACK Serverless的VPC ID搜索权威Zone,如果能够搜到名称以集群ID结尾的Zone,则说明PrivateZone已开启成功。

如何确认业务Pod正在使用CoreDNS(托管)、CoreDNS(非托管)、PrivateZone组件?

  • CoreDNS(托管)和CoreDNS(非托管)组件

    通过执行命令kubectl exec进入容器Pod中,执行命令cat /etc/resolv.conf,如果nameserver字段被指向到kube-system命名空间下的kube-dns服务的集群IP地址,说明该Pod正在使用CoreDNS(托管)或CoreDNS(非托管)组件。

  • PrivateZone组件

    通过执行命令kubectl exec进入容器Pod中,执行命令cat /etc/resolv.conf,如果nameserver字段被指向到100.100.2.136100.100.2.138(此处IP为本文示例IP,具体指向的IP地址以实际为准),说明Pod正在使用PrivateZone组件。

相关文档

  • DNS原理和配置说明

  • DNS最佳实践

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/169310.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云容器服务ACKDNS FAQ-云淘科技

    本文介绍在容器服务ACK集群中DNS相关的常见问题。 为什么通过exec无法进入CoreDNS Pod? 问题现象 使用kubectl -n kube-system exec -it {coredns pod} bash及类似命令无法进入到CoreDNS Pod。 问题原因 CoreDNS所使用的容器镜像是基于Scratch构建,不具备Shell执行环境。 …

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACK使用DNSTAP Analyser诊断异常-云淘科技

    ACK集群的ACK CoreDNS DNSTAP Analyser组件,可以从CoreDNS和客户端之间,CoreDNS和上游DNS服务器之间的请求和响应过程中,对所有产生的DNS网络报文进行归类和识别。借助此工具,您可以快速定位域名无法解析的原因。本文介绍如何使用ACK CoreDNS DNSTAP Analyser诊断CoreDNS域名解析异常。 前提条…

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACKDNS解析异常问题排查-云淘科技

    本文介绍关于DNS解析异常的诊断流程、排查思路、常见解决方案和排查方法。 索引 类别 内容 诊断流程 基本概念 异常诊断流程 常见客户端报错 排查思路 排查思路 常见排查方法 检查业务Pod的DNS配置 检查CoreDNS Pod运行状态 检查CoreDNS运行日志 检查CoreDNS DNS查询请求日志 检查CoreDNS Pod的网络连通性 检查业务Po…

    2023年12月10日
  • 阿里云容器服务ACKDNS FAQ-云淘科技

    本文介绍在容器服务ACK集群中DNS相关的常见问题。 为什么通过exec无法进入CoreDNS Pod? 问题现象 使用kubectl -n kube-system exec -it {coredns pod} bash及类似命令无法进入到CoreDNS Pod。 问题原因 CoreDNS所使用的容器镜像是基于Scratch构建,不具备Shell执行环境。 …

    阿里云容器服务 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACKDNS最佳实践-云淘科技

    DNS是Kubernetes集群中至关重要的基础服务之一,在客户端设置不合理、集群规模较大等情况下DNS容易出现解析超时、解析失败等现象。本文介绍Kubernetes集群中DNS的最佳实践,帮助您避免此类问题。 前提条件 创建Kubernetes托管版集群 获取集群KubeConfig并通过kubectl工具连接集群 本文目录 DNS最佳实践包含客户端和服务…

    阿里云容器服务 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。