日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

DNS策略配置和域名解析說明

更新時(shí)間:

本文介紹如何針對不同的場景使用dnsPolicy字段為集群的Pod配置DNS策略,以及如何使用HostAliases字段在容器Pod內(nèi)部解析域名到固定IP地址。

前提條件

背景信息

集群DNS域名解析原理詳情,請參見Kubernetes集群中DNS域名解析原理

ACK集群默認(rèn)部署了一套CoreDNS工作負(fù)載,并通過kube-dns的服務(wù)名暴露DNS服務(wù)。ACK部署的CoreDNS工作負(fù)載后端是兩個(gè)名為coredns的Pod,集群會根據(jù)Pod內(nèi)的配置,將域名請求發(fā)送至集群DNS服務(wù)器獲取結(jié)果。

  • 可以執(zhí)行以下命令查看kube-dns的服務(wù)詳情。

    kubectl get svc kube-dns -n kube-system
  • 可以執(zhí)行以下命令查看CoreDNS的Pod的詳情。

    kubectl get deployment coredns -n kube-system

使用dnsPolicy字段為集群的Pod配置DNS策略

ACK支持通過dnsPolicy字段為每個(gè)Pod配置不同的DNS策略。目前ACK集群支持四種策略:

  • ClusterFirst:這是默認(rèn)的DNS策略,意味著當(dāng)Pod需要進(jìn)行域名解析時(shí),首先會查詢集群內(nèi)部的CoreDNS服務(wù)。通過CoreDNS來做域名解析,表示Pod的/etc/resolv.conf文件被自動配置指向kube-dns服務(wù)地址。

  • None:使用該策略,Kubernetes會忽略集群的DNS策略。需要您提供dnsConfig字段來指定DNS配置信息,否則Pod可能無法正確解析任何域名。

  • Default:Pod直接繼承集群節(jié)點(diǎn)的域名解析配置。即在ACK集群直接使用ECS的/etc/resolv.conf文件(文件內(nèi)配置的是阿里云DNS服務(wù))。

  • ClusterFirstWithHostNet:強(qiáng)制在hostNetwork網(wǎng)絡(luò)模式下使用ClusterFirst策略(默認(rèn)使用Default策略)。

針對上述四種策略,本文列舉四種場景分別介紹如何配置dnsPolicy。

場景一:使用ACK集群提供的CoreDNS來做域名解析

如需使用ACK集群提供的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配置

當(dāng)您需要給Deployment類型的工作負(fù)載指定DNS配置時(shí),可使用dnsPolicy: None策略。示例配置如下:

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.xx.xx"]
    searches:
    - default.svc.cluster.local
    - svc.cluster.local
    - cluster.local
    options:
    - name: ndots
      value: "2"

其中,dnsConfig中的參數(shù)說明如下:

參數(shù)

描述

nameservers

將用作Pod的DNS服務(wù)器的IP地址列表。最多可以指定3個(gè)IP地址。當(dāng)Pod的dnsPolicy設(shè)置為None時(shí),列表必須至少包含一個(gè)IP地址,否則此屬性是可選的。列出的DNS的IP列表將合并到基于dnsPolicy生成的域名解析文件的nameserver字段中,并刪除重復(fù)的地址。

searches

Pod中主機(jī)名查找的DNS搜索域列表。此屬性是可選的。指定后,提供的列表將合并到從所選DNS策略生成的基本搜索域名中,并刪除重復(fù)的域名。Kubernetes最多允許6個(gè)搜索域。

說明

當(dāng)DNS Server不可達(dá)時(shí),僅會嘗試第一個(gè)搜索域。

options

可選的對象列表,其中每個(gè)對象可以具有name屬性(必需)和value屬性(可選)。此屬性中的內(nèi)容將合并到從指定的DNS策略生成的選項(xiàng)中,并刪除重復(fù)的條目。關(guān)于options更多詳細(xì)信息,請參見DNS解析及緩存策略說明

更多信息,請參見Kubernetes官網(wǎng)的DNS配置說明

場景三:采用阿里云ECS的DNS配置

當(dāng)您的應(yīng)用Pod不需要訪問集群內(nèi)的其他服務(wù),只需要通過阿里云DNS來做解析,也不希望DNS解析經(jīng)過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

場景四:在HostNetwork網(wǎng)絡(luò)模式下訪問集群服務(wù)

如果您的應(yīng)用Pod使用hostNetwork:true來配置網(wǎng)絡(luò),Pod中運(yùn)行的應(yīng)用程序可以直接看到宿主機(jī)的網(wǎng)絡(luò)接口,其DNS策略默認(rèn)為Default,不能訪問集群內(nèi)的服務(wù)。如果您希望在此網(wǎng)絡(luò)模式下訪問集群內(nèi)服務(wù),可使用dnsPolicy: ClusterFirstWithHostNet策略。示例配置如下:

apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  hostNetwork: true
  dnsPolicy: ClusterFirstWithHostNet
  containers:
  - image: alpine
    command:
      - sleep
      - "10000"
    imagePullPolicy: Always
    name: alpine

使用HostAliases字段在容器Pod內(nèi)部解析域名到固定IP地址

在容器Pod內(nèi)部解析域名到固定IP地址有如下兩種方法:

  • 全局配置(影響整個(gè)集群中所有Pod對特定域名的解析結(jié)果:當(dāng)您希望在容器Pod內(nèi)部解析某一域名到固定IP地址時(shí),可以在CoreDNS啟用hosts插件,具體操作,請參見CoreDNS的擴(kuò)展配置

  • 針對單個(gè)Pod的配置:若您希望僅在某個(gè)容器Pod內(nèi)部解析域名到固定IP地址生效,您可以通過HostAliases字段修改容器Pod內(nèi)的/etc/hosts文件實(shí)現(xiàn)該操作。示例配置如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: hostaliases-pod
    spec:
      hostAliases:
      - ip: "127.0.**.**"
        hostnames:
        - "foo.local"
        - "bar.local"
      - ip: "10.1.**.**"
        hostnames:
        - "foo.remote"
      containers:
      - name: cat-hosts
        image: busybox:1.28
        command:
        - cat
        args:
        - "/etc/hosts"

    當(dāng)為Pod的spec字段中增加hostAliases字段后,Pod啟動后/etc/hosts文件會被初始化成以下內(nèi)容。

    # Kubernetes-managed hosts file.
    127.0.**.**	localhost
    ::1	localhost ip6-localhost ip6-loopback
    fe00::0	ip6-localnet
    fe00::0	ip6-mcastprefix
    fe00::1	ip6-allnodes
    fe00::2	ip6-allrouters
    10.200.**.**	hostaliases-pod
    
    # Entries added by HostAliases.
    127.0.**.**	foo.local	bar.local
    10.1.**.**	foo.remote	bar.remote

    可以看到,foo.local、bar.local、foo.remote域名都已經(jīng)綁定到固定的IP。

相關(guān)文檔