K8S的CoreDns域名解析
负责为整个k8s集群提供 DNS 服务,属于DNS插件。基于dns的接口去实现集群内部的dns内部域名解析的一种能力。k8s集群创建后,会在kube-system名称空间下默认生成两个coredns的pod,所有pod的域名请求会以负载均衡的方式向这两个coredns的pod进行域名解析。
·
目录
一、CoreDns的概述
负责为整个k8s集群提供 DNS 服务,属于DNS插件。
基于dns的接口去实现集群内部的dns内部域名解析的一种能力。
k8s集群创建后,会在kube-system名称空间下默认生成两个coredns的pod,所有pod的域名请求会以负载均衡的方式向这两个coredns的pod进行域名解析。
kubectl get pod -n kube-system -o wide
#查看coredns的pod
二、CoreDns域名解析链路
coredns配置相应的域名解析后,会将配置结果存储在etcd键值对数据库中,当pod发起域名请求,这个域名就会经过kube-dns服务负载到coredns的pod上,coredns会通过api-server向etcd获取解析结果,然后将结果返回给pod,pod再根据域名解析结果,通过svc发起访问请求。
kubectl get svc -n kube-system kube-dns
#查看kube-dns的ip
ipvsadm -Ln
#查看ipvs的负载
#kube-dns将请求负载到了coredns的两个pod上。
三、CoreDns域名解析配置
1.将特定域名解析到单个IP
kubectl edit cm -n kube-system coredns
#加入下面的配置
#注意,“缩进”不能使用tab,要使用空格,
hosts {
192.168.159.82 www.aaa.com
fallthrough
}
2.将特定域名解析到特定的DNS服务器
kubectl edit cm -n kube-system coredns
#加入如下配置
#缩进与 .:53 同级
bbb.com:53 {
errors
cache 30
forward . 192.168.159.82 {
prefer_udp
}
3.将所有域名解析到特定的DNS服务器
kubectl edit cm -n kube-system coredns
#加入一下配置
forward . 192.168.159.82 {
prefer_udp
}
四、edit无权限修改默认configmap
当edit修改configmap后保存退出失败,因为当前k8s用户无权限修改。可以创建一个Corefile文件,基于Corefile文件创建一个coredns的configmap,为其他人增加Corefile文件可执行权限即可。
1.保存旧configmap配置
#将此命令的结果复制下来,自建一个文件
kubectl get cm -n kube-system coredns -o yaml
#将上一步查询的结果粘贴为文件内容
vim coredns_cm.yaml
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health {
lameduck 15s
}
ready
hosts {
192.168.159.82 www.aaa.com
fallthrough
}
kubeapi
k8s_event {
level info error warning
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods verified
ttl 30
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . 192.168.159.82 {
prefer_udp
}
cache 30
log
loop
reload
loadbalance
}
kind: ConfigMap
creationTimestamp: "2023-12-26T03:48:47Z"
name: coredns
namespace: kube-system
resourceVersion: "472134"
uid: 382ca971-8a97-49d7-bd8b-c63bce9076ea
#删除原来的configmap。
kubectl delete cm -n kube-system coredns
2.更新configmap配置
#更新coredns的configmap配置
kubectl apply -f doredns_cm.yaml
或
#基于Corefile文件创建configmap,名为coredns
kubectl create configmap coredns -n kube-system --from-file=Corefile
chmod o+x Corefile
#需要给其他人加上文件的可执行权限,才可以使用edit来修改。
kubectl edit cm coredns -n kube-system
#修改正确的缩进格式。
3.更新coredns的pod
#删除两个coredns的容器,使deployment控制器重拉pod,达到重启的效果。
#也可以登录coredns两个pod所在的worker节点,重启docker,一样的效果。
kubectl delete pod -n kube-system coredns
4.验证测试
#测试域名解析是否成功
kubectl exec -it -n kube-system nginx-ingress-controller-76b699b679-kqzth -- nslookup www.aaa.com
更多推荐
已为社区贡献6条内容
所有评论(0)