为ACS Pod配置自定义DNS

更新时间:2025-03-12 09:10:16

如果您需要使用自建DNS服务来解析镜像仓库以及其他应用的域名,需要将ACS Pod使用的DNS配置为您自建的DNS服务器。本文介绍如何为ACS Pod配置自定义DNS。

适用范围

以下3种情况可以通过Annotation配置自定义DNS:

  • 场景一:使用DefaultDNS策略,并且希望在集群层面通过eci-profile统一做自定义DNS配置。

  • 场景二:使用ClusterFirstDNS策略,同时需要从自建DNS服务器解析镜像仓库的域名,用于拉取镜像。

  • 场景三:使用DefaultDNS策略,并且希望在集群层面通过eci-profile统一做自定义DNS配置, 同时需要从自建DNS服务器解析镜像仓库的域名,用于拉取镜像。

不适用范围:

  • 希望使用云解析的DNS服务器域名来解析包括应用层的解析以及镜像仓库域名的解析。推荐直接使用DefaultDNS策略, 不需要额外自定义DNS。

  • 希望使用自建DNS服务解析域名, 但是仍然希望使用云解析的DNS服务器来做镜像拉取时的镜像仓库域名的解析,同时希望在应用层面做单独的自定义DNS配置。推荐使用NoneDNS策略, 通过Pod Spec中的dnsConfig字段来设置自建DNS服务器。 具体操作,请参见场景二:Pod层面自定义DNS配置

配置说明

重要

以下内容仅为了演示Annotation的使用方法。在实际应用场景中,一般不会单独在PodDeployment上通过Annotation来配置自定义DNS, 而是通过eci-profile等机制在集群层面统一配置。

您可以在Pod metadata中添加network.alibabacloud.com/custom-dnsconfigAnnotation来指定ACS Pod使用自定义DNS。该Annotation的取值格式为标准Kubernetes spec.dnsConfig结构{"servers":["20.1.xx.xx","30.1.xx.xx"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}

配置整体结构如下:

{
    "servers": [
        "20.1.xx.xx",
        "30.1.xx.xx"
    ],
    "searches": [
        "xx.com",
        "yy.com"
    ],
    "options": [
        "ndots:2",
        "edns0"
    ]
}

各字段说明如下:

key

value

子项

类型

示例值

描述

key

value

子项

类型

示例值

描述

network.alibabacloud.com/custom-dnsconfig

{"servers":["20.1.xx.xx","30.1.xx.xx"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}

servers

[]String

["20.1.xx.xx","30.1.xx.xx"]

DNS服务器的IP地址列表。仅支持填入2IP地址,多余的会自动忽略。

同时,系统会在最后自动追加阿里云DNS服务器的IP地址,以保证系统服务正常。

searches

[]String

["xx.com","yy.com"]

DNS搜索域列表。最多允许32个。

进行域名解析时,如果输入的域名不完整,系统会自动尝试使用该列表中的域名后缀来补全并进行解析。

options

[]String

["ndots:2","edns0"]

DNS解析选项。可包含多个Key:Value值。以下为一些常见选项:

  • ndots:设置DNS在主机名中必须至少包含多少个点号(.)才会将其视为绝对域名,否则会尝试在搜索域中进行解析。

  • edns0:开启EDNS0扩展支持,以支持更大的UDP数据包大小和提高安全性。

  • timeout:设置DNS查询超时时间。

  • attempts:设置DNS查询尝试次数。

重要

请您根据实际业务需求为Pod配置dnsPolicy。例如,当您的需求与场景二匹配时,您需要配置dnsPolicyClusterFirst

若修改配置后,PodPending并报错InternalError,请检查您的配置内容是否正确。

操作步骤

下面以无状态应用为例:

  1. 使用以下示例内容创建deploy.yaml文件,生成应用配置。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx-acs-custom-dns
      name: acs-custom-dns
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-acs-custom-dns
      template:
        metadata:
          annotations:
            network.alibabacloud.com/custom-dnsconfig: '{"servers":["114.114.114.114","8.8.8.8"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}'
          labels:
            alibabacloud.com/acs: 'true'
            alibabacloud.com/compute-class: general-purpose
            alibabacloud.com/compute-qos: default      
            app: nginx-acs-custom-dns
        spec:
          containers:
            - image: 'mirrors-ssl.aliyuncs.com/nginx:stable-alpine'
              imagePullPolicy: Always
              name: nginx
              ports:
                - containerPort: 80
                  protocol: TCP
          dnsPolicy: Default
  2. 执行以下命令创建应用。

    kubectl apply -f deploy.yaml
  3. 执行以下命令,查看应用DNS详情。

    kubectl  exec  <pod name>  cat /etc/resolv.conf

    预期输出:

    search xx.com yy.com
    nameserver 114.114.114.114
    nameserver 8.8.8.8
    nameserver 100.100.2.136
    options ndots:6 edns
  • 本页导读 (1)
  • 适用范围
  • 配置说明
  • 操作步骤
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等