首页 > 其他分享 >【K8s】专题十五(5):Kubernetes 网络之 CoreDNS

【K8s】专题十五(5):Kubernetes 网络之 CoreDNS

时间:2024-12-13 11:30:05浏览次数:6  
标签:插件 解析 Kubernetes arpa DNS CoreDNS K8s

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【K8s】专题十五(4):Kubernetes 网络之 Calico 插件安装、切换网络模式、卸载


目录

一、基本介绍

二、功能特性

三、Corefile 配置示例

四、DNS 策略


一、基本介绍

CoreDNS 是一种使用 Golang 编写、由配置文件控制的插件式 DNS 服务器,自 Kubernetes 1.13 版本起,成为 Kubernetes 的默认 DNS 服务器,通常用于 Kubernetes 集群内部服务发现,允许应用程序之间直接、或通过 Service 对象名称互相访问。

CoreDNS 采用 Apache License Version 2 开源协议,是 CNCF 孵化的开源项目,并已正式毕业,成为云原生环境下 DNS 服务器和服务发现的一种成熟解决方案。

CoreDNS 采用插件式架构,可以轻松实现功能扩展。各类插件用于处理 DNS 请求、转发请求、缓存结果、记录日志等。CoreDNS 具有高性能、自动重试、健康检查和负载均衡等功能,确保了 DNS 服务的可靠性。


二、功能特性
  • 插件化(Plugins):CoreDNS 的核心理念是插件化,每个插件执行 DNS 功能,如 Kubernetes 服务发现、Prometheus 指标或重写查询
  • 简单(Simplicity):CoreDNS 使配置文件变得简单,采用 Caddy 中的 DSL 配置方案,即 Corefile 形式的配置文件
  • 服务发现 (Service Discovery):CoreDNS 通过 Kubernetes 插件与 Kubernetes 集成,或通过 ETCD 插件直接与 ETCD 集成
  • 快速和弹性(Fast and Flexible):CoreDNS 的目标是快速高效,因此插件也很灵活,可以根据需要编译 CoreDNS


三、Corefile 配置示例
# kubectl get cm coredns -oyaml -n kube-system 
...
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf {
           max_concurrent 10000
        }
        cache 30
        loop
        reload
        loadbalance
    }
...

每部分配置语句的解释如下:

  • .:53:表示 CoreDNS 监听在 53 端口上,处理所有到达该端口的 DNS 请求
  • errors:该插件用于将错误记录到标准输出,以便在 CoreDNS 遇到问题时进行调试
  • health:该插件用于提供 CoreDNS 的健康报告,会在 http://localhost:8080/health 处提供健康检查端点
    • lameduck 5s:health 插件的一个选项,表示当 CoreDNS 进程被标记为不健康时等待 5 秒钟才关闭,这段时间允许继续处理未完成请求
  • ready:该插件用于在端口 8181 上提供一个 HTTP 端点,以指示 CoreDNS 是否准备好处理请求。当所有能够表达自身就绪的插件都已就绪时,在此端点返回 200 状态码
  • kubernetes:该插件用于处理 Kubernetes 内部 DNS 解析,将请求解析为集群内部的 Pod 和服务地址
    • cluster.local in-addr.arpa ip6.arpa:指定 Kubernetes 集群的域和反向 DNS 查找域
    • pods insecure:允许 CoreDNS 返回 Pod 的 IP 地址,即使这些 Pod 的 IP 地址没有在 DNS 中注册
    • fallthrough in-addr.arpa ip6.arpa:如果请求无法在 Kubernetes 集群内解析,CoreDNS 会将请求转发到外部 DNS 服务器
    • ttl 30:设置 DNS 记录的生存时间为 30 秒
  • prometheus:该插件用于以 Prometheus 格式在 http://localhost:9153/metrics 上提供 CoreDNS 的度量指标值
  • forward:该插件用于将不在 Kubernetes 集群域内的任何查询转发到预定义的解析器(通常是 /etc/resolv.conf 中指定的 DNS 服务器)
    • max_concurrent 10000:设置最大并发请求的数量为 10000
  • cache:该插件用于启用前端缓存,缓存查询结果 30 秒,以减少对外部 DNS 服务器的请求负载
  • loop:该插件用于检测简单的转发环,如果发现死循环,则中止 CoreDNS 进程
  • reload:该插件用于在 Corefile 内容发生变更后,等待一段时间后自动重新加载使更改生效
  • loadbalance:该插件用于声明一个轮转式 DNS 负载均衡器,它在应答中随机分配 A、AAAA 和 MX 记录的顺序


四、DNS 策略

在 Deployment、StatefulSet 等资源对象中,可以通过 spec.template.spec.dnsPolicy 声明以下几种类型 DNS 策略:

  • Default: Pod 从所在节点继承 DNS 配置,即使用所在节点的 /etc/resolv.conf 来进行解析
  • ClusterFirst:默认策略,Pod 使用 CoreDNS 进行 DNS 解析,若解析不成功,才会从所在节点继承 DNS 配置进行解析
  • ClusterFirstWithHostNet:针对以 HOST 模式(hostNetwork)启动的 Pod,若还需要使用 CoreDNS 进行 DNS 解析,则设置为 ClusterFirstWithHostNet
  • None:不会使用 CoreDNS 或从所在节点继承 DNS 配置进行解析,而是使用自定义的 dnsConfig 配置,示例如下:
...
spec:
  ...
  template:
    spec:
      containers:
      ...
      dnsPolicy: "None"
      dnsConfig:
        nameservers:
        - 10.96.0.10
        searches:
        - suffix1.povilasv.me
        - suffix2.povilasv.me
        - suffix3.povilasv.me
        - kube-system.svc.cluster.local
        - svc.cluster.local
        - cluster.local
        options:
        - name: ndots
          value: "5"
...

标签:插件,解析,Kubernetes,arpa,DNS,CoreDNS,K8s
From: https://blog.csdn.net/2401_82795112/article/details/144374432

相关文章

  • 【kubernetes】k8s集群的简述与搭建
    简述Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序关键特性自动化部署和回滚:Kubernetes可以自动化地部署和回滚应用程序,确保应用程序始终处于预期的状态。服务发现和负载均衡:Kubernetes提供内置的服务发现和负载均衡功能,确保流......
  • k8s前后端分离部署实践
    前序目前大多数项目都在以前后端分离方式进行项目的开发、部署。这样方便在更新前端时,不用重启后端,反之亦然,前后端解耦也提高开发的效率。今天咱们讲讲在如何在k8s集群中进行前后端分离部署。给大家分析个: 小镜智能AIChatGPT镜像站:https://xj.xiaozhi01.com/42091镜像制......
  • milvus异机恢复(standalone-to-k8s)
    环境:OS:Centos7milvusdb:2.4.6源端为standalone,目的端为k8s环境的milvusdb1.源库进行备份/opt/milvus_backup/milvus-backupcreate-nmvsdb_ai_bak_20241211-dmvsdb_ai--config=/opt/milvus_backup/conf/backup.yaml2.使用mc工具将minio里的备份文件拷贝到本地存储##下......
  • k8s阶段07 Pod网路模型及主流网络插件flannel, Calico, Cilium
    Kubernetes网络:Node网络:Node间能正常建立TCP/IP通信连接Node间隔了路由器:隧道模型Node共存于同一个二层网络:隧道模型路由模型Service网络Pod网络CNI:网络插件NetP......
  • k8s系列之五通过Service访问Pod
    参考:https://blog.csdn.net/u011067966/article/details/135885967 1.0变更因本地原因,k8s系列之二集群环境搭建以及插件安装中的虚拟机更换为以下3个节点,后续文章均在此三个节点上实践:节点   ipk8s-master   192.168.200.128k8s-node1   192.168.200.129k8s-node2......
  • 通过 sealos 部署 k8s 集群
    sealos官方文档release背景sealos是用于一键部署k8s集群的工具。对于不想被太多操作系统细节配置困扰,又想快速装好一套测试k8s集群的同学,无疑是很方便的网上教程很多,这边自己简单写下在公司机器上安装的过程,绕了一部分坑,帮助大家更快地使用官方文档还说明sealos可用来......
  • Kubernetes集群巡检内容
    1.概述Kubernetes集群巡检是一种监测和评估底层系统运行状况的重要手段,旨在快速发现系统中存在的潜在风险并提供修复建议。通过对Kubernetes(K8s)集群进行定期巡检,可以有效保障集群稳定性、优化资源利用率、提升安全性,并降低运维风险,特别是在生产环境中,这种预防性措施尤为重......
  • k8s 开启命令自动补全
     #配置kubectl子命令补全[root@master01work]#yuminstall-ybash-completion[root@master01work]#source/usr/share/bash-completion/bash_completion[root@master01work]#source<(kubectlcompletionbash)[root@master01work]#kubectlcompletionbash>~......
  • k8s-服务网格实战-配置 Mesh(灰度发布)
    k8s-服务网格实战-配置Mesh(灰度发布)程序那点事2023-11-0722:09湖南 在上一篇 k8s-服务网格实战-入门Istio中分享了如何安装部署 Istio,同时可以利用 Istio 实现 gRPC 的负载均衡。今天我们更进一步,深入了解使用Istio的功能。从Istio的流量模型中......
  • 运维实战:K8s 上的 Doris 高可用集群最佳实践
    首发:运维有术今天我们将深入探讨::如何在K8s集群上部署Computestoragecoupled(存算耦合)模式的Doris高可用集群?本文,我将为您提供一份全面的实战指南,逐步引导您完成以下关键任务:配置DorisConfigMap:实现自定义配置文件配置DorisSecret:管理特殊密码配置DorisService:......