云原生与容器 · 进阶

Kubernetes DNS 与 Service 连通性排障

从只读对象证据出发,分离 DNS、Service、后端与网络策略故障,经过授权探测和最小变更验证恢复。

Kubernetes监控告警高可用

场景目标

形成一份覆盖故障源端、正常对照、DNS、Service、后端与节点数据面的排查记录,依据明确证据执行一项获批的最小修复;在约定窗口验证业务成功率与延迟恢复、原有访问隔离仍成立,并登记无法验证的地址族、节点或客户端路径。

环境要求

已有 Kubernetes 集群与受控 kubeconfig,先登记 Kubernetes、CoreDNS、网络插件和容器运行时版本及集群域。需要目标命名空间资源、EndpointSlice、事件和限定日志读取权限;容器内执行、主动流量探测、节点访问与配置修改分别审批。准备正常和异常调用端、无副作用健康接口、历史配置及可回退版本;日志需脱敏。预计 90 分钟用于限定对象定位及短时验证,长周期观察和网络维护另排窗口。不默认具备特权 Pod、集群管理员权限或访问全部节点的授权。

参考架构 · 非实时拓扑

DNS 解析、Service 转发与后端排障架构

把解析请求与应用请求拆成两条路径,结合 EndpointSlice、节点数据面和 NetworkPolicy 定位故障;先采集对象证据,再批准有限探测与最小变更。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

DNS 解析、Service 转发与后端排障架构:组件关系图把解析请求与应用请求拆成两条路径,结合 EndpointSlice、节点数据面和 NetworkPolicy 定位故障;先采集对象证据,再批准有限探测与最小变更。 调用端 Pod → 集群 DNS:解析查询;调用端 Pod → Service 逻辑入口:应用请求;Service 逻辑入口 → 后端 Pod:节点数据面转发;EndpointSlice → Service 逻辑入口:后端发现信息;NetworkPolicy → 调用端 Pod:调用端出口约束;NetworkPolicy → 后端 Pod:后端入口约束;集群 DNS → 既有指标与日志:解析状态证据;后端 Pod → 既有指标与日志:就绪与业务信号。箭头说明见下方流向解读。
普通 ClusterIP Service 的逻辑参考图,不是实际网络拓扑;NodeLocal DNS、替代数据面及特殊 Service 类型须按现场单独展开。

调用端 Pod

入口 / 来源

固定命名空间、节点、地址族和协议,区分 API 对象查询、容器执行与主动流量探测的权限。

查看关联工具
全部组件职责 7 个组件
调用端 Pod
固定命名空间、节点、地址族和协议,区分 API 对象查询、容器执行与主动流量探测的权限。工具介绍 调用端 Pod
Service 逻辑入口
Service 不是必然独立运行的代理进程;请求如何转发由实际 kube-proxy 或替代节点数据面实现。工具介绍 Service 逻辑入口
后端 Pod
以真实后端端口、就绪条件和应用日志验证,不把 Running 状态当成能接收业务请求。工具介绍 后端 Pod
集群 DNS
核对 DNS Service、Pod、集群域与调用端策略,是否使用 NodeLocal DNS 由现场确认。工具介绍 集群 DNS
EndpointSlice
记录服务后端地址、端口和就绪条件;核对全部相关切片,不手工覆盖控制器管理的端点。工具介绍 EndpointSlice
NetworkPolicy
按实际插件确认策略生效,源端出口与目标端入口均须允许;不把规则写存在等同于已经实施。工具介绍 NetworkPolicy
既有指标与日志
对照 DNS 错误、工作负载和业务基线,保存最小修复与原有隔离验收证据。工具介绍 既有指标与日志
流向解读 8 条连接
  1. 1

    调用端 Pod 集群 DNS

    数据 / 请求 · 解析查询

    调用端按实际解析器配置查询域名;DNS 通常返回地址,不替应用代理后续业务请求。

  2. 2

    调用端 Pod Service 逻辑入口

    数据 / 请求 · 应用请求

    解析后应用请求进入对应 Service 地址和端口;保持主机名、SNI 与 TLS 校验。

  3. 3

    Service 逻辑入口 后端 Pod

    数据 / 请求 · 节点数据面转发

    表达普通 ClusterIP 的逻辑转发路径,具体代理、地址转换和负载选择按插件核对。

  4. 4

    EndpointSlice Service 逻辑入口

    控制 / 管理 · 后端发现信息

    节点代理或替代数据面使用服务与端点信息建立转发,不是业务数据经过切片对象。

  5. 5

    NetworkPolicy 调用端 Pod

    控制 / 管理 · 调用端出口约束

    检查源端到实际 DNS 和业务目标的出口允许范围,地址转换细节按实现核验。

  6. 6

    NetworkPolicy 后端 Pod

    控制 / 管理 · 后端入口约束

    检查目标 Pod 入口策略与匹配标签,不通过删除全部策略制造连通。

  7. 7

    集群 DNS 既有指标与日志

    观测 / 查询 · 解析状态证据

    缺少查询日志不代表 DNS 未收到请求,区分未开启、无权限和真实错误。

  8. 8

    后端 Pod 既有指标与日志

    观测 / 查询 · 就绪与业务信号

    对照不同源端、节点及必要地址族,保留未覆盖范围。

从架构到实施

  1. 01

    先检查对象,分开两种请求

    固定故障对照,完整审阅 Service 和 EndpointSlice,再核对 DNS 组件与调用端解析配置。

  2. 02

    沿路径执行获准的有限探测

    只有授权后才比较域名、Service 与后端路径,结合策略和节点数据面证据批准一个最小修复。

  3. 03

    恢复正常路径也保住拒绝路径

    重放原探测矩阵并验证应拒绝访问仍失败,观察稳定性后归档根因和未验证项。

故障域与操作边界

特殊 Service 不套普通转发图

Headless、ExternalName、无选择器 Service 与不同地址族分别处理;图中不默认存在 kube-proxy 或 NodeLocal DNS。

主动诊断不等于纯只读 API

kubectl exec 启动进程,探测产生流量;没有工具时不擅自创建特权 Pod、安装软件或扩大网络放行。

修复只作用于获批对象

保存原配置和回退版本,恢复时重验正常对照与访问隔离;仅重启后暂时正常仍标为缓解。

架构依据与版本核对 1 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

方案说明

适用架构

适用于已有 Kubernetes 工作负载中域名解析异常、Service 请求超时及部分节点偶发失败。沿调用端、DNS 服务、Service 与 EndpointSlice、后端进程、节点数据面建立证据链。CoreDNS、NodeLocal DNSCache、kube-proxy 或替代数据面的实际安装方式必须先盘点,托管环境按获准边界操作。

安全与版本边界

本场景为 PENDING(待环境验证),不表示已部署或演练。先读取资源与获准日志;kubectl exec 会启动容器进程,主动探测会产生流量,均需单独授权,不能标作纯 API 只读。没有诊断容器时先申请资源,不默认创建 Pod、安装软件、开启全量 DNS 日志或放通全部网络。Linux、Windows、Headless 与 ExternalName Service 的行为不能互相套用。

全局验收

原异常源端与正常对照源端的受控测试均通过,相关节点、地址族与必要协议在观察窗口内满足既定成功率和延迟基线;未授权访问仍被拒绝,变更对象和回退版本可定位。只重启后恢复而未定位根因时,记录为临时缓解。

配套内容

官方参考

工具编排

2 个关联工具
  1. Kubernetes对象状态与网络路径读取 Pod、Service、EndpointSlice 和策略证据,按实际插件实现核对服务发现及数据路径。
  2. Prometheus已有指标与恢复观察使用既有采集观测 DNS 错误、工作负载状态和业务成功率,不为排障默认扩大采集权限。

实施步骤

共 8 步
  1. 01

    锁定上下文并建立故障对照

    由值班人员核对集群、命名空间、调用端和被调服务,记录首次异常时间、端口、协议、错误类型与最近变更。用一个同版本正常调用端作对照,将仅短名称失败、全部域名失败、仅一个 Service 失败和仅某节点失败分别登记。先从现有日志和告警补齐证据,未知路径保持待查,不通过重复请求真实写接口制造测试数据。

    kubectl config current-context
    kubectl -n NAMESPACE get pod POD_NAME -o wide
    kubectl -n NAMESPACE get service SERVICE_NAME -o wide
    验证标准

    上下文由集群负责人确认,工单包含异常和正常对照的 Pod、节点、时间、协议及原始错误。请求目标与业务语义明确,未取得容器执行或主动探测授权的项目标记为待授权,没有把 API 查询失败误判为业务网络故障。

    停止与回退

    本阶段仅读取现场,不修改资源。上下文错误、身份不明或故障已扩散到控制面时立即停止继续查询与后续探测,保留已获取的脱敏记录并升级处理;不删除 Pod、重启 DNS 或临时扩大管理员权限。

    返回步骤起点
  2. 02

    核对 Service 定义与全部 EndpointSlice

    读取目标 Service 的选择器、类型、端口与地址族,检查相关 EndpointSlice 的后端地址、端口和就绪条件,再与 Pod 标签及实际工作负载配置对照。一个服务可能有多个切片,必须全部核对。Headless、ExternalName、无选择器 Service 单独标注,不能套用普通 ClusterIP 的通过条件,也不手动修改控制器管理的切片。

    kubectl -n NAMESPACE get service SERVICE_NAME -o yaml
    kubectl -n NAMESPACE get endpointslices -l kubernetes.io/service-name=SERVICE_NAME -o yaml
    kubectl -n NAMESPACE get pods -o wide --show-labels
    验证标准

    Service 端口与 targetPort 对应关系、后端地址和标签有可核对结果;没有后端时可区分选择器错误、未就绪及非自动管理类型。所有相关切片均已审阅,正常与异常副本差异有证据,未把 Running 等同于就绪或可接流量。

    停止与回退

    对象检查无配置变更。如发现端口或标签疑似错误,先保存当前版本与期望配置交给应用负责人确认,停止猜测式修改。涉及持久化工作负载或发布异常时转入对应流程,不批量重建 Service 或 EndpointSlice。

    返回步骤起点
  3. 03

    分离 DNS 组件与调用端配置问题

    确认实际 DNS Service、Pod、集群域以及是否启用 NodeLocal DNSCache,读取 DNS 端口、EndpointSlice、就绪状态与限定时间日志。查看调用端 Pod 的 dnsPolicy、dnsConfig 和 hostNetwork,区分集群解析与上游解析。常见 CoreDNS 服务名为 kube-dns,但以现有安装为准;未开启查询日志时,日志没有请求记录不能证明 DNS 未收到流量。

    kubectl -n kube-system get services
    kubectl -n kube-system get endpointslices -l kubernetes.io/service-name=DNS_SERVICE_NAME -o yaml
    kubectl -n kube-system logs DNS_POD_NAME -c DNS_CONTAINER_NAME --since=10m --tail=200 --timestamps
    kubectl -n NAMESPACE get pod POD_NAME -o yaml
    验证标准

    已明确异常是 DNS Pod 不可用、无服务端点、API 权限或上游错误的候选,还是调用端策略差异。组件名称和集群域来自现场,日志范围受控;Windows 和 hostNetwork 情况有单独解释,不把默认域名或 Linux 配置当成所有集群事实。

    停止与回退

    只读检查不需要恢复配置。若日志权限不足或输出包含敏感信息,停止收集并按权限流程处理;不直接开启全量查询日志、不修改全局 Corefile、不为排障授予宽泛 RBAC,保持现有解析服务运行。

    返回步骤起点
  4. 04

    授权后执行有限的调用端诊断

    申请指定 Pod 与容器的执行权限,以及有限次数、限定目标的 DNS 和无副作用健康探测。kubectl exec 会启动容器进程,不是纯 API 只读;下例仅在授权后读取解析文件。使用已有诊断工具比较短名称与实际完整域名,登记 DNS 响应码及耗时;没有工具时申请独立诊断资源,不在业务容器安装软件,也不默认创建特权 Pod。

    # 仅在获得指定容器执行授权后使用;全部大写名称须替换。
    kubectl -n NAMESPACE exec POD_NAME -c CONTAINER_NAME -- cat /etc/resolv.conf
    验证标准

    审批覆盖目标、工具、次数、超时与日志保留;解析器、搜索域、ndots 和响应结果可对照应用配置。记录哪些检查实际执行、哪些未授权,诊断流量没有触发真实写接口或新增资源,未将工具缺失误判为 DNS 故障。

    停止与回退

    容器诊断或主动流量引起延迟、资源变化时立即停止本次命令和后续请求,保持业务进程与容器不变。若另行获批的诊断资源已创建,按其专用清单及保留策略回收,不使用命名空间级批量删除。

    返回步骤起点
  5. 05

    对照 Service、后端与节点路径

    在相同获准源端和时间窗口,用业务批准的无副作用探测分别比较完整域名、Service IP 和后端地址,区分 Service 端口与后端端口。HTTPS 保持正确主机名、SNI 和证书校验,避免直连 IP 制造假故障;UDP 和 TCP DNS 分别记录。后端正常但 Service 异常时,再读取实际代理或替代数据面的现有日志及指标,不默认所有集群都运行 kube-proxy。

    验证标准

    每次探测都有源 Pod、节点、目标层、协议、耗时与结果,能说明故障位于解析、端点选择、后端应用还是节点数据面的候选路径。对照覆盖计划中的节点与地址族,无法覆盖的项目明确标注,未依据单次成功认定整个服务恢复。

    停止与回退

    探测超过批准范围、响应可能产生业务副作用或目标身份无法确认时停止,不继续扫描地址段。节点证据不足则交由网络负责人接手,不清空 iptables、不重启所有网络组件,也不绕开 TLS 校验换取表面成功。

    返回步骤起点
  6. 06

    审阅策略并批准最小修复

    读取调用端与被调端命名空间的 NetworkPolicy,核对实际标签、出口与入口规则以及 DNS 解析器路径。标准策略允许项累加,是否实施依赖网络插件;NodeLocal DNS 和地址转换按实现复核。依据证据只选择一个明确修复对象,保存原版本、变更差异、预计传播时间和回退入口,经负责人批准后通过既有配置管理落地,不默认全网放通。

    kubectl -n SOURCE_NAMESPACE get networkpolicies -o yaml
    kubectl -n TARGET_NAMESPACE get networkpolicies -o yaml
    验证标准

    修复假设可以被前五步证据支持,审批具体到对象、字段与源目标范围,原配置和恢复版本可取得。影响面、失败阈值、停止负责人及 GitOps 同步方式明确;没有将临时放宽全部策略作为排障默认动作。

    停止与回退

    未获得变更授权就停在审阅阶段,不执行修改。试点扩大故障或原有隔离失效时停止推广,仅恢复本次修改对象的已知版本并复查传播状态;不删除全部 NetworkPolicy,业务请求造成的数据变化另行核对。

    返回步骤起点
  7. 07

    验证修复与原有访问隔离

    重放此前获准的有限探测矩阵,对异常源端、正常对照、相关节点和必要地址族逐项验收。覆盖 DNS 缓存与探针刷新周期,观察已有业务成功率、延迟、DNS 错误和重启趋势。对已批准的负向测试确认不应访问的路径仍然被拒绝;没有负向测试权限时由安全负责人提供证据,不自行访问范围外资产。

    验证标准

    原失败路径在约定窗口持续满足团队基线,正常路径未回退,后端就绪与 DNS 组件状态稳定。应拒绝的访问仍被拒绝,监控无持续增长异常;验证表中每项均区分实际测试、替代证据与未验证,不仅展示一张成功截图。

    停止与回退

    出现新错误、越权放通或恢复不稳定时立即停止扩大变更,按第六步恢复获批对象的前一版本。回退后重新验证正常对照与业务基线;如果恢复配置仍不能恢复业务,升级事件而不是连续叠加未经评估的修复。

    返回步骤起点
  8. 08

    归档根因证据与后续改进

    整理故障矩阵、配置差异、探测授权、变更与恢复时间线,明确最终根因和仍未排除的因素。把查询入口、运行版本、节点与插件差异更新到配套手册及值班工单;临时诊断权限和额外日志按批准期限撤销。若仅暂时缓解或存在未验证节点,保留未完成状态与负责人,不声称已经完成全环境恢复验证。

    验证标准

    交接人员能够从工单定位对应场景、知识文章和编排文档,并用脱敏证据复现判断路径。权限、临时资源和日志保留有关闭记录,复发监控与后续期限明确;恢复结论与实际验证范围一致。

    停止与回退

    交接发现证据缺失、权限残留或指标继续异常时重新打开事件,保持已验证的稳定配置并补齐检查。撤销文档中的过度结论,不销毁审计证据,也不把后续待办简单标记完成来结束故障处理。

    返回步骤起点

DOUYA OPS ECOSYSTEM

体验豆芽自研工具与场景能力

部分场景提供体验环境,用于功能验证、测试和技术交流。