coredns未ready 状态running

这篇博客详细讲述了在运行CoreDNS时遇到的kubernetes API访问权限问题,涉及`system:serviceaccount:kube-system:coredns`无法列出discovery.k8s.io资源。通过编辑clusterrole解决了此问题,重点在于添加了对`endpointslices`资源的读写权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
coredns describe该pod无有用信息

logs日志如下

[INFO] plugin/ready: Still waiting on: "kubernetes"
[INFO] plugin/ready: Still waiting on: "kubernetes"
[INFO] plugin/ready: Still waiting on: "kubernetes"
[INFO] plugin/ready: Still waiting on: "kubernetes"
E1126 02:25:44.674787       1 reflector.go:138] pkg/mod/k8s.io/client-go@v0.20.2/tools/cache/reflector.go:167: Failed to watch *v1beta1.EndpointSlice: failed to list *v1beta1.EndpointSlice: endpointslices.discovery.k8s.io is forbidden: User "system:serviceaccount:kube-system:coredns" cannot list resource "endpointslices" in API group "discovery.k8s.io" at the cluster scope

翻译内容:*v1beta1.EndpointSlice:endpointslices.discovery.k8s.io被禁止:用户“系统:服务帐户:kube系统:coredns”无法列出API组中的资源“endpointslices”集群范围内的“discovery.k8s.io”

[信息]插件/准备就绪:仍在等待:“kubernetes”

Google查询报错

是coredns的一个bug, 需要修改coredns角色权限

kubectl edit clusterrole system:coredns

最后追加

- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - list
  - watch

修复后
在这里插入图片描述

### 配置和使用CoreDNS作为Kubernetes集群内的DNS服务 在现代Kubernetes集群中,默认情况下已部署并配置好了CoreDNS作为内部DNS服务。然而,在某些场景下可能需要手动调整或重新配置CoreDNS。 #### 修改CoreDNS配置文件 要自定义CoreDNS的行为,可以通过编辑其ConfigMap对象实现。这个ConfigMap通常位于`kube-system`命名空间下的名称为`coredns`的对象里[^1]。修改后的配置会被自动应用到所有的CoreDNS实例上。 ```bash kubectl edit configmap coredns -n kube-system ``` 在此命令打开的编辑器窗口中可以更改CoreDNS的工作模式和其他参数设置。常见的改动包括但不限于: - 添加转发规则以便于查询外部域名; - 设置缓存大小提高性能; - 启用日志记录功能方便调试。 保存变更退出后不久就能看到新的设定生效了。 #### 检查CoreDNS运行状况 确认CoreDNS正常运作非常重要。这可通过查看Pod的状态完成: ```bash kubectl get pods -l k8s-app=kube-dns -n kube-system ``` 上述指令列出了所有标记为`k8s-app=kube-dns`标签的Pod(尽管实际名字可能是`coredns`),并且指定了它们所在的命名空间(`kube-system`)。理想状态下这些Pod都应该处于Running状态,并且READY字段显示为"1/1"[^1]。 对于任何异常情况,则进一步调查原因所在。比如检查事件日志、容器的日志输出等信息源找出问题根源。 #### 测试DNS解析能力 为了验证新安装或者更新过的CoreDNS能否正确工作,可以从任意一个非特权(non-root)用户权限的应用程序容器里面发起简单的DNS查询测试: ```bash kubectl run busybox --image=busybox:1.28 --command -- sleep infinity kubectl exec -it busybox -- nslookup kubernetes.default ``` 这里先启动了一个长时间挂起的BusyBox Pod用来执行临时性的命令;接着利用`nslookup`工具尝试解析默认的服务名`kubernetes.default.svc.cluster.local`(简称形式)`。 如果一切顺利的话应该能够得到指向API Server的ClusterIP地址的结果返回。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值