使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

时间:2022-12-30 10:00:28

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

如果您曾经部署过 Kubernetes 服务,您就会明白必须为越来越多的内部和外部服务维护 DNS 记录的痛苦。外部 DNS 通过以编程方式更新 DNS 服务器来帮助解决这一难题,并减少手动记录保存所需的工作量。在我们详细介绍其工作原理之前,让我们快速回顾一下 ExternalDNS 包提供的功能:

“受 Kubernetes DNS 的启发,Kubernetes 的内部 DNS 服务器 ExternalDNS 使 Kubernetes 资源可以通过公共 DNS 服务器发现。与 KubeDNS 一样,它从 Kubernetes API 中检索资源(服务、入口等)列表,以确定所需的 DNS 记录列表。然而,与 KubeDNS 不同的是,它本身不是 DNS 服务器,而只是相应地配置其他 DNS 提供商,例如 AWS Route 53 或 Google Cloud DNS。

本指南重点介绍如何使用 VMware Tanzu Mission Control Catalog 部署和配置 ExternalDNS 软件包,特别是针对 Amazon Web Services (AWS) 上的 Route53。

请注意,本文未涵盖这些步骤,应在继续之前完成:

  • 创建允许外部 DNS 更新的权限策略
  • 在 IAM 中创建新用户
  • 在托管区域上创建子域
  • 提供您的用户 API 访问权限和密钥

要执行上面引用的特定于 AWS 的任务,请按照以下详细步骤操作。要使用 HTTPProxy 配置 Contour,请按照以下说明进行操作。

创建密钥

我们首先需要创建一个包含 AWS 凭证的 Kubernetes 密钥。ExternalDNS 需要 AWS 凭证才能修改 Route 53 DNS 表。打开文本编辑器并将以下内容粘贴到其中:

apiVersion: v1
kind: Secret
metadata:
name: aws-externaldns
namespace: tanzu-system-service-discovery
type: Opaque
stringData:
access-key-id: << ACCESS KEY ID >>
secret-access-key: << SECRET ACCESS KEY >>

修改名称、访问密钥 ID 和秘密访问密钥以满足您的要求,并将文件另存为“secret.yaml”。

在保存 secret.yaml 文件的同一目录中打开一个终端,并对 tanzu-system-service-discovery 命名空间的密钥执行以下操作:

kubectl apply -f secret.yaml

部署包

通过访问您组织的 URL 登录 Tanzu 任务控制控制台:

<组织名称>.tmc.cloud.vmware.com

单击左侧菜单上的“目录”,然后单击外部DNS包。

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

单击视图右上角的“安装包”。输入软件包安装的名称,然后单击“下一步”。

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

在步骤 2 中,将这些值保留为默认值。此处选择的命名空间仅用于安装包。外部 DNS 将安装到 tanzu-system-service-discovery 命名空间。点击“下一步”。

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

下面是 Route53 的外部 DNS 配置示例。对于任何 Route53 配置,参数都是类似的,但请务必将域筛选条件、策略、aws 区域类型和 txt 所有者 ID 更改为所需的值。环境变量正在利用在前面的步骤中创建的 Kubernetes 机密。修改以下 YAML 配置后,将其复制并粘贴到步骤 3 中的“您的配置值”文本框中:

deployment:
args:
- --source=service
- --source=ingress
- --provider=aws
- --domain-filter=<your domain here>
- --events
- --policy=sync
- --aws-zone-type=private
- --aws-prefer-cname
- --registry=txt
- --txt-owner-id=<zone ID>
- --txt-prefix=txt

env:
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
key: access-key-id
name: aws-externaldns
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
key: secret-access-key
name: aws-externaldns

注意:如果您将服务帐户用作具有信任关系的角色,则需要将以下内容添加到部署参数块中:

- --aws-assume-role=<arn>

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

现在,包已部署到群集,你将看到“正在协调”状态。安装完成后,状态将显示“成功”,并带有绿色复选标记。

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

让我们部署一个示例 Nginx 服务来验证 ExternalDNS 是否正常工作。服务的注释将确定服务可用后将在 DNS 服务器上配置的 DNS 名称。将以下 YAML 复制并粘贴到名为“nginx-test.yaml”的文件中,并将“<您的域在这里>”替换为所需的域:

apiVersion: v1
kind: Service
metadata:
name: nginx
annotations:
external-dns.alpha.kubernetes.io/hostname: <your domain here>
spec:
type: LoadBalancer
ports:
- port: 80
name: http
targetPort: 80
selector:
app: nginx

---

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80
name: http

使用以下各项将 YAML 应用于群集:

kubectl apply –f nginx-test.yaml

检查 AWS Route 53 控制台以确保已自动添加 DNS 条目。

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

请注意 ExternalDNS 添加的记录:

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

现在,让我们删除测试服务以确保删除工作正常。要删除测试服务和 Pod 并确认 DNS 条目已被删除,请执行以下操作:

kubectl delete –f nginx-test.yaml

使用 ExternalDNS 和 Tanzu Mission Control 目录自动管理 Kubernetes 的 DNS

该演示展示了开始使用 Tanzu 任务控制目录是多么容易。要了解有关Tanzu任务控制目录的更多信息,请查看最近的发布公告。您还可以通过Tanzu标准探路者课程获得Tanzu任务控制的免费实践经验。通过 Tanzu 任务控制发行说明了解新功能和修复。