CoreDNS 部署
CoreDNS 为集群内部提供服务发现功能,将 Service 名称解析为 ClusterIP。它是 K8s 集群中 DNS 解析的核心组件。
安装方式
方式一:Helm 安装(推荐)
Helm 是 K8s 的包管理器:
# 安装 Helm
wget https://get.helm.sh/helm-v3.15.3-linux-amd64.tar.gz
tar -zxvf helm-v3.15.3-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
helm version
# 添加 CoreDNS 仓库
helm repo add coredns https://coredns.github.io/helm
helm pull coredns/coredns
# 解压并修改配置
tar xvf coredns-*.tgz
cd coredns/
# 修改 values.yaml
# 1. clusterIP: "10.96.0.10" (需与 kubelet 配置的 clusterDNS 一致)
# 2. 替换为国内镜像源
sed -i "s#coredns/#m.daocloud.io/docker.io/coredns/#g" values.yaml
sed -i "s#registry.k8s.io/#m.daocloud.io/registry.k8s.io/#g" values.yaml
# 安装
helm install coredns ./ -n kube-system
# 查看部署
helm list -n kube-system
# 更新
helm upgrade coredns ./ -f values.yaml -n kube-system
bash
方式二:YAML 配置文件安装
通过 YAML 配置文件直接部署。
各组件职责
| 组件 | 职责 |
|---|---|
| kube-proxy | Service 负载均衡(iptables/IPVS 规则) |
| Calico | 网络策略 + Pod 间通信 |
| CoreDNS | DNS 解析(Service 名称 -> ClusterIP) |
工作原理
Pod 发起请求 my-service.default.svc.cluster.local
↓
CoreDNS 解析为 ClusterIP(如 10.96.0.100)
↓
kube-proxy 的 IPVS/iptables 规则将请求转发到后端 Pod
text
验证
# 检查 CoreDNS Pod 状态
kubectl get pods -n kube-system -l k8s-app=coredns
# 使用测试容器验证 DNS 解析
kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
# 在测试容器中执行
/ # host kubernetes
/ # nslookup kubernetes.default
/ # nslookup nginx-service.default
# 或使用 busybox
kubectl run test --image=busybox --rm -it --restart=Never -- nslookup kubernetes.default
bash
故障排查
如果 CoreDNS Pod 权限错误:
# 查看日志
kubectl logs -f <coredns-pod-name> -n kube-system
# 授权
kubectl create clusterrolebinding kube-apiserver-logs --clusterrole=cluster-admin --user=kube-apiserver
bash
↑