如果需要使用内网的镜像仓库来拉取镜像,或者容器需要访问内网中的域名,则需要配置ACS Pod使用的DNS为用户内网DNS,以便解析内网域名。本文介绍如何为ACS Pod配置自定义DNS。
适用范围
可以在以下三种情况下配置自定义DNS:
使用默认DNS策略且未指定DNS配置:如果集群已配置
dnsPolicy=Default
且未指定任何DNS配置,则默认情况下将使用云解析的DNS服务器地址。使用默认DNS策略但指定了DNS配置:如果集群已配置
dnsPolicy=Default
并且指定了DNS配置,可以自定义DNS服务器地址。使用自建DNS服务器拉取镜像:如果需要从使用了自建DNS服务器解析域名的自建镜像仓库中拉取镜像,则应配置自定义DNS。
配置说明
您可以在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 | 子项 | 类型 | 示例值 | 描述 |
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
且配置了CoreDNS时,只适用场景3。
当配置错误,Pod会Pending并报错InternalError。请检查配置
操作步骤
下面以无状态应用为例:
通过控制台使用
登录容器计算服务控制台,在左侧导航栏选择集群。
在集群页面,单击目标集群ID,然后在左侧导航栏,选择
。在无状态页面,单击使用镜像创建。
在您填写完应用基本信息后,点击下一步。
填写完容器配置后,点击下一步。
在高级配置页面中,根据您自己的需求,在Pod注解中填入上述配置,比如您需要配置
network.alibabacloud.com/custom-dnsconfig
,按照下图完成配置后,单击创建按钮。
通过kubectl配置
生成应用配置
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":["114.114.114.114","8.8.8.8"],"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
观察pod
kubectl get pod -w
查看结果
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
注意: 无法通过控制台修改dnsPolicy