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