6.4. 外部 DNS Operator


6.4.1. 外部 DNS Operator 发行注记

External DNS Operator 部署并管理 ExternalDNS,以便为从外部 DNS 供应商到 OpenShift Container Platform 的服务和路由提供名称解析。

重要

External DNS Operator 仅在 x86_64 架构上被支持。

本发行注记介绍了 OpenShift Container Platform 中外部 DNS Operator 的开发。

6.4.1.1. 外部 DNS Operator 1.3.0

以下公告可用于外部 DNS Operator 版本 1.3.0 :

此更新包括更新到上游项目的 0.14.2 版本。

6.4.1.1.1. 程序错误修复

在以前的版本中,ExternalDNS Operator 无法在 HCP 集群中部署操作对象。在这个版本中,Operator 以 running 和 ready 状态部署操作对象。(OCPBUGS-37059)

在以前的版本中,ExternalDNS Operator 没有使用 RHEL 9 作为其构建或基础镜像。在这个版本中,RHEL9 是基础。(OCPBUGS-41683)

在以前的版本中,godoc 为 Infoblox 供应商有一个有问题的链接。在这个版本中,godoc 被修改为准确性。有些链接在其它链接被 GitHub permalinks 替换时会被删除。(OCPBUGS-36797)

6.4.1.2. 外部 DNS Operator 1.2.0

以下公告可用于外部 DNS Operator 版本 1.2.0 :

6.4.1.2.1. 新功能
6.4.1.2.2. 程序错误修复
  • 操作对象的更新策略从 Rolling 改为 Recreate。(OCPBUGS-3630)

6.4.1.3. 外部 DNS Operator 1.1.1

以下公告可用于外部 DNS Operator 版本 1.1.1:

6.4.1.4. 外部 DNS Operator 1.1.0

此发行版本包含来自上游项目 0.13.1 版本的操作对象的变基。以下公告可用于外部 DNS Operator 版本 1.1.0:

6.4.1.4.1. 程序错误修复
  • 在以前的版本中,ExternalDNS Operator 为卷强制有一个空的 defaultMode 值,这会导致因为与 OpenShift API 冲突而造成恒定的更新。现在,defaultMode 值不会被强制,操作对象部署不会持续更新。(OCPBUGS-2793)

6.4.1.5. 外部 DNS Operator 1.0.1

以下公告可用于外部 DNS Operator 版本 1.0.1:

6.4.1.6. 外部 DNS Operator 1.0.0

以下公告可用于 External DNS Operator 版本 1.0.0:

6.4.1.6.1. 程序错误修复
  • 在以前的版本中,External DNS Operator 在 ExternalDNS 操作对象 pod 部署中发出有关违反 restricted SCC 策略的警告。这个问题已解决。(BZ#2086408)

6.4.2. 了解外部 DNS Operator

External DNS Operator 部署并管理 ExternalDNS,以便为从外部 DNS 供应商到 OpenShift Container Platform 的服务和路由提供名称解析。

6.4.2.1. 外部 DNS Operator

External DNS Operator 从 olm.openshift.io API 组实现外部 DNS API。External DNS Operator 更新服务、路由和外部 DNS 供应商。

先决条件

  • 已安装 yq CLI 工具。

流程

您可以根据 OperatorHub 的要求部署外部 DNS Operator。部署外部 DNS Operator 会创建一个 Subscription 对象。

  1. 运行以下命令,检查安装计划的名称:

    $ oc -n external-dns-operator get sub external-dns-operator -o yaml | yq '.status.installplan.name'

    输出示例

    install-zcvlr

  2. 运行以下命令,检查安装计划的状态是否为 Complete

    $ oc -n external-dns-operator get ip <install_plan_name> -o yaml | yq '.status.phase'

    输出示例

    Complete

  3. 运行以下命令,查看 external-dns-operator 部署的状态:

    $ oc get -n external-dns-operator deployment/external-dns-operator

    输出示例

    NAME                    READY     UP-TO-DATE   AVAILABLE   AGE
    external-dns-operator   1/1       1            1           23h

6.4.2.2. 查看外部 DNS Operator 日志

您可以使用 oc logs 命令查看外部 DNS Operator 日志。

流程

  1. 运行以下命令,查看外部 DNS Operator 的日志:

    $ oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator
6.4.2.2.1. 外部 DNS Operator 域名限制

External DNS Operator 使用 TXT registry,它为 TXT 记录添加前缀。这可减少 TXT 记录的域名的最大长度。没有对应的 TXT 记录时无法出现 DNS 记录,因此 DNS 记录的域名必须遵循与 TXT 记录相同的限制。例如,一个 <domain_name_from_source> DNS 记录会导致一个 external-dns-<record_type>-<domain_name_from_source> TXT 记录。

外部 DNS Operator 生成的 DNS 记录的域名有以下限制:

记录类型字符数

CNAME

44

AzureDNS 上的通配符 CNAME 记录

42

A

48

AzureDNS 上的通配符 A 记录

46

如果生成的域名超过任何域名限制,则外部 DNS Operator 日志中会出现以下错误:

time="2022-09-02T08:53:57Z" level=error msg="Failure in zone test.example.io. [Id: /hostedzone/Z06988883Q0H0RL6UMXXX]"
time="2022-09-02T08:53:57Z" level=error msg="InvalidChangeBatch: [FATAL problem: DomainLabelTooLong (Domain label is too long) encountered with 'external-dns-a-hello-openshift-aaaaaaaaaa-bbbbbbbbbb-ccccccc']\n\tstatus code: 400, request id: e54dfd5a-06c6-47b0-bcb9-a4f7c3a4e0c6"

6.4.3. 安装 External DNS Operator

您可以在云供应商环境中安装外部 DNS Operator,如 AWS、Azure 和 GCP。

6.4.3.1. 使用 OperatorHub 安装 External DNS Operator

您可以使用 OpenShift Container Platform OperatorHub 安装外部 DNS Operator。

流程

  1. 在 OpenShift Container Platform Web 控制台中点 Operators OperatorHub
  2. External DNS Operator。您可以使用 Filter by keyword 文本框或过滤器列表从 Operator 列表中搜索 External DNS Operator。
  3. 选择 external-dns-operator 命名空间。
  4. External DNS Operator 页面中,点 Install
  5. Install Operator 页面中,确保选择了以下选项:

    1. 将频道更新为 stable-v1
    2. 安装模式为 A specific name on the cluster
    3. 安装的命名空间为 external-dns-operator。如果命名空间 external-dns-operator 不存在,它会在 Operator 安装过程中创建。
    4. Approval Strategy 选为 AutomaticManual。默认情况下,批准策略设置为 Automatic
    5. Install

如果选择了 Automatic 更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。

如果选择 手动 更新,则 OLM 会创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,才可将 Operator 更新至新版本。

验证

验证 External DNS Operator 是否在 Installed Operators 仪表板上显示 StatusSucceeded

6.4.3.2. 使用 CLI 安装 External DNS Operator

您可以使用 CLI 安装 External DNS Operator

先决条件

  • 以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform Web 控制台。
  • 已登陆到 OpenShift CLI (oc)。

流程

  1. 创建一个 Namespace 对象:

    1. 创建定义 Namespace 对象的 YAML 文件:

      namespace.yaml 文件示例

      apiVersion: v1
      kind: Namespace
      metadata:
        name: external-dns-operator

    2. 运行以下命令来创建 Namespace 对象:

      $ oc apply -f namespace.yaml
  2. 创建一个 OperatorGroup 对象:

    1. 创建定义 OperatorGroup 对象的 YAML 文件:

      operatorgroup.yaml 文件示例

      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: external-dns-operator
        namespace: external-dns-operator
      spec:
        upgradeStrategy: Default
        targetNamespaces:
        - external-dns-operator

    2. 运行以下命令来创建 OperatorGroup 对象:

      $ oc apply -f operatorgroup.yaml
  3. 创建 Subscription 对象:

    1. 创建定义 Subscription 对象的 YAML 文件:

      subscription.yaml 文件示例

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: external-dns-operator
        namespace: external-dns-operator
      spec:
        channel: stable-v1
        installPlanApproval: Automatic
        name: external-dns-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace

    2. 运行以下命令来创建 Subscription 对象:

      $ oc apply -f subscription.yaml

验证

  1. 运行以下命令,从订阅获取安装计划的名称:

    $ oc -n external-dns-operator \
        get subscription external-dns-operator \
        --template='{{.status.installplan.name}}{{"\n"}}'
  2. 运行以下命令,验证安装计划的状态是否为 Complete

    $ oc -n external-dns-operator \
        get ip <install_plan_name> \
        --template='{{.status.phase}}{{"\n"}}'
  3. 运行以下命令,验证 external-dns-operator pod 的状态是否为 Running

    $ oc -n external-dns-operator get pod

    输出示例

    NAME                                     READY   STATUS    RESTARTS   AGE
    external-dns-operator-5584585fd7-5lwqm   2/2     Running   0          11m

  4. 运行以下命令,验证订阅的目录源是否为 redhat-operators

    $ oc -n external-dns-operator get subscription

    输出示例

    NAME                    PACKAGE                 SOURCE             CHANNEL
    external-dns-operator   external-dns-operator   redhat-operators   stable-v1

  5. 运行以下命令检查 external-dns-operator 版本:

    $ oc -n external-dns-operator get csv

    输出示例

    NAME                           DISPLAY                VERSION   REPLACES   PHASE
    external-dns-operator.v<1.y.z>   ExternalDNS Operator   <1.y.z>                Succeeded

6.4.4. 外部 DNS Operator 配置参数

External DNS Operator 包括以下配置参数。

6.4.4.1. 外部 DNS Operator 配置参数

External DNS Operator 包括以下配置参数:

参数描述

spec

启用云供应商的类型。

spec:
  provider:
    type: AWS 1
    aws:
      credentials:
        name: aws-access-key 2
1
定义可用选项,如 AWS、GCP、Azure 和 Infoblox。
2
为云供应商定义 secret 名称。

zones

允许您根据域指定 DNS 区域。如果没有指定区,External DNS 资源会发现云供应商帐户中存在的所有区域。

zones:
- "myzoneid" 1
1
指定 DNS 区域的名称。

domains

允许您根据域指定 AWS 区域。如果没有指定域,External DNS 资源会发现云供应商帐户中存在的所有区域。

domains:
- filterType: Include 1
  matchType: Exact 2
  name: "myzonedomain1.com" 3
- filterType: Include
  matchType: Pattern 4
  pattern: ".*\\.otherzonedomain\\.com" 5
1
确保 ExternalDNS 资源包含域名。
2
指示 ExtrnalDNS 指示域匹配必须完全匹配,而不是正则表达式匹配。
3
定义域的名称。
4
ExternalDNS 资源中设置 regex-domain-filter 标志。您可以使用 Regex 过滤器来限制可能的域。
5
定义 ExternalDNS 资源用来过滤目标区的域的 regex 模式。

source

允许您指定 DNS 记录、ServiceRoute 的源。

source: 1
  type: Service 2
  service:
    serviceType:3
      - LoadBalancer
      - ClusterIP
  labelFilter: 4
    matchLabels:
      external-dns.mydomain.org/publish: "yes"
  hostnameAnnotation: "Allow" 5
  fqdnTemplate:
  - "{{.Name}}.myzonedomain.com" 6
1
定义 DNS 记录源的设置。
2
ExternalDNS 资源使用 Service 类型作为创建 DNS 记录的源。
3
ExternalDNS 资源中设置 service-type-filter 标志。serviceType 包含以下字段:
  • 默认:LoadBalancer
  • 预期:ClusterIP
  • NodePort
  • LoadBalancer
  • ExternalName
4
确保控制器只考虑与标签过滤器匹配的资源。
5
hostnameAnnotation 的默认值为 Ignore,它指示 ExternalDNS 使用字段 fqdnTemplates 中指定的模板生成 DNS 记录。当值是 Allow,DNS 记录根据 external-dns.alpha.kubernetes.io/hostname 注解中指定的值生成。
6
外部 DNS Operator 使用一个字符串从没有定义主机名的源生成 DNS 名称,或者与 fake 源配对时添加主机名后缀。
source:
  type: OpenShiftRoute 1
  openshiftRouteOptions:
    routerName: default 2
    labelFilter:
      matchLabels:
        external-dns.mydomain.org/publish: "yes"
1
创建 DNS 记录。
2
如果源类型是 OpenShiftRoute,您可以传递 Ingress Controller 名称。ExternalDNS 资源使用 Ingress Controller 的规范名称作为 CNAME 记录的目标。

6.4.5. 在 AWS 上创建 DNS 记录

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

6.4.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

6.4.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

6.4.6. 在 Azure 上创建 DNS 记录

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

重要

不支持在支持 Microsoft Entra Workload ID 的集群或在 Microsoft Azure Government (MAG) 区域中运行的集群中使用 External DNS Operator。

6.4.6.1. 在 Azure 公共 DNS 区域中创建 DNS 记录

您可以使用 External DNS Operator 在 Azure 公共 DNS 区域上创建 DNS 记录。

先决条件

  • 您必须具有管理员特权。
  • admin 用户必须有权访问 kube-system 命名空间。

流程

  1. 运行以下命令,从 kube-system 命名空间中获取凭证以使用云供应商客户端:

    $ CLIENT_ID=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_client_id}} | base64 -d)
    $ CLIENT_SECRET=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_client_secret}} | base64 -d)
    $ RESOURCE_GROUP=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_resourcegroup}} | base64 -d)
    $ SUBSCRIPTION_ID=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_subscription_id}} | base64 -d)
    $ TENANT_ID=$(oc get secrets azure-credentials  -n kube-system  --template={{.data.azure_tenant_id}} | base64 -d)
  2. 运行以下命令来登录到 Azure:

    $ az login --service-principal -u "${CLIENT_ID}" -p "${CLIENT_SECRET}" --tenant "${TENANT_ID}"
  3. 运行以下命令来获取路由列表:

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

    输出示例

    openshift-console          console             console-openshift-console.apps.test.azure.example.com                       console             https   reencrypt/Redirect     None
    openshift-console          downloads           downloads-openshift-console.apps.test.azure.example.com                     downloads           http    edge/Redirect          None

  4. 运行以下命令,获取 DNS 区域列表:

    $ az network dns zone list --resource-group "${RESOURCE_GROUP}"
  5. 创建一个 YAML 文件,如 external-dns-sample-azure.yaml,该文件定义 ExternalDNS 对象:

    external-dns-sample-azure.yaml 文件示例

    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-azure 1
    spec:
      zones:
      - "/subscriptions/1234567890/resourceGroups/test-azure-xxxxx-rg/providers/Microsoft.Network/dnszones/test.azure.example.com" 2
      provider:
        type: Azure 3
      source:
        openshiftRouteOptions: 4
          routerName: default 5
        type: OpenShiftRoute 6

    1
    指定外部 DNS 名称。
    2
    定义区域 ID。
    3
    定义提供程序类型。
    4
    您可以定义 DNS 记录源的选项。
    5
    如果源类型是 OpenShiftRoute,您可以传递 OpenShift Ingress Controller 名称。外部 DNS 在创建 CNAME 记录时,选择该路由器的规范主机名作为目标。
    6
    route 资源定义为 Azure DNS 记录的来源。
  6. 运行以下命令,检查为 OpenShift Container Platform 路由创建的 DNS 记录:

    $ az network dns record-set list -g "${RESOURCE_GROUP}"  -z test.azure.example.com | grep console
    注意

    要在私有 Azure DNS 上的私有托管区上创建记录,您需要在 zones 字段中指定私有区,用于在 ExternalDNS 容器参数中将供应商类型填充到 azure-private-dns

6.4.7. 在 GCP 上创建 DNS 记录

您可以使用 External DNS Operator 在 Google Cloud Platform (GCP) 上创建 DNS 记录。

重要

不支持在启用了 GCP Workload Identity 的集群上使用 External DNS Operator。有关 GCP Workload Identity 的更多信息,请参阅 GCP Workload Identity

6.4.7.1. 在 GCP 公共管理区上创建 DNS 记录

您可以使用 External DNS Operator 在 GCP 公共受管区上创建 DNS 记录。

先决条件

  • 您必须具有管理员特权。

流程

  1. 运行以下命令,将 gcp-credentials secret 复制到 encoded-gcloud.json 文件中:

    $ oc get secret gcp-credentials -n kube-system --template='{{$v := index .data "service_account.json"}}{{$v}}' | base64 -d - > decoded-gcloud.json
  2. 运行以下命令导出 Google 凭证:

    $ export GOOGLE_CREDENTIALS=decoded-gcloud.json
  3. 使用以下命令激活您的帐户:

    $ gcloud auth activate-service-account  <client_email as per decoded-gcloud.json> --key-file=decoded-gcloud.json
  4. 运行以下命令来设置项目:

    $ gcloud config set project <project_id as per decoded-gcloud.json>
  5. 运行以下命令来获取路由列表:

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

    输出示例

    openshift-console          console             console-openshift-console.apps.test.gcp.example.com                       console             https   reencrypt/Redirect     None
    openshift-console          downloads           downloads-openshift-console.apps.test.gcp.example.com                     downloads           http    edge/Redirect          None

  6. 运行以下命令来获取受管区列表:

    $ gcloud dns managed-zones list | grep test.gcp.example.com

    输出示例

    qe-cvs4g-private-zone test.gcp.example.com

  7. 创建一个 YAML 文件,如 external-dns-sample-gcp.yaml,该文件定义 ExternalDNS 对象:

    external-dns-sample-gcp.yaml 文件示例

    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-gcp 1
    spec:
      domains:
        - filterType: Include 2
          matchType: Exact 3
          name: test.gcp.example.com 4
      provider:
        type: GCP 5
      source:
        openshiftRouteOptions: 6
          routerName: default 7
        type: OpenShiftRoute 8

    1
    指定外部 DNS 名称。
    2
    默认情况下,所有托管区都被选为潜在的目标。您可以包含托管区。
    3
    目标的域必须与 name 键定义的字符串匹配。
    4
    指定您要更新的区域的确切域。路由的主机名必须是指定域的子域。
    5
    定义提供程序类型。
    6
    您可以定义 DNS 记录源的选项。
    7
    如果源类型是 OpenShiftRoute,您可以传递 OpenShift Ingress Controller 名称。外部 DNS 在创建 CNAME 记录时,选择该路由器的规范主机名作为目标。
    8
    route 资源定义为 GCP DNS 记录的源。
  8. 运行以下命令,检查为 OpenShift Container Platform 路由创建的 DNS 记录:

    $ gcloud dns record-sets list --zone=qe-cvs4g-private-zone | grep console

6.4.8. 在 Infoblox 上创建 DNS 记录

您可以使用 External DNS Operator 在 Infoblox 上创建 DNS 记录。

6.4.8.1. 在 Infoblox 上的公共 DNS 区域中创建 DNS 记录

您可以使用 External DNS Operator 在 Infoblox 上的公共 DNS 区域上创建 DNS 记录。

前提条件

  • 您可以访问 OpenShift CLI(oc)。
  • 您可以访问 Infoblox UI。

流程

  1. 运行以下命令,使用 Infoblox 凭证创建 secret 对象:

    $ oc -n external-dns-operator create secret generic infoblox-credentials --from-literal=EXTERNAL_DNS_INFOBLOX_WAPI_USERNAME=<infoblox_username> --from-literal=EXTERNAL_DNS_INFOBLOX_WAPI_PASSWORD=<infoblox_password>
  2. 运行以下命令来获取路由列表:

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

    输出示例

    openshift-console          console             console-openshift-console.apps.test.example.com                       console             https   reencrypt/Redirect     None
    openshift-console          downloads           downloads-openshift-console.apps.test.example.com                     downloads           http    edge/Redirect          None

  3. 创建一个 YAML 文件,如 external-dns-sample-infoblox.yaml,该文件定义 ExternalDNS 对象:

    external-dns-sample-infoblox.yaml 文件示例

    apiVersion: externaldns.olm.openshift.io/v1beta1
    kind: ExternalDNS
    metadata:
      name: sample-infoblox 1
    spec:
      provider:
        type: Infoblox 2
        infoblox:
          credentials:
            name: infoblox-credentials
          gridHost: ${INFOBLOX_GRID_PUBLIC_IP}
          wapiPort: 443
          wapiVersion: "2.3.1"
      domains:
      - filterType: Include
        matchType: Exact
        name: test.example.com
      source:
        type: OpenShiftRoute 3
        openshiftRouteOptions:
          routerName: default 4

    1
    指定外部 DNS 名称。
    2
    定义提供程序类型。
    3
    您可以定义 DNS 记录源的选项。
    4
    如果源类型是 OpenShiftRoute,您可以传递 OpenShift Ingress Controller 名称。外部 DNS 在创建 CNAME 记录时,选择该路由器的规范主机名作为目标。
  4. 运行以下命令,在 Infoblox 上创建 ExternalDNS 资源:

    $ oc create -f external-dns-sample-infoblox.yaml
  5. 通过 Infoblox UI,检查为 console 路由创建的 DNS 记录:

    1. Data Management DNS Zones
    2. 选择区域名称。

6.4.9. 在外部 DNS Operator 上配置集群范围代理

配置集群范围代理后,Operator Lifecycle Manager (OLM) 会触发对使用 HTTP_PROXYHTTPS_PROXYNO_PROXY 环境变量的新内容的所有部署的 Operator 的自动更新。

6.4.9.1. 信任集群范围代理的证书颁发机构

您可以将外部 DNS Operator 配置为信任集群范围代理的证书颁发机构。

流程

  1. 运行以下命令,创建配置映射以在 external-dns-operator 命名空间中包含 CA 捆绑包:

    $ oc -n external-dns-operator create configmap trusted-ca
  2. 要将可信 CA 捆绑包注入配置映射中,请运行以下命令将 config.openshift.io/inject-trusted-cabundle=true 标签添加到配置映射中:

    $ oc -n external-dns-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
  3. 运行以下命令更新外部 DNS Operator 的订阅:

    $ oc -n external-dns-operator patch subscription external-dns-operator --type='json' -p='[{"op": "add", "path": "/spec/config", "value":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}]}}]'

验证

  • 部署外部 DNS Operator 后,运行以下命令来验证可信 CA 环境变量是否已添加到 external-dns-operator 部署中:

    $ oc -n external-dns-operator exec deploy/external-dns-operator -c external-dns-operator -- printenv TRUSTED_CA_CONFIGMAP_NAME

    输出示例

    trusted-ca

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.