帮助文档 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
帮助文档 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 弹性容器实例 ECI
  4. 操作指南
  5. 网络
  6. 托管CoreDNS支持自定义参数配置

托管CoreDNS支持自定义参数配置

  • 网络
  • 发布于 2025-04-15
  • 0 次阅读
文档编辑
文档编辑

在将业务容器化部署到容器集群时,除了访问集群内部服务外,往往还需要访问外部相关服务或接口,因此外部域名解析变得至关重要。为了优化解析速度,可以通过直接指定外部域名对应的DNS Server,以改善DNS外部域名解析路径。同时,对于一些已经配置了静态IP服务的域名,可以考虑通过类似本地hosts文件方式来进行配置。本文介绍如何通过定义CustomDNSConfig CR来配置托管版CoreDNS的DNS配置,以满足这些类似的场景需求。

自定义CoreDNS配置功能说明

以下为自定义CoreDNS配置示例。

apiVersion: networking.alibabacloud.com/v1beta1
kind: CustomDNSConfig
metadata:
  name: default
  namespace: default
spec:
  zones:
  - name: example.com
    forward:
      protocolStrategy: ""
      transportConfig: {}
      upstreams:
      - xxx.xxx.xxx.xxx     # IP address
      - xxx.xxx.xxx.xxx:53  # IP:port
    hosts:
    - hostName: "a.example.com" 
      ipAddress: xxx.xxx.xxx.xxx  
  • 自定义zone,zone格式需要符合FQDN标准,默认值为"."。

  • .forward.protocolStrategy默认值为"",表示采用UDP协议转发,如有需要可以配置为tcp。

  • .forward.transportConfig默认值为{},可以不配置,当前未开放支持。

  • 单个zone下可以自定义配置.forward.upstreams,即上游DNS server地址,可以是IP或者IP: PORT的形式,仅支持IPv4协议。

    • 若不定义.forward.upstreams,则默认使用阿里云云解析 ,即PrivateZone。

    • .forward.upstreams下可定义多个上游DNS Server地址,最多15个。

  • 单个zone下可以自定义配置hosts插件,支持定义静态域名地址。

    • hostName参数用于定义具体的域名,域名格式需要符合DNS规范。

    • ipAddress参数用于定义具体域名对应的IP地址,需要是有效的IPv4地址。

    • 同一个hostName可以定义多个不同的ipAddress,例如:

      ...
       hosts:
          - hostName: "a.example.com" 
            ipAddress: 10.0.0.123  
          - hostName: "a.example.com" 
            ipAddress: 10.0.0.124
       ...
  • CustomDNSConfig是一个非namespace级别的CRD资源,当前仅支持创建名为default的CustomDNSConfig CR。

前提条件

已安装CoreDNS托管版组件,组件版本为v1.9.3.20及以上。具体操作,请参见服务发现DNS。

场景一:配置自定义zone

  1. 使用以下内容创建default.yaml。

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: default
    spec:
      zones:
      - name: example.com
        forward:
          upstreams:
          - 100.100.2.136  #自定义example.com的上游DNSServer为100.100.2.136和100.100.2.138
          - 100.100.2.138
      - name: foo.com
        hosts:
        - hostName: "a.foo.com"#自定义foo.com zone下的a.foo.com和b.foo.com静态地址
          ipAddress: 192.168.0.251
        - hostName: "b.foo.com"
          ipAddress: 192.168.0.252

    YAML中配置了两个自定义zone:

    • example.com

      自定义上游DNS Server为100.100.2.136和100.100.2.138。

      说明

      100.100.2.136和100.100.2.138是系统分配的默认内网DNS解析服务地址。更多信息,请参见服务地址。

    • foo.com

      自定义a.foo.com和b.foo.com静态地址。

  2. 执行以下命令,创建CustomDNSConfig。

    kubectl apply -f default.yaml
  3. 执行以下命令,查看生成的corefile。

    kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1

    预期输出:

     status:
      corefile: |
        example.com:53 {
            prometheus :9153
            forward .  100.100.2.136 100.100.2.138 {
              policy random
              prefer_udp
            }
    ...
        }
        foo.com:53 {
            prometheus :9153
            hosts {
              192.168.0.251    a.foo.com
              192.168.0.252    b.foo.com
              fallthrough
            }
            forward .  /etc/resolv.conf {
              policy random
              prefer_udp
            }
    ...
        }
    ...
    --
      corefileHash: 41f7be21cf3022c305091665ed33b1e5
      lastTransitionTime: "2024-09-13T09:07:37Z"
      phase: GenerateSuccess

    可以看到名为default的CustomDNSConfig已经创建成功,对应的corefile内容可以在status下看到。

场景二:修改默认zone配置

  1. 使用以下内容创建default.yaml。

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: default
    spec:
      zones:
      - name: .
        forward:
          upstreams:
          - 100.100.2.136  #自定义默认zone "." 的上游DnsServer 为100.100.2.136 和 100.100.2.138
          - 100.100.2.138

    YAML中自定义上游DNS Server为100.100.2.136和100.100.2.138。

  2. 执行以下命令,创建CustomDNSConfig。

    kubectl apply -f default.yaml
  3. 执行以下命令,查看生成的corefile。

    kubectl get customdnsconfig default -o yaml |grep corefile -A 35 -B 1

    预期输出:

     status: 
      corefile: |
        .:53 {
            errors
            health {
              lameduck 20s
            }
            ready
            kubeapi {
              kubeconfig /etc/kubernetes/config/managed-coredns.conf
            }
            k8s_event {
              level error warning
            }
    ...
            prometheus :9153
            forward .  100.100.2.136 100.100.2.138 {
              policy random
              prefer_udp
            }
    ...
        }
      corefileHash: 847bf69cc4c97cee965945f45d17c661
      lastTransitionTime: "2024-09-13T09:54:22Z"
      phase: GenerateSuccess

    可以看到名为default的CustomDNSConfig已经创建成功,corefile已经生成。

    说明

    CustomDNSConfig创建或修改后,CoreDNS需要进行一次配置的reload,过程大约20s。您可以通过修改corefile中的lamduck值(默认20秒)来调整CoreDNS的reload时长。

错误排查方式

由于当前仅支持创建名为default的CustomDNSConfig CR,本节通过创建其他命名的CustomDNSConfig CR演示CustomDNSConfig状态为NotSupported时的原因。

  1. 使用以下内容创建test.yaml。

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: test  ##仅支持名为default 的CR, 不支持其他
    spec:
      zones:
      - name: example.com
        forward:
          upstreams:
          - 100.100.2.138
      - name: foo.com
        hosts:
        - hostName: "ah.foo.com"
          ipAddress: 1.1.xx.251
        - hostName: "aha.foo.com"
          ipAddress: 1.1.xx.252
  2. 执行以下命令,创建CustomDNSConfig。

    kubectl apply -f test.yaml
  3. 执行以下命令,查看生成的corefile。

    kubectl get customdnsconfig 

    预期输出:

    NAME      PHASE             VERSION                            AGE
    default   GenerateSuccess   847bf69cc4c97cee96xxxxxxxxxxx      89m
    test      NotSupported                                         9s

    可以看到命名为test的CustomDNSConfig无法创建成功,显示为NotSupported。

Event相关信息

自定义CoreDNS配置的Controller会同步相关Event信息到default Namespace下。

执行以下命令,查看Events。

kubectl get events

预期输出:

LAST SEEN   TYPE     REASON                  OBJECT                           MESSAGE
45m         Normal   CustomDNSConfigSyncOk   customdnsconfig/default          custom dns config sync to coredns configmap success
相关文章

ALB Ingress概述 2025-04-15 17:15

本文介绍Ingress基本概念、ALB Ingress Controller工作原理和ALB Ingress Controller使用说明。 Ingress基本概念

管理ALB Ingress Controller组件 2025-04-15 17:15

ACK Serverless集群基于ALB七层转发规则提供了托管的ALB Ingress Controller。本文介绍如何在ACK Serverless集群安装、升级和卸载ALB Ingress Controller。

通过ALB Ingress访问服务 2025-04-15 17:15

ALB Ingress支持HTTP、HTTPS和QUIC协议,满足云原生应用在需要高度弹性和大规模七层流量管理时的各种需求,与Nginx Ingress兼容。同时,支持复杂的业务路由配置和TLS证书的自动管理,提供灵活的流量管理机制。您可以通过配置转发规则,实现不同URL访问集群内不同的Servic

ALB配额计算方式 2025-04-15 17:15

配额(Quota)是指在特定时间段内,对某个资源或服务的使用量或访问次数的限制,通常用于控制资源的分配和使用。在阿里云负载均衡(ALB)服务中,配额计算方式是根据不同的资源类型和资源使用情况来确定的。本文从标准版ALB实例、服务器组、监听和转发规则几个方面介绍ALB的配额计算方式。 ALB配额计算示

ALB Ingress服务高级用法 2025-04-15 17:15

在ACK Serverless集群中,ALB Ingress对集群服务(Service)中外部可访问的API对象进行管理,提供七层负载均衡能力。本文介绍如何使用ALB Ingress将来自不同域名或URL路径的请求转发给不同的后端服务器组、将HTTP访问重定向至HTTPS及实现灰度发布等功能。

ALB Ingress配置词典 2025-04-15 17:15

您可通过配置AlbConfig资源以自定义ALB实例的配置。本文列举了ALB Ingress支持的Annotation(注解)以及AlbConfig字段的具体内容和用法。 索引 Annotation字段 <

目录
Copyright © 2025 your company All Rights Reserved. Powered by 博智数字服务平台.
闽ICP备08105208号-1