k8s DNS服务配置
一、DNS服务概述
service发现是k8s中的一个重要机制,其基本功能为:在集群内通过服务名对服务进行访问,即需要完成从服务名到ClusterIP的解析。
k8s主要有两种service发现机制:环境变量和DNS。没有DNS服务的时候,k8s会采用环境变量的形式,但一旦有多个service,环境变量会变复杂,为解决该问题,我们使用DNS服务。
k8sDNS服务的发展经历了三个阶段:SkyDNS、KubeDNS和CoreDNS,其架构由复杂向简单演变。
这里配置的是KubeDNS。
KubeDNS由3个容器组成:kubedns、dnsmasq和sidecar:
kubedns:该容器监控Kubernetes中的service资源变化,根据service的名称和IP地址生成DNS记录,并将DNS记录保存在内存中;
dnsmasq:该容器从kubedns中获取DNS记录,提供DNS缓存,为客户端容器应用提供DNS查询服务;
sidecar:提供对kubedns和dnsmasq服务的健康检查功能。
二、DNS服务配置
由于国内的网络问题,需要自己找一下dns相应的镜像并把它们放入私有仓库中,否则deployment下载不了:
docker pull mirrorgooglecontainers/dnsmasq-metrics-amd64:1.0
docker pull mirrorgooglecontainers/exechealthz-amd64:1.2
docker pull mirrorgooglecontainers/kube-dnsmasq-amd64:1.4
docker pull mirrorgooglecontainers/kubedns-amd64:1.9
打tag并把它们放入私有仓库中
1、用yaml创建dns服务的rc:kubedns-rc.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: kube-dnsnamespace: kube-systemlabels:k8s-app: kube-dnskubernetes.io/cluster-service: "true"
spec:strategy:rollingUpdate:maxSurge: 10%maxUnavailable: 0selector:matchLabels:k8s-app: kube-dnstemplate:metadata:labels:k8s-app: kube-dnsannotations:scheduler.alpha.kubernetes.io/critical-pod: ''scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'spec:containers:- name: kubednsimage: registry.cn-hangzhou.aliyuncs.com/google-containers/kubedns-amd64:1.9args:- --domain=cluster.local.- --dns-port=10053- --config-map=kube-dns- --v=2- --kube-master-url=http://192.168.56.4:8080 # 这个地址为之前配置的KUBE_MASTER的地址env:- name: PROMETHEUS_PORTvalue: "10055"ports:- containerPort: 10053name: dns-localprotocol: UDP- containerPort: 10053name: dns-tcp-localprotocol: TCP- containerPort: 10055name: metricsprotocol: TCP- name: dnsmasqimage: 192.168.3.88/kube-dnsmasq-amd64:1.4 #换成自己私有仓库中预先下好的镜像地址args:- --cache-size=1000- --no-resolv- --server=127.0.0.1#10053ports:- containerPort: 53name: dnsprotocol: UDP- containerPort: 53name: dns-tcpprotocol: TCP
2、用yaml创建dns服务的service:kubedns-svc.yaml
apiVersion: v1
kind: Service
metadata:name: kube-dnsnamespace: kube-systemlabels:k8s-app: kube-dnskubernetes.io/cluster-service: "true"kubernetes.io/name: "KubeDNS"
spec:selector:k8s-app: kube-dnsclusterIP: 10.254.230.254 #这个地址可以随便设,但必须在10.254网段下ports:- name: dnsport: 53protocol: UDP- name: dns-tcpport: 53protocol: TCP
3、在master以及所有节点中修改配置:
vim /etc/kubernetes/kubelet
KUBELET_ARGS="--cluster_dns=10.254.230.254 --cluster_domain=cluster.local"
cluster_dns地址与kubedns-svc.yaml中的clusterIP保持一致
cluster_domain与kubedns-rc.yaml 中的domain保持一致
4、配置完后需要重启部分服务:
master节点:
systemctl stop etcd flanneld kube-proxy kube-apiserver kube-controller-manager kube-scheduler
systemctl start etcd flanneld kube-proxy kube-apiserver kube-controller-manager kube-scheduler
node节点:
systemctl stop kubelet docker kube-proxy flanneld
systemctl start flanneld docker kubelet kube-proxy
5、创建rc:
kubectl create -f kubedns-rc.yaml
6、创建service:
kubectl create -f kubedns-svc.yaml
由于这些deployment放在了kube-system的namespace,而我们默认访问的是default,所以查看这些资源时要加上–namespace=kube-system参数。
kubectl get all --namespace=kube-system
7、查看DNS服务创建情况
$ kubectl get svc,ep,pod --all-namespaces
NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default svc/kubernetes 10.254.0.1 <none> 443/TCP 3d
kube-system svc/kube-dns 10.254.230.254 <none> 53/UDP,53/TCP 1hNAMESPACE NAME ENDPOINTS AGE
default ep/kubernetes 192.168.1.114:6443 3d
kube-system ep/kube-dns 172.16.77.3:53,172.16.77.3:53 1hNAMESPACE NAME READY STATUS RESTARTS AGE
kube-system po/kube-dns-2768888805-978hl 2/2 Running 0 1h
可以看到svc都成功运行。
8、接下来创建一个容器来验证DNS服务是否配置成功:
test_dns_pod.yaml
apiVersion: v1
kind: Pod
metadata:labels:name: busybox3role: mastername: busybox3
spec:containers:- name: busybox3image: docker.io/busybox:1.28.4imagePullPolicy: IfNotPresentcommand:- sleep- "3600"
(*busybox的镜像一定要为1.28.4以下,否则后续nslookup会不成功)
kubectl create -f test_dns_pod.yaml
进入该容器:
kubectl exec -it busybox3 sh
执行nslookup+任意服务名或服务cluster-ip即可显示出该服务的相关信息。
至此DNS服务已配置成功,以后可以直接用service的名称来访问该service。
*如果某个service属于不同的命名空间,那么在进行service查找时,需要补充Namespace的名称(补充在服务名之后,用.连接),组合成完整的域名,否则会查找失败。
例如查找kube-dns:
nslookup kube-dns.kube-system
k8s DNS服务配置相关推荐
- Linux DNS 服务配置 (非常详细)
Linux DNS 服务配置 (非常详细) 转载于:https://blog.51cto.com/lidi97/843516
- windows访问虚拟机DNS服务器,windows虚拟机中DNS服务配置
在linux虚拟机中进行DNS服务配置并进行正向解析反向解析我博客中已经写过,下面 我来介绍一下在windows虚拟机中DNS服务的配置使用. 1.打开一台windows虚拟机中服务器管理器--角色- ...
- Linux DNS服务配置与管理详解
域名系统 DNS 本章内容 -名字解析介绍 -DNS服务工作原理 -实现主服务器 -实现反向解析区域 -实现从服务器 -实现子域 -实现转发 -实现智能DNS -DNS排错 -实现Internet 的 ...
- Linux学习笔记RHEL 7(九)--RHEL7.0 DNS服务配置
一.DNS域名解析服务 主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系. 从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况. 缓存 ...
- linux dns服务配置,在Linux上配置DNS服务
一.DNS服务简介 DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所 ...
- RHEL7.0 DNS服务配置
系统版本: [root@localhostnamed]# uname -a Linuxmainserver.fengslab.com 3.10.0-123.el7.x86_64 #1 SMP Mon ...
- Kubernetes之配置与自定义DNS服务
本文解释如何为kubernetes集群配置及自定义DNS服务.从kubernetes1.11版本开始,coreDNS插件被包含在GA发行版中,并且被kubeadm默认安装.详情:Configuring ...
- CentOS 7 配置DNS服务
主DNS 配置主DNS服务器 IP为 192.168.1.1 ; 掩码为 24位 ; DNS指向本机 建立 infanx.com 域的正反向解析 主机记录 记录类型 记录值 ns1 A 192.168 ...
- Linux配置DNS服务实验
简介 DNS服务器,也称为域名解析服务器.DNS 服务器将域名解析出来,找到域名对应的ip地址的服务,可以高速缓存从其他 DNS 服务器收到的 DNS 记录,通过主机名最终得到该主机名对应的IP地址的 ...
最新文章
- Database项目中关于Procedure sp_refreshsqlmodule_internal的错误
- C# 可以利用反射给只读属性赋值吗?
- ubuntu安装mysql报错_在Ubuntu上安装mysql数据库和遇到的问题
- 20年研发管理经验谈(十六)
- 《乌合之众》读书笔记(part5)--名望的特性就是阻止我们看到事物的原本面目,彻底麻痹我们的判断力
- python时间复杂度和空间复杂度是指_时间复杂度和空间复杂度
- 计算机的限制而被取消win7,win7系统本次操作由于这台计算机限制而被取消的解决方法...
- 一个根据相似度的去重方法
- python工资一般多少-Python工资一般是多少 看完吓你一跳
- 阿里舆情︱舆情热词分析架构简述(Demo学习)
- python三大器_Python 入门之 Python三大器 之 迭代器
- 【筹码分析】改版通达信PAVE筹码引力分析个股强势区和走势
- 项目配置管理CM(Configuration Management)
- 富文本编辑器tinymce支持从word复制粘贴保留格式和图片的插件wordpaster
- J6412四网口迷你主机折腾虚拟机教程
- 复杂场景下的权限系统该怎么玩?ABAC权限模型帮你搞定它!
- 常用的医学组织切片细胞图像数据集
- CH4.校园订餐app
- [好累的游戏]传球游戏
- HTML网页设计期末课程大作业~体育篮球5页面带登录