本文介紹如何在Container Compute Service (ACS)中針對不同的情境使用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解析及緩衝策略說明。