亚马逊AWS官方博客
如何优雅地修改 EKS 默认域名及实现网络直通访问 EKS 内部资源
前言概述
在 EKS 集群中,service 和 pod 都可以通过域名的形式进行相互通信,通过定义有归属性的 service 名来进行业务区分和直接访问应用。完整的 service 域名解析是:<servicename>.<namespace>.svc.<clusterdomain> 其中,servicename 为 service 名称,namespace 为 service 所处的命名空间,clusterdomain 是 k8s 集群设计的域名后缀,默认为 cluster.local,但在实际使用中可能因某些原因需要在 EKS 配置企业自定义域名和实现扁平化直通访问 EKS 内部资源,例如:
- 公司策略和合规要求需要在企业内部统一域名管理,需将默认域名 cluster.local 修改为公司自定义域名从而进行规范管理
- 在某些非生产环境需通过内部事先定义好的服务命名直接访问 EKS 内部服务资源,一则实现扁平化直接访问简化管理,二则可节省 EKS 服务通过 ELB 发布所占用的实例费用
本文着重介绍如何快速优雅地修改 EKS 默认域名为自定义域名,并实现从 EKS 集群外部扁平化直接访问 EKS 内部服务资源。
实验环境
![]() |
架构介绍:
- 此实验环境主要以图中所示开发测试环境为参考
- Kubernetes 集群采用 EKS 1.26 版本部署于独立开发测试 VPC
- 装有 kubectl 的操作机一台,位于用户管理 VPC,通过 TGW 和开发测试 VPC 互联
- 在 EKS 集群采用 node 节点 ENI 网卡作为进入 EKS 节点路由入口
- 使用 mytest.com 作为 EKS 集群自定义域名
操作步骤
1. 域名修改:修改 coreDNS configmap 中 cluster domain 为自定义 domain-name,同时修改 cm 中注解部分 cluster domain 为自定义 domain-name
EKS 默认使用的 cluster domain 域名为“cluster.local”,需要将其修改为“mytest.com”。
修改前:
![]() |
Pod 中查看 DNS 信息均为 cluster.local 为后缀
![]() |
执行 kubectl edit cm/coredns -n kube-system 修改 cluster.local 为 mytest.com
修改后:
![]() |
2. 修改现有 node 节点上 kubelet 的 config 中 cluster domain 为自定义 domain-name,重启 kubelet 服务
![]() |
3. 重启正在运行中的 pod,以便更新 pod 中 resolv.conf 的配置,此时看到域名的后缀已经变为自定义域名“mytest.com”
![]() |
4. 为了后续增加或更新节点能自动更新 kubelet 的配置,修改启动模板参数为 /etc/eks/bootstrap.sh EKS-Cluster-Name —kubelet-extra-args —cluster-domain=custom-domain-name
![]() |
5. 关闭 EKS 节点 ENI 检查源目的地址检查实现路由转发,更新节点所在子网路由表添加指向到 service 地址的下一跳为入口节点上的 ENI
![]() |
![]() |
6. 跨 VPC 源端添加指向访问 EKS service 下一跳为 TGW,TGW 添加静态路由指向访问 EKS service 下一跳转向目标 VPC,同时检查对应回程路由
![]() |
验证
经上述步骤配置,EKS 集群默认域名 cluster.local 已经变更为 “mytest.com”,且已打通外部网络和 EKS 内部网络扁平化直连互通。
如公司内部 DNS 已经集成 EKS coreDNS 解析能力,那么在 EKS 外部可以通过 FQDN 解析 EKS 集群内部 service 对应 IP 地址并进行直接访问。
![]() |
小结
EKS 使用案例万千,此篇博文仅作抛砖引玉,随着 EKS 作为基础设施的普及,越来越多的用户采用 EKS 作为公司业务运行的基础资源平台,如何简洁高效地使用和管理 EKS 资源期待更多专家探讨。