20.5. 在 AWS 上创建 DNS 记录


您可以使用外部 DNS Operator 在 AWS 和 AWS GovCloud 上创建 DNS 记录。

20.5.1. 使用 Red Hat External DNS Operator 在 AWS 公共托管区中创建 DNS 记录

您可以使用 Red Hat External DNS Operator 在 AWS 公共托管区上创建 DNS 记录。您可以使用相同的说明在 AWS GovCloud 的托管区上创建 DNS 记录。

流程

  1. 检查用户。用户必须有权访问 kube-system 命名空间。如果没有凭证,您可以从 kube-system 命名空间中获取凭证,以使用云供应商客户端:

    $ oc whoami

    输出示例

    system:admin

  2. kube-system 命名空间中存在的 aws-creds secret 中获取值。

    $ export AWS_ACCESS_KEY_ID=$(oc get secrets aws-creds -n kube-system  --template={{.data.aws_access_key_id}} | base64 -d)
    $ export AWS_SECRET_ACCESS_KEY=$(oc get secrets aws-creds -n kube-system  --template={{.data.aws_secret_access_key}} | base64 -d)
  3. 获取路由来检查域:

    $ oc get routes --all-namespaces | grep console

    输出示例

    openshift-console          console             console-openshift-console.apps.testextdnsoperator.apacshift.support                       console             https   reencrypt/Redirect     None
    openshift-console          downloads           downloads-openshift-console.apps.testextdnsoperator.apacshift.support                     downloads           http    edge/Redirect          None

  4. 获取 dns zones 列表以查找与之前找到的路由域对应的 dns 区域:

    $ aws route53 list-hosted-zones | grep testextdnsoperator.apacshift.support

    输出示例

    HOSTEDZONES	terraform	/hostedzone/Z02355203TNN1XXXX1J6O	testextdnsoperator.apacshift.support.	5

  5. 路由源创建 ExternalDNS 资源:

    $ cat <<EOF | oc create -f -
    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-aws 1
    spec:
      domains:
      - filterType: Include   2
        matchType: Exact   3
        name: testextdnsoperator.apacshift.support 4
      provider:
        type: AWS 5
      source:  6
        type: OpenShiftRoute 7
        openshiftRouteOptions:
          routerName: default 8
    EOF
    1
    定义外部 DNS 资源的名称。
    2
    默认情况下,所有托管区都被选为潜在的目标。您可以包括需要的托管区。
    3
    目标区的域匹配必须是完全准确的(与正则表达式匹配不同)。
    4
    指定您要更新的区域的确切域。路由的主机名必须是指定域的子域。
    5
    定义 AWS Route53 DNS 供应商。
    6
    定义 DNS 记录源的选项。
    7
    定义 OpenShift 路由资源,作为在之前指定的 DNS 供应商中创建的 DNS 记录来源。
    8
    如果源是 OpenShiftRoute,您可以传递 OpenShift Ingress Controller 名称。外部 DNS Operator 在创建 CNAME 记录时,选择该路由器的规范主机名作为目标。
  6. 使用以下命令,检查为 OCP 路由创建的记录:

    $ aws route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console

20.5.2. 使用共享 VPC 在不同的 AWS 帐户中创建 DNS 记录

您可以使用 ExternalDNS Operator 使用共享 Virtual Private Cloud (VPC)在不同的 AWS 帐户中创建 DNS 记录。通过使用共享 VPC,组织可将资源从多个项目连接到通用 VPC 网络。然后,机构可以使用 VPC 共享在多个 AWS 帐户间使用单个 Route 53 实例。

先决条件

  • 您已创建了两个 Amazon AWS 帐户:一个 VPC 和配置了 Route 53 私有托管区(帐户 A),另一个用于安装集群(帐户 B)。
  • 您已创建了具有帐户 B 的相应权限的 IAM 策略和 IAM 角色,以便在帐户 A 的 Route 53 托管区中创建 DNS 记录。
  • 您已在帐户 B 上安装了帐户 A 的集群。
  • 您已在帐户 B 的集群中安装了 ExternalDNS Operator。

流程

  1. 运行以下命令,获取您创建的 IAM 角色的 Role ARN,以允许帐户 B 访问帐户 A 的 Route 53 托管区:

    $ aws --profile account-a iam get-role --role-name user-rol1 | head -1

    输出示例

    ROLE	arn:aws:iam::1234567890123:role/user-rol1	2023-09-14T17:21:54+00:00	3600	/	AROA3SGB2ZRKRT5NISNJN	user-rol1

  2. 运行以下命令,找到用于帐户 A 凭证的私有托管区:

    $ aws --profile account-a route53 list-hosted-zones | grep testextdnsoperator.apacshift.support

    输出示例

    HOSTEDZONES	terraform	/hostedzone/Z02355203TNN1XXXX1J6O	testextdnsoperator.apacshift.support. 5

  3. 运行以下命令来创建 ExternalDNS 对象:

    $ cat <<EOF | oc create -f -
    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-aws
    spec:
      domains:
      - filterType: Include
        matchType: Exact
        name: testextdnsoperator.apacshift.support
      provider:
        type: AWS
        aws:
          assumeRole:
            arn: arn:aws:iam::12345678901234:role/user-rol1 1
      source:
        type: OpenShiftRoute
        openshiftRouteOptions:
          routerName: default
    EOF
    1
    指定 Role ARN,以便在帐户 A 中创建 DNS 记录。
  4. 使用以下命令,检查为 OpenShift Container Platform (OCP) 路由创建的记录:

    $ aws --profile account-a route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console-openshift-console
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.