思想: kube-dns或coredns本质上是一个dns服务软件.都需要配置配置文件.要控制怎么查询,即控制他的配置文件即可.

本文先说下coredns怎么配置,然后在配下kube-dns(包含了外建dnsmasq搭建,模拟集群访问公司私有域情景)

参考:

https://coredns.io/2017/03/01/coredns-for-kubernetes-service-discovery-take-2/

https://coredns.io/2017/05/08/custom-dns-entries-for-kubernetes/

https://coredns.io/2017/06/08/how-queries-are-processed-in-coredns/

默认的kube-dns策略

本次模拟架构如下图:

coredns配置文件:

  • 1.访问cluster.local后缀的,去查10.254.0.2
  • 2.访问out-of.kubernetes的如server.out-of.kubernetes去查192.168.x.x
  • 3.访问互联网的,走resolve.conf的地址
  1. .:53 {
  2. errors # show errors
  3. log stdout # show query logs
  4. health
  5. kubernetes cluster.local 10.254.0.0/16
  6. proxy out-of.kubernetes 192.168.x.x
  7. proxy . /etc/resolv.conf

参考:

https://coredns.io/2017/03/01/coredns-for-kubernetes-service-discovery-take-2/

  1. $ cat coredns.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: coredns
  6. namespace: kube-system
  7. data:
  8. Corefile: |
  9. .:53 {
  10. errors
  11. log stdout
  12. health
  13. kubernetes cluster.local 10.254.0.0/16
  14. proxy out-of.kubernetes 192.168.x.x
  15. proxy . /etc/resolv.conf
  16. cache 30
  17. }
  18. ---
  19. apiVersion: extensions/v1beta1
  20. kind: Deployment
  21. metadata:
  22. name: coredns
  23. namespace: kube-system
  24. labels:
  25. k8s-app: coredns
  26. kubernetes.io/cluster-service: "true"
  27. kubernetes.io/name: "CoreDNS"
  28. spec:
  29. replicas: 1
  30. selector:
  31. matchLabels:
  32. k8s-app: coredns
  33. template:
  34. metadata:
  35. labels:
  36. k8s-app: coredns
  37. annotations:
  38. scheduler.alpha.kubernetes.io/critical-pod: ''
  39. scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
  40. spec:
  41. containers:
  42. - name: coredns
  43. image: coredns/coredns:latest
  44. imagePullPolicy: Always
  45. args: [ "-conf", "/etc/coredns/Corefile" ]
  46. volumeMounts:
  47. - name: config-volume
  48. mountPath: /etc/coredns
  49. ports:
  50. - containerPort: 53
  51. name: dns
  52. protocol: UDP
  53. - containerPort: 53
  54. name: dns-tcp
  55. protocol: TCP
  56. livenessProbe:
  57. httpGet:
  58. path: /health
  59. port: 8080
  60. scheme: HTTP
  61. initialDelaySeconds: 60
  62. timeoutSeconds: 5
  63. successThreshold: 1
  64. failureThreshold: 5
  65. dnsPolicy: Default
  66. volumes:
  67. - name: config-volume
  68. configMap:
  69. name: coredns
  70. items:
  71. - key: Corefile
  72. path: Corefile
  73. ---
  74. apiVersion: v1
  75. kind: Service
  76. metadata:
  77. name: kube-dns
  78. namespace: kube-system
  79. labels:
  80. k8s-app: coredns
  81. kubernetes.io/cluster-service: "true"
  82. kubernetes.io/name: "CoreDNS"
  83. spec:
  84. selector:
  85. k8s-app: coredns
  86. clusterIP: 10.254.0.2
  87. ports:
  88. - name: dns
  89. port: 53
  90. protocol: UDP
  91. - name: dns-tcp
  92. port: 53
  93. protocol: TCP

kube-dns配置文件

部署参考: http://www.cnblogs.com/iiiiher/p/7891713.html

有3个文件,修改cm即可.

  1. $ ls
  2. kubedns-cm.yaml kubedns-deployment.yaml kubedns-svc.yaml
  1. $ cat dns-cm.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: kube-dns
  6. namespace: kube-system
  7. data:
  8. stuDomains: |
  9. {"out-of.kubernetes": {"192.168.x.x"}
  10. upsteamNameservers: |
  11. {"114.114.114.114","9.9.9.9"}

配置dnsmasq--外建:模拟公司私有的dns服务器

  1. yum install -y dnsmasq tcpdump
  2. echo "192.168.8.191 server.out-of.kubernetes" > /tmp/hosts
  3. 启动:
  4. dnsmasq -q -d -h -R -H /tmp/hosts
  5. -d debug模式
  6. -q 输出查询记录
  7. -h 不使用/etc/hosts
  8. -R 不使用/etc/resolve.conf
  9. -H 使用自定义的文件作为DNS记录
  10. tcpdump -i eth0 udp port 53 -nnv
  11. host -t A server.out-of.kubernetes 192.168.x.x

测试:本地我用coredns

  1. $ kubectl run -it --rm --restart=Never busybox --image=busybox sh
  2. / # nslookup server.out-of.kubernetes
  3. Server: 10.254.0.2
  4. Address 1: 10.254.0.2 kube-dns.kube-system.svc.cluster.local
  5. Name: server.out-of.kubernetes
  6. Address 1: 192.168.x.x

分别访问集群/out-of.kubernetes/外网都可以通信.

同一个域名解析到2个ip如何实现?(headless svc)

参考:http://www.cnblogs.com/cuihongyu3503319/archive/2012/07/09/2583129.html

同一个域名 添加2条不同ip即可.

  1. $ cat /tmp/hosts
  2. 192.168.x.191 server.out-of.kubernetes
  3. 192.168.x.192 server.out-of.kubernetes
  4. $ dnsmasq -q -d -h -R -H /tmp/hosts
  5. $ host -t A server.out-of.kubernetes 192.168.x.x
  6. Using domain server:
  7. Name: 192.168.x.x
  8. Address: 192.168.x.x#53
  9. Aliases:
  10. server.out-of.kubernetes has address 192.168.x.191
  11. server.out-of.kubernetes has address 192.168.x.192
  • todo

    cordns k8s插件细节,将集群内的dns移到集群外.

    coredns放在集群里,logs -f看不到日志,目测得抽时间细究下.

    coredns只开放A记录,关闭AAAA功能.

每个svc添加两条记录

  1. <service_name>.<namespace_name>.<domain> # 没想到这种有什么用
  2. <service_name>.<namespace_name>.svc.<domain> # 好像kube-dns解析出的都是这种带svc的.
  3. $ cat nginx-svc.yaml
  4. kind: Service
  5. apiVersion: v1
  6. metadata:
  7. name: svc-nginx
  8. spec:
  9. selector:
  10. app: nginx
  11. ports:
  12. - protocol: TCP
  13. port: 8080
  14. targetPort: 80
  15. / # nslookup svc-nginx
  16. Address 1: 10.254.164.42 svc-nginx.default.svc.cluster.local
  17. / # nslookup svc-nginx.default.svc.cluster.local
  18. Address 1: 10.254.164.42 svc-nginx.default.svc.cluster.local
  19. / # nslookup svc-nginx.default.cluster.local
  20. nslookup: can't resolve 'svc-nginx.default.cluster.local'

[k8s]coredns/kube-dns配置subdomain的更多相关文章

  1. 4.2 K8S超级完整安装配置

    前言: 采坑 k8s有3种安装方式,如下所示: minikube:这是一个k8s集群模拟器,只有一个节点的集群,只为了测试使用,master和node都在一台机器上 直接使用带有容器功能的云平台安装: ...

  2. Linux 如何查看修改DNS配置

    DNS服务器介绍 DNS是计算机域名系统(Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的.域名服务器是指保存有该网络中所有 ...

  3. Redhat 一则关于路由及DNS配置的实例

    安装了Redhat 7.2, 配置路由, 但发现路由重启之后,不能生效. 配置路由: touch /etc/sysconfig/static-router, 然后编辑路由信息如下. any defau ...

  4. liunx之:解决liunx下dns配置重启失效的问题

    有时候能ping同ip地址,却ping不通域名,这就是dns没有配置的缘故. 但是DNS配置文件 /etc/resolv.conf 每次重启就会失效. 打开这个配置文件,发现有注释提示: Dynami ...

  5. 彻底解决Ubuntu 14.04 重启后DNS配置丢失的问题

    最近得到一个比较好用的DNS,每次重启后都修改DNS配置文件 /etc/resolv.conf 重启就会失效 从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvcon ...

  6. 从DNS配置

    从服务器可以从主服务器上抓取指定的区域数据文件起到备份解析记录和负载均衡的作用. 主DNS服务器IP:192.168.16.20 从DNS服务器IP:192.168.16.30 1,修改主服务器区域配 ...

  7. 安装Oracle 11g RAC R2 之Linux DNS 配置

    Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念,也就是指集群的单客户端访问名称.SCAN 这个特性为客户端提供了单一的主机名,用于访问集 ...

  8. Redhat linux DNS配置指南(SCANIP配置手册)

    在oracle 11g的RAC中增加了SCAN IP,而使用 SCAN IP的一种方式就是使用DNS,这里介绍在Redhat Linux 5.4中DNS的详细配置操作在配置DNS之前修改主机名Redh ...

  9. 21. DNS 配置和端口检测

    一.将本机的 DNS 配置为 8.8.8.8 ,用 nslookup (还可以使用 host.dig)验证 # 修改配置文件     # vim /etc/resolv.conf # 在文件的最后加入 ...

  10. Ubuntu系统下静态DNS配置详解

    1.DNS服务的简介: DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器.DNS中保存了一张域 ...

随机推荐

  1. BZOJ5071 小A的数字 BZOJ2017年10月月赛 其他

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5071 题意概括 题解 一开始蒙了. 感觉做过类似的题目. 但是找不到方法. 突然想到前缀和! 对于 ...

  2. 6-9 天平 uva839

    这题十分巧妙!!代码精简!强大的递归!!! 边读边判断   先读到底部  慢慢往上判断   难点在于传递w1+w2 有一个比LRJ更加简便的方法  return传递  全局变量判断 #include ...

  3. Trident简介

    1.引入 0.7版本:多条记录封装成批量,引入事务控制. 0.9版本:丢弃事务API,开始基于Storm之上的框架. 2.介绍 3.批次划分与事务实现 二:事务管理 4.事务处理机制 不透明事务:增加 ...

  4. Python - __name__ == '__main__'

    if __name__ == '__main__': app.run() __name__系统变量指示模块应如何被加载,他的值为"__main__"时表示当前模块是被直接执行. _ ...

  5. centos7 安装步骤

    这里选择64位 32位没有找到网卡... 注:这里是网络类型分配,网络类型分配分为三种,Bridge,NAT和Host-Only,大概区别是 1 BRIDGE  桥接:相当于主机和虚拟机连接到同一个h ...

  6. vs2017下发现解决python运行出现‘No module named "XXX""的解决办法

    对于使用vs2017开发python程序无疑发现,在解决方案资源管理器中设置把两个xxx.py,yyy.py文件都设置为启动文件,然后分别在vs2017这个IDE下运行这个两个文件在项目工程中运行,发 ...

  7. hdu 2647 Reward(拓扑排序+反图)

    题目链接:https://vjudge.net/contest/218427#problem/C 题目大意: 老板要给很多员工发奖金, 但是部分员工有个虚伪心态, 认为自己的奖金必须比某些人高才心理平 ...

  8. 使用metasploit做SNMP扫描和利用

    使用MSF用于SNMP扫描 auxiliary/scanner/snmp/snmp_login 介绍 补充知识: 在执行SNMP扫描之前,需要了解几件事情.首先,“只读”和“读写”团体名(commun ...

  9. 009.Docker Compose部署及基础使用

    一 Docker Compose概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配 ...

  10. 【java并发核心二】Exchanger的使用

    类 Exchanger 的功能可以使2个线程之间传输数据,比生产者/消费者模式方便. Exchanger类的结构很简单,重点就是exchange()方法. exchange()方法是阻塞执行的,可以设 ...