如果需要使用內網的鏡像倉庫來拉取鏡像,或者容器需要訪問內網中的域名,則需要配置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