k8s-DNS服务搭建和配置指南

发布时间 2023-09-22 14:43:41作者: 小-y
 

1.作为服务发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,这就需要一个集群范围内的

DNS服务来完成从服务名到ClusterIP地址的解析

 2.Kubernetes集群的DNS服务便由CoreDNS提供。CoreDNS是CNCF基金会孵化的一个项目,是用Go语言

实现的高性能、插件式、易扩展的DNS服务端
3.CoreDNS支持自定义DNS记录及配置upstream DNS Server,可以统一管理Kubernetes基于服务的内部
DNS和数据中心的物理DNS

4.修改每个node上kubelet的dns启动参数

修改每个Node上kubelet的启动参数,在其中加上以下两个参数。
◎ --cluster-dns=169.169.0.100:为DNS服务的ClusterIP地址。
◎ --cluster-domain=cluster.local:为在DNS服务中设置的域名。

5.部署coredns服务 

部署coreDns服务时,需要创建3个资源对象,1个configmap,1个deployment和1个service,

5.1:在启用了RBAC的集群中,还可以设置ServiceAccount、ClusterRole、ClusterRoleBinding对CoreDNS容器进行权限设置
  configmap主要设置coredns的主配置文件,可以定义各种域名的解析方式和使用的插件,实例
  
apiVersion: vl
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
  labels:
    addonmanager,kubernetes.io/mode: EnsureExists
data:
 Corefile:
  cluster,local{
    errors
    health {
      lameduck 5s
     }  
      ready
      kubernetes cluster.local 169.169.0.0/16{
        fallthrough in-addr.arpa ip6.arpa
      }
      prometheus :9153
      forward . /etc/resolv.conf
      cache 30
      loop  
      reload
      loadbalance
  }
     {         
     cache 30
     loadbalance
     forward . /etc/resolv,conf
  }

5.2:Deployment“coredns”主要设置CoreDNS容器应用的内容,其中,replicas副本的数量通常应该根据集群的规模和服务数量确定,如果单个

CoreDNS进程不足以支撑整个集群的DNS查询,则可以通过水平扩展提高查询能力。由于DNS服务是Kubernetes集群的关键核心服务,
所以建议为其Deployment设置自动扩缩容控制器
 
5.3:Service“kube-dns”是DNS服务的配置,这个服务需要设置固定的ClusterIP地址,
也需要将所有Node上的kubelet启动参数--cluster-dns都设置为这个ClusterIP地址

6.服务名的DNS解析

接下来使用一个带有nslookup工具的Pod来验证DNS服务能否正常工作:
busybox.yaml
apiversion: v1
kind: pod
metadate:
  name: busybox
  namespace: default
spec:
  containers:
  -name: busybox
  image: gcr.io/google_containers/busybox
  command:
    - sleep
    - "3600"

  运行kubectl create -f busybox.yaml 完成创建

在该容器运行成功时,通过kubectl exec -it <container_id> -- nslookup 进行测试

# kubectl exec busybox -- nslookup redis-master

可以看到,通过DNS服务器169.169.0.100成功解析了redis-master服务器的ip地址169.169.8.10 

如果某个Service属于不同的命名空间,那么在进行Service查找时,需要补充Namespace的名称,如下
# kubectl exec busybox -- nslookup kube-dns.kube-system