更新时间:2024-04-11 GMT+08:00
分享

方案概述

应用现状

当前,越来越多的软件采用微服务架构,构建一个产品时会大量使用微服务,不同微服务之间访问时涉及到域名访问。

拥有自建IDC的企业,在使用CCE时通常需要在CCE集群与自建IDC之间通信,而且当IDC有内部域名时,需要CCE集群内的节点和容器既能够解析IDC的域名,也能够解析云域名。

例如,某企业APP微服务改造后,其管理后台部署在CCE集群上,内容审核服务部署在企业原有的IDC,该企业同时购买了华为云图像识别服务。CCE所在的VPC和原有的IDC之间通过专线进行连接。部署架构如图1所示。

当用户访问该企业的APP时,不同微服务之间涉及到如下交互:

  • CCE集群访问华为云图像识别服务时,默认使用华为云域名解析服务器。
  • CCE集群访问IDC上部署的内容审核服务时,需要使用IDC内部域名服务器。

这就需要在CCE集群上既能使用华为云域名解析服务器,也能够使用IDC内部域名服务器。如果将CCE节点上域名解析服务器指向IDC的域名解析服务器,那会导致无法解析华为云的域名;如果修改hosts文件配置增加IDC内部域名IP,在IDC内部服务IP变化时需要实时刷新CCE节点的配置,这很难做到且会导致不可用。

内容审核服务与图像识别服务仅为举例,也可以是其他服务。

图1 某企业APP微服务示意图

本文介绍一种自建IDC与CCE集群共享域名解析的方案,可做到同时解析华为云域名和外部域名。

解决方案一:通过DNS Endpoint做级联解析

利用VPCEP服务创建DNS Endpoint,使得IDC能访问华为云域名解析服务器,将DNS Endpoint与IDC的域名解析服务器做级联,从而使得CCE集群中节点及容器在域名解析时,通过IDC的域名解析服务器进行解析。

  • 如果是需要解析华为云内域名,则转发给DNS Endpoint,使用华为云DNS解析出地址并返回。
  • 如果是需要解析IDC域名,则直接通过IDC的域名解析服务器直接解析出地址并返回。
图2 节点同时访问华为云域名和外部域名

对于容器中的域名解析,可在创建Pod时将DNS Policy设置为ClusterFirst,这样容器中的域名解析直接走CoreDNS。

  • 如果是需要解析集群内域名,则CoreDNS直接解析出结果返回。
  • 如果是解析外部域名,则通过CoreDNS,转到IDC的域名解析服务器解析。
图3 容器同时访问华为云域名和外部域名

解决方案二:修改CoreDNS配置直接解析

直接修改CoreDNS配置,可在创建Pod时将DNS Policy设置为ClusterFirst,这样容器中的域名解析直接走CoreDNS。

  • 如果是需要解析集群内域名,则CoreDNS直接解析出结果返回。
  • 如果是解析外部域名,则通过CoreDNS,转到IDC的域名解析服务器解析。
  • 如果是访问华为云内部域名,则直接使用华为云内部域名解析服务器解析
图4 方案二:修改CoreDNS配置

方案比较

方案

优点

缺点

方案一:通过DNS Endpoint做级联解析

支持在CCE集群节点容器与节点同时解析外部域名

解析华为云内部域名时也需要通过外部域名解析服务器转发,存在性能损耗

方案二:修改CoreDNS配置

解析华为云内部域名时无需要通过外部域名解析服务器转发,不存在性能损耗

  • 不支持在CCE集群节点解析外部域名。
  • Coredns升级、回退会导致配置会丢失,需要重新配置。
分享:

    相关文档

    相关产品