美文网首页
k8s网络配置DNS

k8s网络配置DNS

作者: 宏势 | 来源:发表于2022-05-05 11:41 被阅读0次

Pod 的四种DNS策略

Kubernetes支持Pod维度DNS策略设置,通过pod规约中dnsPolicy字段设置,最终配置落到 /etc/resolv.conf文件中,也就说k8s最终还是通过设置Pod容器中/etc/resolv.conf 文件来做设置解析配置,跟普通的虚拟机或者实体机是一样,因为Pod容器本身就一个小的主机。

1.ClusterFirst(默认DNS策略)

采用集群DNS,与配置的集群域后缀不匹配的任何 DNS 查询 都将转发到从节点继承的上游名称服务器。简单来说,就是使用 Kubernetes 中 kubedns 或 coredns 服务进行域名解析,如果解析不成功,才会使用宿主机的 DNS 配置进行解析。

example容器/etc/resolv.conf

search test.svc.cluster.local svc.cluster.local cluster.local 
nameserver 10.96.0.10
options ndots:5

options ndots:5 代表当待解析域名包含.大于等于5时就会先解析域名,只有域名解析不成功时才会继续匹配serach域或domain域

访问test名字空间下example-svc服务,可以直接通过example-svc访问,会与search域组合,最终组合成example-svc.test.svc.cluster.local,访问test1名字空间下example-svc1,通过example-svc.test1,会与search域组合,最终组合成example-svc.test1.svc.cluster.local

设置search域主要还是为了方便k8s内部服务之间访问

2.None

自定义DNS策略,设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置,Pod 会使用其 dnsConfig 字段 所提供的 DNS 设置。

用户可以在 dnsConfig 字段中指定以下属性:

  • nameservers:将用作于 Pod 的 DNS 服务器的 IP 地址列表。 最多可以指定 3 个 IP 地址。当 Pod 的 dnsPolicy 设置为 "None" 时, 列表必须至少包含一个 IP 地址,否则此属性是可选的。 所列出的服务器将合并到从指定的 DNS 策略生成的基本名称服务器,并删除重复的地址。

  • searches:用于在 Pod 中查找主机名的 DNS 搜索域的列表。此属性是可选的。 指定此属性时,所提供的列表将合并到根据所选 DNS 策略生成的基本搜索域名中。 重复的域名将被删除。Kubernetes 最多允许 6 个搜索域。

  • options:可选的对象列表,其中每个对象可能具有 name 属性(必需)和 value 属性(可选)。 此属性中的内容将合并到从指定的 DNS 策略生成的选项。 重复的条目将被删除。

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

创建上面的 Pod 后,容器 test 会在其 /etc/resolv.conf 文件中获取以下内容:

nameserver 1.2.3.4
search ns1.svc.cluster-domain.example my.dns.search.suffix
options ndots:2 edns0

dnsConfig 是可选的,可以与任何dnsPolicyjie设置一起使用,当一起使用的时候,会进行合并,dnsPolicy优先级更高

3.Default

Pod 从运行所在的节点继承名称解析配置,即跟所在节点主机一致

4.ClusterFirstWithHostNet

对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略 为"ClusterFirstWithHostNet"

k8s新版本集群DNS服务是默认采用CoreDNS组件实现,1.13版本之前是采用Kube-dns

通过HostAliases 向 Pod /etc/hosts 文件添加条目

当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目, 可以在 Pod 级别覆盖对主机名的解析。你可以通过 PodSpec 的 HostAliases 字段来添加这些自定义条目.

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  restartPolicy: Never
  hostAliases:
  - ip: "127.0.0.1"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.2.3"
    hostnames:
    - "foo.remote"
    - "bar.remote"
  containers:
  - name: cat-hosts
    image: busybox
    command:
    - cat
    args:
    - "/etc/hosts"

pod打印/etc/hosts文件,多了以下内容

#Entries added by HostAliases.
127.0.0.1   foo.local   bar.local
10.1.2.3    foo.remote  bar.remote

避免手动去修改/etc/hosts文件,通过HostAliases进行修改,因为该文件由 Kubelet 管理,并且 可以在 Pod 创建/重启过程中被重写

相关文章

  • k8s 网络三

    k8s网络包括网络模型、CNI、Service、Ingress、DNS。k8s的容器网络关注两点:IP地址分配,路...

  • k8s网络配置DNS

    Pod 的四种DNS策略 Kubernetes支持Pod维度DNS策略设置,通过pod规约中dnsPolicy字段...

  • k8s coredns 配置上游dns

    k8s coredns 配置上游dns 一 . 配置corends的comfigmap 二. 检查本地主机设置 查...

  • Ubuntu 配置静态IP

    步骤 配置IP 配置DNS 配置hostname(如果需要) 重启网络

  • 网络DNS配置

    打开网络和共享中心 选择更改适配器设置=>本地连接(右键属性) 选择协议版本4> 属性DNS服务地址

  • K8s搭建

    引用:Kubernetes(一) 跟着官方文档从零搭建K8S 安装 阿里源配置 然后安装K8s 修改网络配置 配置...

  • docker 进阶操作

    数据管理 使用网络 容器互联 配置 DNS

  • centos6.5配置网络及虚拟网卡

    1.配置网络 修改 重启网卡 2、修改DNS 修改对应网卡的DNS的配置文件vi /etc/resolv.conf...

  • k8s kubeDNS

    k8s DNS 参考: dns-pod-service kubernetes-dns dns name 同一个na...

  • 静态ip配置中的问题

    一.需改Linux中的网络接口配置 设置dns 重启网络服务

网友评论

      本文标题:k8s网络配置DNS

      本文链接:https://www.haomeiwen.com/subject/xbpnyrtx.html