一、介绍

在Kubernetes 1.11中,CoreDNS已经实现了基于DNS的服务发现的GA,可作为kube-dns插件的替代品。这意味着CoreDNS将作为各种安装工具未来发布版本中的一个选项来提供。事实上,kubeadm团队选择将其作为Kubernetes 1.11的默认选项。

使用kube-dns集群插件,基于DNS的服务发现已成为Kubernetes的一部分。这通常很有效,但是对于实施的可靠性、灵活性和安全性存在一些担忧。

CoreDNS是一个通用的、权威的DNS服务器,提供与Kubernetes后向兼容但可扩展的集成。它解决了kube-dns所遇到的问题,并提供了许多独特的功能,可以解决各种各样的用例。

在本文中,你将了解kube-dns和CoreDNS的实施差异,以及CoreDNS提供的一些有用的扩展。

二、实施差异

在kube-dns中,一个pod内使用了数个容器:kubedns、dnsmasq和sidecar。 kubedns容器监视Kubernetes API并基于Kubernetes DNS规范提供DNS记录,dnsmasq提供缓存和存根域支持,sidecar提供指标和健康检查。

此设置会导致一些问题随着时间的推移而出现。首先,dnsmasq中的安全漏洞导致过去需要发布Kubernetes安全补丁。此外,由于dnsmasq处理存根域,但kubedns处理External Services,因此你无法在外部服务中使用存根域,这非常限制该功能。

在CoreDNS中,所有这些功能都在一个容器中完成——该容器运行用Go编写的进程。启用的不同插件来复制(并增强)kube-dns中的功能。

三、安装core-dns

1、将$DNS_SERVER_IP和$DNS_DOMAIN替换成kubelet配置的内容

[root@k8s-node1 cfg]# cat kubelet.config

kind: KubeletConfiguration

apiVersion: kubelet.config.k8s.io/v1beta1

address: 192.168.100.30

port: 10250

readOnlyPort: 10255

cgroupDriver: cgroupfs

clusterDNS:

- 10.0.0.2

clusterDomain: cluster.local.

failSwapOn: false

authentication:

anonymous:

enabled: true

2、这里将$DNS_SERVER_IP替换成10.0.0.2,将$DNS_DOMAIN替换成cluster.local.

[root@k8s-master1 coredns]# vim ./transforms2sed.sed

s/__PILLAR__DNS__SERVER__/10.0.0.2/g

s/__PILLAR__DNS__DOMAIN__/cluster.local./g

s/__PILLAR__CLUSTER_CIDR__/$SERVICE_CLUSTER_IP_RANGE/g

s/__PILLAR__DNS__MEMORY__LIMIT__/$DNS_MEMORY_LIMIT/g

s/__MACHINE_GENERATED_WARNING__/Warning: This is a file generated from the base underscore template file: __SOURCE_FILENAME__/g

3、执行下面的命令,生成部署coreDNS所需的coredns.yaml文件

[root@k8s-master1 dns]# cd cluster/addons/dns/coredns

[root@k8s-master1 coredns]# ls

coredns.yaml.base coredns.yaml.sed transforms2salt.sed

coredns.yaml.in Makefile transforms2sed.sed

[root@k8s-master1 coredns]# sed -f transforms2sed.sed coredns.yaml.base > coredns.yaml

4、替换镜像,将k8s.gcr.io/coredns:1.2.6替换成coredns/coredns:1.2.6

[root@k8s-master1 coredns]# vim coredns.yaml

118 - name: coredns

119 image: coredns/coredns:1.2.6 #替换

120 imagePullPolicy: IfNotPresent

121 resources:

122 limits:

123 memory: 100Mi #修改

124 requests:

125 cpu: 100m

126 memory: 70Mi

[root@k8s-master1 coredns]# kubectl create -f coredns.yaml

5、修改各个节点的dns

[root@k8s-node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32

DNS2=10.0.0.2

[root@k8s-node1 ~]# systemctl restart network

[root@k8s-node1 ~]# nslookup mydb.default.svc.cluster.local

;; Got SERVFAIL reply from 192.168.100.55, trying next server

Server:10.0.0.2

Address:10.0.0.2#53

Name:mydb.default.svc.cluster.local

Address: 10.0.0.12

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐