如果您需要使用自建DNS服务来解析镜像仓库以及其他应用的域名,需要将ACS Pod使用的DNS配置为您自建的DNS服务器。本文介绍如何为ACS Pod配置自定义DNS。
适用范围
以下3种情况可以通过Annotation配置自定义DNS:
场景一:使用
Default
DNS策略,并且希望在集群层面通过acs-profile统一做自定义DNS配置。场景二:使用
ClusterFirst
DNS策略,同时需要从自建DNS服务器解析镜像仓库的域名,用于拉取镜像。场景三:使用
Default
DNS策略,并且希望在集群层面通过acs-profile统一做自定义DNS配置, 同时需要从自建DNS服务器解析镜像仓库的域名,用于拉取镜像。
不适用范围:
希望使用云解析的DNS服务器域名来解析包括应用层的解析以及镜像仓库域名的解析。推荐直接使用
Default
DNS策略, 不需要额外自定义DNS。希望使用自建DNS服务解析域名, 但是仍然希望使用云解析的DNS服务器来做镜像拉取时的镜像仓库域名的解析,同时希望在应用层面做单独的自定义DNS配置。推荐使用
None
DNS策略, 通过Pod Spec中的dnsConfig
字段来设置自建DNS服务器。 具体操作,请参见场景二:Pod层面自定义DNS配置。
配置说明
以下内容仅为了演示Annotation的使用方法。在实际应用场景中,一般不会单独在Pod和Deployment上通过Annotation来配置自定义DNS, 而是通过acs-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: test name: test-default spec: replicas: 1 selector: matchLabels: app: test template: metadata: annotations: network.alibabacloud.com/custom-dnsconfig: '{"servers":["20.1.XXX.XXX","30.1.X.X"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}' labels: app: test spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2 command: ["sh","-c","i=1; while true; do echo $i; i=$((i=i+1)); sleep 1; done;"] name: busybox resources: requests: cpu: "2" memory: "8Gi" limits: cpu: "2" memory: "8Gi" dnsPolicy: Default
部署应用 。
kubectl apply -f deploy.yaml
查看结果
kubectl exec <pod name> cat /etc/resolv.conf
预期输出:
search xx.com yy.com nameserver 20.1.XXX.XXX nameserver 30.1.XXX.XXX nameserver 100.100.2.136 options ndots:6 edns
集群统一配置说明
acs-profile支持配置Pod的自动注入,包括域名解析模式的集群维度的配置。 以下展示了一个通过acs-profile统一为default命名空间的Pod,自动注入自定义DNS配置的方法。应用此配置后,Pod/Deployment不再需要添加Annotation,只需要将dnsPolicy
设置为Default
。acs-profile的详细用法,请参见配置acs-profile实现Pod配置自动注入。
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-profile
namespace: kube-system
data:
selectors: |
[
{
"name": "selector-demo1",
"namespaceSelector": {
"matchLabels": {
"kubernetes.io/metadata.name": "default"
}
},
"effect": {
"annotations": {
"network.alibabacloud.com/custom-dnsconfig": "{\"servers\":[\"20.1.XXX.XXX\",\"30.1.X.X\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}"
}
}
}
]
- 本页导读 (0)
- 适用范围
- 配置说明
- 操作步骤
- 集群统一配置说明