文章目录
前言
CoreDNS 是一个DNS服务器。它是用Go编写的。由于其灵活性,它可以在多种环境中使用。目前K8s主要使用CoreDNS对为集群提供域名解析服务。
解析流程
- 容器nginx需要访问百度,ping一下百度域名baidu.com。
- 该请求会先被kube-dns(Coredns服务)捕获。
- 域名解析转发到coredns集群,根据负载均衡会分配到某个coredns pod。
- coredns pod再通过api-server转到k8s集群服务。
- 最后k8s集群从etcd数据库中获取到域名解析结果。
- etcd把结果原路返回到k8s,依次类推,Nginx获取到baidu对应的IP地址。
- 解析结果会保存到域名缓存,下次访问会更加快速。
安装Coredns
coredns的安装部署需要使用yaml文件,可通过以下2个途径获取:
https://github.com/coredns/deployment/blob/master/kubernetes/coredns.yaml.sed
/root/kubernetes/cluster/addons/dns/coredns/coredns.yaml.base
将模板yaml文件拷贝成coredns.yaml,编辑配置文件(见Corefile配置),然后执行部署。
kubectl apply -f coredns.yaml
kubectl get svc -A
default kubernetes ClusterIP 10.68.0.1 <none> 443/TCP 7d2h
kube-system kube-dns ClusterIP 10.68.0.2 <none> 53/UDP,53/TCP,9153/TCP 8m58s
kubectl get pod -A
kube-system coredns-f58cf8cd9-4sxn4 1/1 Running 0 70s
kube-system coredns-f58cf8cd9-mknbj 1/1 Running 0 70s
Corefile配置
下载完coredns.yaml配置文件后,需要根据实际环境进行配置,多数配置在corefile选项下:
vim coredns.yaml
# 修改__DNS__DOMAIN__ 在/etc/kubeasz/clusters/k8s-cluster/hosts文件的CLUSTER_DNS_DOMAIN选项找到
77 kubernetes cluster.local in-addr.arpa ip6.arpa {
# 指定互联网域名服务器,最大连接数可扩大
83 forward . 114.114.114.114 {
84 max_concurrent 2000
85 }
# pod副本数量,取消注释后,修改为2
103 replicas: 2
# 选择coredns镜像源,可在部署节点docker images查看
142 image: easzlab.io.local:5000/coredns/coredns:1.9.3
# 资源限制放宽,生成环境4核4G以上
145 limits:
146 cpu: 400m
147 memory: 4096Mi
# kube-dns地址,可在某个pod的/etc/resolv.conf查看
210 selector:
211 k8s-app: kube-dns
212 clusterIP: 10.68.0.2
部署后检查
可以部署一个busybox pod,然后进入容器进行ping实验:
kubectl exec -it busybox-5587dd9dcc-2fm9v sh -n kube-system
/ # ping baidu.com
PING baidu.com (110.242.68.66): 56 data bytes
64 bytes from 110.242.68.66: seq=0 ttl=127 time=43.034 ms
64 bytes from 110.242.68.66: seq=1 ttl=127 time=43.003 ms
64 bytes from 110.242.68.66: seq=2 ttl=127 time=43.135 ms