本文介绍如何在容器计算服务 ACS(Container Compute Service)中针对不同的场景使用dnsPolicy字段为集群的Pod配置DNS策略。
背景信息
集群DNS域名解析原理详情,请参见Kubernetes集群中DNS域名解析原理。
ACS集群下CoreDNS部署在云托管侧,并通过kube-dns的服务名暴露DNS服务。集群会根据Pod内的配置,将域名请求发送至集群DNS服务器获取结果。可以执行以下命令查看kube-dns的服务详情。
kubectl get svc kube-dns -n kube-system
使用dnsPolicy字段为集群的Pod配置DNS策略
ACS支持通过dnsPolicy字段为每个Pod配置不同的DNS策略。目前ACS集群支持四种策略:
ClusterFirst
:这是默认的DNS策略,意味着当Pod需要进行域名解析时,首先会查询集群内部的CoreDNS服务。通过CoreDNS来做域名解析,表示Pod的/etc/resolv.conf
文件被自动配置指向kube-dns服务地址。None
:使用该策略,Kubernetes会忽略集群的DNS策略。需要您提供dnsConfig
字段来指定DNS配置信息,否则Pod可能无法正确解析任何域名。Default
:采用阿里云云解析来提供DNS服务。ClusterFirstWithHostNet
:ACS不支持hostnetwork,当dnsPolicy配置为ClusterFirstWithHostNet
时,等同于dnsPolicy配置为ClusterFirst
。具体内容,请参见Kubernetes应用限制。
针对上述策略,本文列举三种场景分别介绍如何配置dnsPolicy。
场景一:使用ACS集群提供的CoreDNS来做域名解析
如需使用ACS集群提供的CoreDNS来做域名解析,可使用dnsPolicy: ClusterFirst
策略。示例配置如下:
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # 此镜像仅作为示例,请替换后再进行验证。
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: ClusterFirst
场景二:Pod层面自定义DNS配置
当您需要使用自定义DNS配置时,可使用dnsPolicy: None
和dnsConfig
策略。示例配置如下:
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # 此镜像仅作为示例,请替换后再进行验证。
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: None
dnsConfig:
nameservers: ["169.254.xxx.xxx"]
searches:
- default.svc.cluster.local
- svc.cluster.local
- cluster.local
options:
- name: ndots
value: "2"
其中,dnsConfig
中的参数说明如下:
参数 | 描述 |
nameservers |
|
searches |
|
options |
|
更多信息,请参见Kubernetes官网的DNS配置说明。
场景三:采用阿里云云解析来提供DNS服务
当您的应用Pod不需要访问集群内的其他服务,只需要通过阿里云DNS来做解析,也不希望DNS解析经过CoreDNS,可以采用dnsPolicy: Default
策略。示例配置如下:
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # 此镜像仅作为示例,请替换后再进行验证。
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: Default
相关文档
关于DNS解析及缓存策略的相关内容,请参见DNS解析及缓存策略说明。