ExternalDNS 使用教程
项目介绍
ExternalDNS 是一个开源项目,旨在将 Kubernetes 资源(如服务和入口)与外部 DNS 提供商同步。它通过 Kubernetes API 获取资源列表,并配置外部 DNS 提供商(如 AWS Route 53 或 Google Cloud DNS)来管理 DNS 记录。ExternalDNS 不是 DNS 服务器,而是通过动态控制 DNS 记录来实现 Kubernetes 资源的可发现性。
项目快速启动
部署 ExternalDNS
以下是一个简单的部署 ExternalDNS 的示例,假设你使用的是 AWS 环境:
-
创建 IAM 策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "route53:ChangeResourceRecordSets" ], "Resource": [ "arn:aws:route53:::hostedzone/*" ] }, { "Effect": "Allow", "Action": [ "route53:ListHostedZones", "route53:ListResourceRecordSets" ], "Resource": [ "*" ] } ] }
-
部署 ExternalDNS:
apiVersion: apps/v1 kind: Deployment metadata: name: external-dns spec: strategy: type: Recreate selector: matchLabels: app: external-dns template: metadata: labels: app: external-dns spec: containers: - name: external-dns image: k8s.gcr.io/external-dns/external-dns:v0.7.6 args: - --source=service - --source=ingress - --domain-filter=example.com - --provider=aws - --policy=sync - --aws-zone-type=public - --registry=txt - --txt-owner-id=my-identifier
应用案例和最佳实践
案例一:使用 ExternalDNS 管理 AWS Route 53
假设你有一个 Kubernetes 集群,并且希望将服务和入口的 DNS 记录同步到 AWS Route 53。你可以按照上述快速启动中的步骤配置 ExternalDNS,并确保 IAM 策略和部署文件正确无误。
最佳实践
- 设置
--txt-owner-id
:建议为--txt-owner-id
设置一个唯一且不变的值,以确保 ExternalDNS 能够安全地管理非空托管区域。 - 使用
--dry-run
模式:在实际应用更改之前,可以使用--dry-run
模式来查看即将提交到 DNS 提供商 API 的更改。
典型生态项目
Kubernetes Ingress Controller
ExternalDNS 通常与 Kubernetes Ingress Controller 一起使用,以实现外部流量的路由和管理。常见的 Ingress Controller 包括:
- NGINX Ingress Controller:提供高性能的反向代理和负载均衡。
- AWS Load Balancer Controller:专门为 AWS 环境设计的负载均衡器控制器。
Cert-Manager
Cert-Manager 是一个用于自动管理 TLS 证书的项目,与 ExternalDNS 结合使用可以实现自动化的 SSL/TLS 证书颁发和管理。
通过这些生态项目的结合使用,可以构建一个完整的外部访问和安全管理体系。