5154

Good Luck To You!

k8s+dns使用

Kubernetes 中,DNS 服务用于服务发现和负载均衡,通过

,以下是关于Kubernetes (K8s) 中 DNS 服务的详细解析与使用指南,本文将涵盖 K8s DNS 的作用、核心组件 CoreDNS 的安装与配置、Pod 的 DNS 策略以及常见问题解答。


K8s DNS 的作用

功能 说明
服务发现 通过服务名称(如 myservice.default.svc.cluster.local)访问其他服务,无需依赖 IP 地址。
跨命名空间访问 支持通过域名后缀区分不同命名空间(如 default.svc.cluster.local)。
解耦服务依赖 当服务的 IP 地址变更时,DNS 自动更新解析结果,避免手动维护 IP 列表。
Pod 通信 每个 Pod 自动获取 DNS 配置,可通过主机名或服务名进行通信。

核心组件:CoreDNS

CoreDNS 的架构与部署

  • 部署方式

    • 使用 kubectl apply f https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/coredns/coredns.yaml.base 自动部署。
    • 包含 Deployment(定义 CoreDNS 副本)、Service(暴露 DNS 服务,默认集群 IP 为 96.0.10)和 ConfigMap(存储 Corefile 配置)。
  • 示例配置

    k8s+dns使用

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns
      namespace: kubesystem
    data:
      Corefile: |
        .:53 {
            errors
            health
            ready
            kubernetes cluster.local inaddr.arpa ip6.arpa {
                fallthrough inaddr.arpa ip6.arpa
                ttl 30
            }
            prometheus :9153
            forward . /etc/resolv.conf
            cache 30
            loop
            reload
            loadbalance
        }

CoreDNS 的核心插件

插件 功能
kubernetes 从 K8s API 读取服务和端点信息,生成 DNS 记录。
prometheus 暴露监控指标(如 /metrics)。
forward 转发外部域名查询到宿主机的 DNS 服务器(如 /etc/resolv.conf)。
cache 缓存 DNS 查询结果,减少重复请求。
loadbalance 对 A/AAAA 记录进行负载均衡。
health 提供健康检查端点(如 /health),用于 Kubernetes 探针。

Pod 的 DNS 策略与自定义配置

DNS 策略 (dnsPolicy)

策略 说明
Default 继承宿主机的 DNS 配置(适用于需要与外部 DNS 服务器交互的场景)。
ClusterFirst 优先使用 K8s DNS 服务,未解析的域名再转发到宿主机 DNS。
None 忽略 K8s DNS 配置,完全通过 dnsConfig 自定义。

自定义 DNS 配置 (dnsConfig)

  • 字段说明

    • nameservers:自定义 DNS 服务器列表(最多 3 个)。
    • searches:域名搜索后缀(最多 6 个)。
    • options:其他参数(如 ndotstimeout)。
  • 示例配置

    k8s+dns使用

    spec:
      dnsPolicy: "None"
      dnsConfig:
        nameservers:
          8.8.8.8
          1.1.1.1
        searches:
          mynamespace.svc.cluster.local
        options:
          name: ndots
            value: "2"

常见问题与解答

问题 1:如何验证 CoreDNS 是否生效?

解答

  1. 创建一个测试 Pod(如 busybox):
    kubectl run busybox image=busybox sleep 3600
  2. 进入 Pod 并执行 nslookup
    kubectl exec busybox it nslookup myservice.default.svc.cluster.local

    若返回正确的 Service IP,则 CoreDNS 正常工作。

    k8s+dns使用

问题 2:如何自定义服务域名的解析规则?

解答

  1. 在 CoreDNS 的 Corefile 中添加自定义规则,将 example.com 解析到某个 Service:
    example.com {
        fallthrough inaddr.arpa ip6.arpa
        proxy example.com 10.96.0.10
    }
  2. 重新加载配置(CoreDNS 支持热重载)。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年6月    »
1
2345678
9101112131415
16171819202122
23242526272829
30
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.