Kubernetes ExternalDNS 与 NS1 DNS 集成实战指南
external-dns 项目地址: https://gitcode.com/gh_mirrors/ext/external-dns
前言
在现代云原生架构中,服务发现和DNS管理是至关重要的基础组件。本文将详细介绍如何将Kubernetes集群中的服务与NS1 DNS服务集成,通过ExternalDNS实现自动化DNS记录管理。
准备工作
版本要求
确保使用ExternalDNS 0.5及以上版本,以获得完整的NS1支持功能。
NS1 DNS区域创建
在开始集成前,需要在NS1平台上创建DNS区域:
- 登录NS1管理控制台
- 导航至DNS区域管理页面
- 创建与您域名匹配的新区域(如example.com)
API密钥管理
NS1采用API优先的设计理念,所有操作均可通过REST API完成。
创建API密钥步骤
- 登录NS1门户
- 点击右上角用户名,进入"账户设置" > "用户与团队"
- 切换到"API密钥"标签页
- 点击"添加密钥",配置适当权限
安全建议:遵循最小权限原则,仅为ExternalDNS分配必要的DNS记录管理权限。
ExternalDNS部署方案
根据集群是否启用RBAC,提供两种部署方式:
非RBAC集群部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: external-dns
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: external-dns
spec:
containers:
- name: external-dns
image: registry.k8s.io/external-dns/external-dns:v0.14.0
args:
- --source=service
- --domain-filter=example.com
- --provider=ns1
env:
- name: NS1_APIKEY
value: "YOUR_NS1_API_KEY"
RBAC集群部署
对于生产环境,建议使用RBAC增强安全性:
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: external-dns
rules:
- apiGroups: [""]
resources: ["services","endpoints","pods"]
verbs: ["get","watch","list"]
- apiGroups: ["extensions","networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["list"]
---
# 其余配置...
关键参数说明:
--source
:指定监控的资源类型(service/ingress)--domain-filter
:限定管理的域名范围NS1_APIKEY
:必须替换为实际的API密钥
示例应用部署
下面以Nginx服务为例,演示DNS记录自动管理:
apiVersion: v1
kind: Service
metadata:
name: nginx
annotations:
external-dns.alpha.kubernetes.io/hostname: example.com
external-dns.alpha.kubernetes.io/ttl: "120"
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
注解说明:
hostname
:指定要注册的完整域名ttl
:可选,设置DNS记录的TTL值(默认10秒)
部署后,ExternalDNS将自动检测服务的外部IP,并在NS1中创建/更新对应的A记录。
验证与调试
-
检查ExternalDNS日志:
kubectl logs -l app=external-dns
-
在NS1控制台验证DNS记录是否已正确创建
-
使用dig/nslookup工具进行DNS查询验证
最佳实践
- 多集群管理:为不同环境(dev/staging/prod)使用不同的DNS子域
- 权限控制:为ExternalDNS创建专用API密钥,限制其权限范围
- 监控告警:监控ExternalDNS的运行状态和DNS变更事件
- 变更策略:在生产环境部署前,先在测试环境验证配置
清理资源
完成验证后,执行以下命令清理示例资源:
kubectl delete -f nginx.yaml
kubectl delete -f externaldns.yaml
通过本文的指导,您应该已经掌握了使用ExternalDNS实现Kubernetes服务与NS1 DNS自动集成的完整流程。这种集成方案可以显著简化微服务架构中的DNS管理,提高运维效率。
external-dns 项目地址: https://gitcode.com/gh_mirrors/ext/external-dns
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考