如果您需要使用自建DNS服务来解析镜像仓库以及其他应用的域名,需要将ACS Pod使用的DNS配置为您自建的DNS服务器。本文介绍如何为ACS Pod配置自定义DNS。
适用范围
以下3种情况可以通过Annotation配置自定义DNS:
场景一:使用
Default
DNS策略,并且希望在集群层面通过eci-profile统一做自定义DNS配置。场景二:使用
ClusterFirst
DNS策略,同时需要从自建DNS服务器解析镜像仓库的域名,用于拉取镜像。场景三:使用
Default
DNS策略,并且希望在集群层面通过eci-profile统一做自定义DNS配置, 同时需要从自建DNS服务器解析镜像仓库的域名,用于拉取镜像。
不适用范围:
希望使用云解析的DNS服务器域名来解析包括应用层的解析以及镜像仓库域名的解析。推荐直接使用
Default
DNS策略, 不需要额外自定义DNS。希望使用自建DNS服务解析域名, 但是仍然希望使用云解析的DNS服务器来做镜像拉取时的镜像仓库域名的解析,同时希望在应用层面做单独的自定义DNS配置。推荐使用
None
DNS策略, 通过Pod Spec中的dnsConfig
字段来设置自建DNS服务器。 具体操作,请参见场景二:Pod层面自定义DNS配置。
配置说明
以下内容仅为了演示Annotation的使用方法。在实际应用场景中,一般不会单独在Pod和Deployment上通过Annotation来配置自定义DNS, 而是通过eci-profile等机制在集群层面统一配置。
您可以在Pod metadata中添加network.alibabacloud.com/custom-dnsconfig
的Annotation来指定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 | []String |
| DNS服务器的IP地址列表。仅支持填入2个IP地址,多余的会自动忽略。 同时,系统会在最后自动追加阿里云DNS服务器的IP地址,以保证系统服务正常。 |
searches | []String |
| DNS搜索域列表。最多允许32个。 进行域名解析时,如果输入的域名不完整,系统会自动尝试使用该列表中的域名后缀来补全并进行解析。 | ||
options | []String |
| DNS解析选项。可包含多个Key:Value值。以下为一些常见选项:
|
请您根据实际业务需求为Pod配置dnsPolicy
。例如,当您的需求与场景二匹配时,您需要配置dnsPolicy
为ClusterFirst
。
若修改配置后,Pod会Pending并报错InternalError,请检查您的配置内容是否正确。
操作步骤
下面以无状态应用为例:
使用以下示例内容创建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
执行以下命令创建应用。
kubectl apply -f deploy.yaml
执行以下命令,查看应用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)
- 适用范围
- 配置说明
- 操作步骤