全部產品
Search
文件中心

Container Compute Service:DNS策略配置和網域名稱解析說明

更新時間:Dec 11, 2024

本文介紹如何在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: NonednsConfig策略。樣本配置如下:

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

  • 將用作Pod的DNS伺服器的IP地址清單,最多可以指定3個IP地址。

  • 當Pod的dnsPolicy設定為None時,列表必須至少包含一個IP地址,否則此屬性是可選的。

  • 列出的DNS的IP列表將合并到基於dnsPolicy產生的網域名稱解析檔案的nameserver欄位中,並重複資料刪除的地址。

searches

  • Pod中主機名稱尋找的DNS搜尋域列表,此屬性是可選的。

  • 指定後,提供的列表將合并到從所選DNS策略產生的基本搜尋網域名稱中,並重複資料刪除的網域名稱。

  • Kubernetes最多允許6個搜尋域。

options

  • 可選的對象列表,其中每個對象可以具有name屬性(必需)和value屬性(可選)。

  • 此屬性中的內容將合并到從指定的DNS策略產生的選項中,並重複資料刪除的條目。

更多資訊,請參見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解析及緩衝策略說明