CoreDNS
CoreDNS 是 Kubernetes 集群的默认 DNS 服务,负责为集群内的 Pod 和 Service 提供域名解析服务。它取代了早期版本中的 kube-dns,提供了更好的性能、灵活性和可扩展性。
CoreDNS 架构
graph TB
subgraph "K8s 集群"
subgraph "Master 节点"
API[API Server]
ETCD[etcd]
end
subgraph "CoreDNS Pod"
COREDNS[CoreDNS Server]
PLUGIN[插件系统
kubernetes, k8s_gateway等]
end
subgraph "客户端"
POD1[应用 Pod]
POD2[应用 Pod]
SVC[Service]
end
subgraph "外部 DNS"
UPSTREAM[上游 DNS
8.8.8.8]
end
end
POD1 --> COREDNS
POD2 --> COREDNS
SVC --> COREDNS
COREDNS --> API
COREDNS --> ETCD
COREDNS --> UPSTREAM
API --> PLUGIN
CoreDNS 核心特性
插件架构
基于插件系统,支持多种功能扩展
服务发现
自动发现并解析集群内的服务
缓存机制
高效缓存机制,提升解析性能
可配置性
灵活的配置选项,满足不同需求
CoreDNS 配置详解
CoreDNS 使用 Corefile 配置文件来定义 DNS 解析规则和插件行为。
# CoreDNS 配置示例
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
. {
errors
health {
lameduck 5s
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
CoreDNS 常用插件
| 插件 | 功能 | 使用场景 |
|---|---|---|
| kubernetes | 与 Kubernetes API 集成,提供服务发现 | 解析 Service 和 Pod 域名 |
| forward | 将查询转发到上游 DNS 服务器 | 解析外部域名 |
| cache | DNS 查询结果缓存 | 提升解析性能 |
| health | 健康检查端点 | 监控 CoreDNS 服务状态 |
| prometheus | 暴露监控指标 | 性能监控和告警 |
| loop | 检测和防止 DNS 循环 | 防止查询循环 |
DNS 解析流程
sequenceDiagram
participant Pod as 应用 Pod
participant CoreDNS as CoreDNS
participant API as Kubernetes API
participant Upstream as 上游 DNS
Pod->>CoreDNS: 查询 service.namespace.svc.cluster.local
CoreDNS->>API: 检查 Service 定义
API-->>CoreDNS: 返回 Service IP
CoreDNS-->>Pod: 返回解析结果
alt 未找到内部服务
CoreDNS->>Upstream: 转发查询
Upstream-->>CoreDNS: 外部域名解析结果
CoreDNS-->>Pod: 返回外部解析结果
end
CoreDNS 故障排查
# 查看 CoreDNS Pod 状态
kubectl get pods -n kube-system -l k8s-app=kube-dns
# 查看 CoreDNS 日志
kubectl logs -n kube-system -l k8s-app=kube-dns
# 测试 DNS 解析
kubectl run -it --rm debug --image=busybox:1.28 --restart=Never -- nslookup kubernetes.default
# 查看 CoreDNS 配置
kubectl get configmap coredns -n kube-system -o yaml
# 重新加载 CoreDNS 配置
kubectl rollout restart deployment/coredns -n kube-system
CoreDNS 性能优化
缓存优化
- 调整缓存大小和 TTL
- 根据负载调整缓存策略
- 监控缓存命中率
资源优化
- 调整副本数以提高可用性
- 设置合适的资源请求和限制
- 启用负载均衡策略