18.5. 在 AWS 上创建 DNS 记录


您可以使用外部 DNS Operator 在 AWS 和 AWS GovCloud 上创建 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

您可以使用 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部