You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动安装kube-dns插件时遭遇「请求资源未找到」错误求助

解决kube-dns Service创建时「请求资源未找到」的问题

我刚帮几个朋友排查过类似的问题,结合《Kubernetes The Hard Way》在AWS上的部署场景,给你梳理几个最可能的原因和对应的解决步骤:

1. 先确认kubectl是否连对了集群,API Server是否正常

有时候我们会不小心切换到错误的kubectl上下文,或者集群的API Server还没完全就绪,这都会导致资源创建失败:

  • 先跑 kubectl config current-context 看看当前上下文是不是你正在搭建的那个集群
  • 再用 kubectl cluster-info 检查API Server的状态,如果显示无法访问,那得先把API Server的问题解决掉
  • 顺带跑 kubectl get nodes 看看节点是不是都处于Ready状态,集群初始化没完成的话,很多资源操作都会出问题

2. 检查kube-system命名空间是否存在

你的YAML里明确指定了namespace: kube-system,如果这个命名空间还没创建,Kubernetes就会报“请求资源未找到”(因为它找不到要部署资源的目标命名空间):

  • 执行 kubectl get namespaces 看看列表里有没有kube-system
  • 如果没有,先创建它:kubectl create namespace kube-system

3. 核对YAML文件的细节

虽然你贴的YAML看起来没问题,但还是要仔细检查几个关键点:

  • 缩进是不是用的2个空格?Kubernetes YAML对缩进特别敏感,多一个少一个都可能出问题
  • clusterIP: 10.32.0.10 是不是在你集群的Service CIDR范围内?《Kubernetes The Hard Way》里默认是10.32.0.0/24,如果你改了这个配置,这个IP就会无效
  • 可以用 kubectl apply --dry-run=client -f your-dns-service.yaml 做个预验证,看看YAML语法和字段有没有问题

4. 检查kubectl和API Server的版本兼容性

Kubernetes有个不成文的规则:kubectl的版本和API Server的版本差距不能超过一个小版本(比如API Server是1.27,kubectl最好是1.26到1.28之间),版本差太多会导致一些API请求不被支持:

  • 跑 kubectl version --short 看看客户端和服务端的版本
  • 如果版本不兼容,建议把kubectl升级到和集群匹配的版本

5. 看看集群核心组件有没有正常运行

如果kube-apiserver、kube-controller-manager这些核心组件没起来,资源创建请求根本没法被处理:

  • 跑 kubectl get pods -n kube-system 看看已经部署的核心组件Pod状态(如果有的话)
  • 在AWS的EC2实例上,你可以查看 /var/log/kube-apiserver.log 日志,里面会有API请求失败的具体原因

小技巧:试试用apply替代create

有时候kubectl create会因为残留的无效资源(比如之前创建失败留下的痕迹)报错,你可以换成 kubectl apply -f your-dns-service.yaml,它会根据当前状态自动处理创建或更新,可能能绕过一些奇怪的问题

如果以上步骤都试过还是不行,建议你跑 kubectl create -f your-dns-service.yaml -v=6,这个命令会输出详细的API请求和响应日志,把这些日志贴出来,就能更精准地定位问题了。

内容的提问来源于stack exchange,提问作者Aleš

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:28:16