亚马逊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 资源期待更多专家探讨。

本篇作者

张雪斌

AWS 迁移技术客户经理,曾就职于 IBM、金蝶、腾讯专有云等高科技公司,拥有 15 年以上从业经验,在云计算,数据库,容器及微服务等技术方向有一定研究,擅长解决方案设计及技术选型和落地。

郭俊龙

亚马逊云科技解决方案架构师,主要负责游戏行业客户解决方案设计,比较擅长云原生微服务以及大数据方案设计和实践。

梁国衍

亚马逊云科技技术客户经理,负责企业级客户出海业务的架构设计、成本优化和技术支持等工作。曾就职于 IBM、腾讯等公司,拥有十年以上的 IT 架构、运维经验,在云网络架构、云安全、CDN、微服务化架构等方面拥有丰富的实战经验。