OCI DNS服务是一种分布式的域名解析服务,覆盖了公网域名解析、内网域名解析等域名解析场景。OCI DNS能够帮助用户将易于管理识别的域名转换为计算机用于互连通信的数字IP地址的服务。为广大用户提供稳定、安全、快速、智能的域名解析服务。通过采用复制技术和缓存技术使得整个DNS服务可靠的同时,又拥有良好的性能。某种意义上说,OCI DNS服务是一种控制平面,可将用户引导至 Internet 上的各种资源,从而有效地引导用户、服务器和应用程序在互联网上的连接。Oracle 云基础设施 DNS 将用户友好的域名快速转换为服务器和网络可读的地址,从而在几毫秒内建立 OCI上运行的Web 服务器的连接。OCI DNS具有如下特点:
基于全球任播网络(Global Anycast Network),提高站点可用性,降低网络延迟
可以作为主要权威或者辅助权威DNS服务为关键任务资源提供解析服务
集成的OCI控制台以进行设置、配置和监控,提供易用性
DNS和其他OCI服务的通用身份管理
内置DDoS保护有助于缓解攻击,提高应用站点可用性
传统企业部署模型,通常是由多个孤立业务单元,来处理部署过程的不同部分,容器化的部署过程改善了这一状况,但仍然需要手动管理DNS记录与容器服务IP地址的应用关系,但带有External DNS的Kubernetes不同于传统企业部署模型,它可以自动完成这一部分工作。
External DNS用来将集群内的Pod,Service,Ingress等资源注册到外面的DNS服务上,这样集群外的服务可通过统一的DNS访问到集群内的服务。
通过External DNS,组织团队可实现自动化和共同责任协作,而这将避免手动配置的错误,并使各方都能够更有效地将其产品推向市场。
External DNS相关内容参考:
https://github.com/kubernetes-sigs/external-dns
下面通过几个步骤,使用OCI DNS服务结合Kubernets External DNS来自动化完成域名记录的管理工作。
准备工作:
可以用于测试的域名,本文使用 testoci.xyz作为测试域名。
可以用于测试OCI账号,需要配置OCI DNS等资源。
Kubernete实例,本文使用预先部署好的OKE实例作为测试的Kubernetes环境。
将域名解析服务托管至OCI DNS服务
在OCI console 上,创建一个zone,代理解析testoci.xyz。


2. 将创建成功zone记录的Nameservers记录列表复制保存,替换域名商默认的Nameservers,修改Nameserver列表的操作需要在域名商的控制台上完成操作,操作生效时间与域名商相关。

1. 部署Secret资源,用于通过API访问OCI的资源。
创建Kubernetes Secret资源,供External DNS调用,文件命名为oci.yaml

需要配置
region/tenancy/user/key/fingerprint/compartment信息,具体配置流程参考OCI API权限配置相关内容。
https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm
运行命令,确保Secret创建完成。
kubectl create secret generic external-dns-config --from-file=oci.yaml

2. 在OKE Kubernetes集群中部署External DNS
通过external-dns-deployment.yaml文件,创建所需要的资源,包括
ServiceAccount/ClusterRole/ClusterRoleBinding等将上一步创建的Secret 名称external-dns-config填写到Deployment需要的secretName字段。

运行命令,确保External DNS资源创建成功。
kubectl apply -f external-dns-deployment.yaml


1. 部署测试Service
yaml文件中,使用
xternal-dns.alpha.kubernetes.io/hostnameannotation作为域名配置记录,测试程序配置为:nginx.testoci.xyz

运行命令,确保测试程序部署成功。

2. 查看External DNS Pod日志,看到自动同步Service的域名信息,自动增加DNS记录。

在OCI Console上,查看自动增加的Record情况。
ExternalDNS自动增加了两条记录,一条A记录和一条TXT记录。其中A记录值为 nginx.test.xyz,指向IP地址,为OKE Service的LB地址,可以直接对外网提供访问服务。

3. 通过互联网访问web应用
使用浏览器,输入域名nginx.testoci.xyz,应用正常访问。

通过以上的步骤,演示了使用OCI DNS结合Kubernetes External DNS,自动化管理域名管理的过程,结合CI/CD自动化工具,可以使容器环境中程序的发布与域名管理完全自动化,提高应用程序发布过程的自动化程度,同时OCI DNS服务作为一个支持高可用/全球任播网络的云服务,为互联网应用程序的访问提供更好的用户体验。
更多OCI DNS信息请访问:
https://www.oracle.com/cloud/networking/dns/

作者简介
向志华,甲骨文云架构团队资深咨询顾问,专注 Application PaaS 产品及服务,同时关注Docker容器产品及Kubernetes容器调度产品方向。13年IT行业从业经验,擅长J2EE产品架构及开发,参与过Openstack相关产品研发工作。您可以通过george.xiang@oracle.com,与他联系。




