Kubernetes 服务对Pod 设置DNS 信息说明

2020-06-18 0 By admin

接上文:

Kubernetes 服务的 DNS 服务搭建和配置指南 -2

五、Pod 资源对象配置 DNS 信息

除了使用集群范围的DNS服务(如CoreDNS),在Pod级别也能设置DNS的相关策略和配置。

5.1、DNS 策略配置

在Pod的YAML配置文件中通过 spec.dnsPolicy 字段设置DNS策略,例如:

apiVersion: v1
king: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      dnsPolicy: Default

目前可以设置的DNS策略如下:

  1. Default:继承Pod所在宿主机的DNS设置。
  2. ClusterFirst:优先使用Kubernetes环境的DNS服务(如CoreDNS提供的域名解析服务),将无法解析的域名转发到从宿主机继承的DNS服务器。
  3. ClusterFirstWithHostNet:与ClusterFirst相同,对于以hostNetwork模式运行的Pod,应明确指定使用该策略。
  4. None:忽略Kubernetes环境的DNS配置,通过spec.dnsConfig自定义DNS配置。这个选项从Kubernetes 1.9版本开始引入,到Kubernetes 1.10版本升级为Beta版,到Kubernetes 1.14版本升级为稳定版。

5.2、DNS 配置设置

自定义DNS配置可以通过 spec.dnsConfig 字段进行设置,可以设置下列信息。

  1. nameservers:一组DNS服务器的列表,最多可以设置3个。
  2. searches:一组用于域名搜索的DNS域名后缀,最多可以设置6个。
  3. options:配置其他可选DNS参数,例如ndots、timeout等,以name或name/value对的形式表示。

以下面的dnsConfig为例:

apiVersion: v1
king: Pod
metadata:
  name: dns-example
  namespace: default
spec:
  containers:
    - name: test
    image: nginx
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 1.2.3.4
    searches:
      - nsl.svc.cluster.local
      - my.dns.search.suffix
    options:
      - name: ndots
        value: "2"
      - name: edns0

该Pod被成功创建之后,容器内的DNS配置文件/etc/resolv.conf的内容将被系统设置为:
nameserver 1.2.3.4
search nsl.svc.cluster.local my.dns.search.suffix
options ndots:2 edns0

表示该Pod完全使用自定义的DNS配置,不再使用Kubernetes环境的DNS服务。