[k8s]coredns/kube-dns配置subdomain
思想: 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的地址
.:53 {
errors # show errors
log stdout # show query logs
health
kubernetes cluster.local 10.254.0.0/16
proxy out-of.kubernetes 192.168.x.x
proxy . /etc/resolv.conf
参考:
https://coredns.io/2017/03/01/coredns-for-kubernetes-service-discovery-take-2/
$ cat coredns.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
log stdout
health
kubernetes cluster.local 10.254.0.0/16
proxy out-of.kubernetes 192.168.x.x
proxy . /etc/resolv.conf
cache 30
}
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: coredns
namespace: kube-system
labels:
k8s-app: coredns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: "CoreDNS"
spec:
replicas: 1
selector:
matchLabels:
k8s-app: coredns
template:
metadata:
labels:
k8s-app: coredns
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
spec:
containers:
- name: coredns
image: coredns/coredns:latest
imagePullPolicy: Always
args: [ "-conf", "/etc/coredns/Corefile" ]
volumeMounts:
- name: config-volume
mountPath: /etc/coredns
ports:
- containerPort: 53
name: dns
protocol: UDP
- containerPort: 53
name: dns-tcp
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
dnsPolicy: Default
volumes:
- name: config-volume
configMap:
name: coredns
items:
- key: Corefile
path: Corefile
---
apiVersion: v1
kind: Service
metadata:
name: kube-dns
namespace: kube-system
labels:
k8s-app: coredns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: "CoreDNS"
spec:
selector:
k8s-app: coredns
clusterIP: 10.254.0.2
ports:
- name: dns
port: 53
protocol: UDP
- name: dns-tcp
port: 53
protocol: TCP
kube-dns配置文件
部署参考: http://www.cnblogs.com/iiiiher/p/7891713.html
有3个文件,修改cm即可.
$ ls
kubedns-cm.yaml kubedns-deployment.yaml kubedns-svc.yaml
$ cat dns-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: kube-dns
namespace: kube-system
data:
stuDomains: |
{"out-of.kubernetes": {"192.168.x.x"}
upsteamNameservers: |
{"114.114.114.114","9.9.9.9"}
配置dnsmasq--外建:模拟公司私有的dns服务器
yum install -y dnsmasq tcpdump
echo "192.168.8.191 server.out-of.kubernetes" > /tmp/hosts
启动:
dnsmasq -q -d -h -R -H /tmp/hosts
-d debug模式
-q 输出查询记录
-h 不使用/etc/hosts
-R 不使用/etc/resolve.conf
-H 使用自定义的文件作为DNS记录
tcpdump -i eth0 udp port 53 -nnv
host -t A server.out-of.kubernetes 192.168.x.x
测试:本地我用coredns
$ kubectl run -it --rm --restart=Never busybox --image=busybox sh
/ # nslookup server.out-of.kubernetes
Server: 10.254.0.2
Address 1: 10.254.0.2 kube-dns.kube-system.svc.cluster.local
Name: server.out-of.kubernetes
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即可.
$ cat /tmp/hosts
192.168.x.191 server.out-of.kubernetes
192.168.x.192 server.out-of.kubernetes
$ dnsmasq -q -d -h -R -H /tmp/hosts
$ host -t A server.out-of.kubernetes 192.168.x.x
Using domain server:
Name: 192.168.x.x
Address: 192.168.x.x#53
Aliases:
server.out-of.kubernetes has address 192.168.x.191
server.out-of.kubernetes has address 192.168.x.192
- todo
cordns k8s插件细节,将集群内的dns移到集群外.
coredns放在集群里,logs -f看不到日志,目测得抽时间细究下.
coredns只开放A记录,关闭AAAA功能.
每个svc添加两条记录
<service_name>.<namespace_name>.<domain> # 没想到这种有什么用
<service_name>.<namespace_name>.svc.<domain> # 好像kube-dns解析出的都是这种带svc的.
$ cat nginx-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: svc-nginx
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 8080
targetPort: 80
/ # nslookup svc-nginx
Address 1: 10.254.164.42 svc-nginx.default.svc.cluster.local
/ # nslookup svc-nginx.default.svc.cluster.local
Address 1: 10.254.164.42 svc-nginx.default.svc.cluster.local
/ # nslookup svc-nginx.default.cluster.local
nslookup: can't resolve 'svc-nginx.default.cluster.local'
[k8s]coredns/kube-dns配置subdomain的更多相关文章
- 4.2 K8S超级完整安装配置
前言: 采坑 k8s有3种安装方式,如下所示: minikube:这是一个k8s集群模拟器,只有一个节点的集群,只为了测试使用,master和node都在一台机器上 直接使用带有容器功能的云平台安装: ...
- Linux 如何查看修改DNS配置
DNS服务器介绍 DNS是计算机域名系统(Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的.域名服务器是指保存有该网络中所有 ...
- Redhat 一则关于路由及DNS配置的实例
安装了Redhat 7.2, 配置路由, 但发现路由重启之后,不能生效. 配置路由: touch /etc/sysconfig/static-router, 然后编辑路由信息如下. any defau ...
- liunx之:解决liunx下dns配置重启失效的问题
有时候能ping同ip地址,却ping不通域名,这就是dns没有配置的缘故. 但是DNS配置文件 /etc/resolv.conf 每次重启就会失效. 打开这个配置文件,发现有注释提示: Dynami ...
- 彻底解决Ubuntu 14.04 重启后DNS配置丢失的问题
最近得到一个比较好用的DNS,每次重启后都修改DNS配置文件 /etc/resolv.conf 重启就会失效 从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvcon ...
- 从DNS配置
从服务器可以从主服务器上抓取指定的区域数据文件起到备份解析记录和负载均衡的作用. 主DNS服务器IP:192.168.16.20 从DNS服务器IP:192.168.16.30 1,修改主服务器区域配 ...
- 安装Oracle 11g RAC R2 之Linux DNS 配置
Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念,也就是指集群的单客户端访问名称.SCAN 这个特性为客户端提供了单一的主机名,用于访问集 ...
- Redhat linux DNS配置指南(SCANIP配置手册)
在oracle 11g的RAC中增加了SCAN IP,而使用 SCAN IP的一种方式就是使用DNS,这里介绍在Redhat Linux 5.4中DNS的详细配置操作在配置DNS之前修改主机名Redh ...
- 21. DNS 配置和端口检测
一.将本机的 DNS 配置为 8.8.8.8 ,用 nslookup (还可以使用 host.dig)验证 # 修改配置文件 # vim /etc/resolv.conf # 在文件的最后加入 ...
- Ubuntu系统下静态DNS配置详解
1.DNS服务的简介: DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器.DNS中保存了一张域 ...
随机推荐
- BZOJ5071 小A的数字 BZOJ2017年10月月赛 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5071 题意概括 题解 一开始蒙了. 感觉做过类似的题目. 但是找不到方法. 突然想到前缀和! 对于 ...
- 6-9 天平 uva839
这题十分巧妙!!代码精简!强大的递归!!! 边读边判断 先读到底部 慢慢往上判断 难点在于传递w1+w2 有一个比LRJ更加简便的方法 return传递 全局变量判断 #include ...
- Trident简介
1.引入 0.7版本:多条记录封装成批量,引入事务控制. 0.9版本:丢弃事务API,开始基于Storm之上的框架. 2.介绍 3.批次划分与事务实现 二:事务管理 4.事务处理机制 不透明事务:增加 ...
- Python - __name__ == '__main__'
if __name__ == '__main__': app.run() __name__系统变量指示模块应如何被加载,他的值为"__main__"时表示当前模块是被直接执行. _ ...
- centos7 安装步骤
这里选择64位 32位没有找到网卡... 注:这里是网络类型分配,网络类型分配分为三种,Bridge,NAT和Host-Only,大概区别是 1 BRIDGE 桥接:相当于主机和虚拟机连接到同一个h ...
- vs2017下发现解决python运行出现‘No module named "XXX""的解决办法
对于使用vs2017开发python程序无疑发现,在解决方案资源管理器中设置把两个xxx.py,yyy.py文件都设置为启动文件,然后分别在vs2017这个IDE下运行这个两个文件在项目工程中运行,发 ...
- hdu 2647 Reward(拓扑排序+反图)
题目链接:https://vjudge.net/contest/218427#problem/C 题目大意: 老板要给很多员工发奖金, 但是部分员工有个虚伪心态, 认为自己的奖金必须比某些人高才心理平 ...
- 使用metasploit做SNMP扫描和利用
使用MSF用于SNMP扫描 auxiliary/scanner/snmp/snmp_login 介绍 补充知识: 在执行SNMP扫描之前,需要了解几件事情.首先,“只读”和“读写”团体名(commun ...
- 009.Docker Compose部署及基础使用
一 Docker Compose概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配 ...
- 【java并发核心二】Exchanger的使用
类 Exchanger 的功能可以使2个线程之间传输数据,比生产者/消费者模式方便. Exchanger类的结构很简单,重点就是exchange()方法. exchange()方法是阻塞执行的,可以设 ...