一种容器云平台为应用设置租户专用dns服务器的方法
技术领域
1.本发明涉及租户专用dns服务器的设置技术领域,尤其涉及一种容器云平台为应用设置租户专用dns服务器的方法。
背景技术:2.当前容器云平台大部分基于k8s(k8s是kubernetes的简称,是容器云平台通用的开源容器编排架构,能够实现容器的自动调度、扩展、故障恢复等)框架,面向用户提供以应用管理为核心的功能体系。容器化应用以工作负载的形式部署在kubernetes集群上,每个工作负载可以同时运行1个或多个实例(pod),pod是k8s的最小管理单元,由1个或多个容器组成,这些容器共享进程、网络等命名空间。每个pod具有独自的网络信息配置,比如dns配置文件/etc/resolv.conf。
3.在生产环境中,应用之间经常通过域名来相互访问,每个应用在其所在网络空间的dns服务器配置文件中配置固定的dns服务器的ip,通过域名服务器解析并返回被调用方的实际ip。这样做的好处是当被调用方的访问ip发生变化时,只要域名不变化,请求发起方无需做任何改动。在容器云平台中,每个pod所在网络空间会有独自的/etc/resolv.conf文件中,该文件中记录了域名服务器的ip。默认情况下,该ip为k8s集群自带的dns服务器ip,同时k8s也支持为每个工作负载单独设置dnspolicy(域名解析策略),修改/etc/resolv.conf文件,用来填写指定的dns服务器ip。工作负载是k8s上应用组件的部署形式,包括deployment(无状态负载)/statefulset(有状态负载)/job(任务)/cronjob(定时任务)/daemonset(守护进程)等多种形式。
4.在实际场景中,每个租户往往有自己的一套专用dns服务器,租户内部所有的应用按照规范都需要连接该dns服务器去做域名解析,从而进行相互访问。按照k8s标准的设计机制,在这种场景下,租户的所有应用在创建工作负载时都需要指定dnspolicy。这种设计方案带来的问题包括:应用开发人员在部署应用时需要准确知晓dns服务器的ip,并进行相关的配置,会导致开发和运维在dns服务器设置上的耦合;当租户内有大量应用时,一旦dns服务器ip发生变化,那所有应用都需要重新修改工作负载的配置并重新创建,极易造成遗漏,不同应用开发团队之间的沟通也会带来一定的时间和人力成本。对于这些问题,我们需要一种更加智能化、自动化的租户级专用dns服务器设置的方法。
技术实现要素:5.本发明的目的就是为了解决上述问题,提供一种容器云平台为应用设置租户专用dns服务器的方法,无需在创建工作负载时指定dnspolicy,从而减少应用开发与运维在dns服务器配置上的耦合,避免租户内有大量应用场景下dns服务器变更带来的遗漏、时间和人力成本等风险。
6.为了实现上述目的,本发明采用如下技术方案:
7.一种容器云平台为应用设置租户专用dns服务器的方法,包括:
8.步骤一、在集群初始化时,将域名解析策略自动设置工具注册到k8s容器编排系统对外服务接口的参数中;
9.步骤二、在为工作负载创建实例pod时,k8s容器编排系统的对外服务接口自动调用所述的域名解析策略自动设置工具,将实例pod的域名解析策略设置为租户专属dns服务器ip。
10.所述域名解析策略自动设置工具的工作方法包括:
11.步骤1.1、与云平台数据库交互,获取租户对应的专属dns服务器ip;
12.步骤1.2、在为工作负载创建实例pod的过程中,获取当前实例pod所属的租户,并查询到租户对应的专用dns服务器;
13.步骤1.3、修改当前实例pod的域名解析策略为租户专属dns服务器ip。
14.所述云平台数据库中存储有租户与专属dns服务器ip信息的对应关系。
15.当租户专属dns服务器ip发生变化时,一次性批量删除所有租户下的pod,等待pod自动重新创建,创建过程中再次调用域名解析策略自动设置工具,将实例pod的域名解析策略设置为最新的租户专属dns服务器ip。
16.本发明的有益效果:
17.(1)无需在每个工作负载创建的时候设置dns服务器,做到dns服务器设置与工作负载解耦。
18.(2)dns服务器地址有变动时,无需更新工作负载,直接删除所有pod,等待pod自动创建即可应用最新的dns服务器地址设置,提高整体更新效率。
19.(3)整体方案灵活,易于扩展,有新的需求直接修改adminssion controller处理逻辑,无需修改。
附图说明
20.图1为本发明的方法流程图。
具体实施方式
21.下面结合附图与实施例对本发明作进一步说明。
22.如图1所示,一种容器云平台为应用设置租户专用dns服务器的方法,包括:
23.在云平台层,将租户与专属dns服务器ip信息的关系维护在数据库中;
24.在集群初始化时,将dnspolicy自动设置controller注册到kube-apiserver的参数中;kube-apiserver为k8s容器编排系统的对外服务api,k8s中所有资源的相关操作需要调用kube-apiserver相关接口来实现;
25.当有pod创建时,kube-apiserver自动调用已注册的controller,对pod信息进行修改,将dnspolicy修改为租户专属dns服务器ip。
26.dnspolicy自动设置controller的工作方法包括:
27.与云平台数据库交互,获取租户对应的专属dns服务器ip;
28.对pod信息进行修改,根据pod所属namespace对应租户,设置dnspolicy为租户专属dns服务器ip。namespace为k8s的一类资源,用来进行k8s资源的分组管理,常用来与云平台中的租户相对应,即一个namespace中的资源归属于同一个租户。
29.当租户专属dns服务器ip发生变化时,一次性批量删除所有租户下的pod,等待pod自动重新创建,创建过程中同样调用dnspolicy自动设置controller,基于最新的租户专属dns服务器ip实现pod dnspolicy修改。
30.本发明基于k8s的adminssion webhook机制,通过开发dnspolicy自动设置工具,在为工作负载创建pod的过程中查询到当前工作负载所属租户(namespace)与专用dns服务器的关系,并自动设置相应的dnspolicy,无需在创建工作负载时指定dnspolicy,从而减少应用开发与运维在dns服务器配置上的耦合,避免租户内有大量应用场景下dns服务器变更带来的遗漏、时间和人力成本等风险。
31.k8s提供admission webhook机制,允许在创建资源的过程中,调用自定义的admission controller,进行校验、修改动作。基于此机制,可以实现dnspolicy自动设置controller,在为工作负载创建pod的过程中,获取当前pod所属namespace,并查询到该namespace对应的专用dns服务器,修改pod的dnspolicy,设置为专用dns服务器ip。
32.应用开发人员在创建工作负载时无需指定dnspolicy。当租户专用dns服务器ip地址发生变更时,只需要批量删除该租户下所有的pod,pod会自动重建并在创建过程中再次根据admission webhook机制自动更新dnspolicy为最新的dns服务器ip地址,避免修改工作负载带来的遗漏、时间和人力成本。
33.上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。