标签:1.6 Kubernetes 8.8 dnsmasq DNS hosts Pod
在之前的文章中提到过,Kubernetes 1.6 新增的混合 DNS 功能。这一功能不大,但是在企业私有云环境下有着非常重要的衔接作用,能够有效的将 Kubernetes 内的应用和集群外甚至互联网上的的 Consual 或者类似系统管理的服务连接起来,形成更好的协同效果。
上篇文章主要侧重点是概念和一些 YAML 例子,本文则会从操作出发,用一个例子从头到尾的逐步操作这一功能的具体操作。
DNS Server
我们使用一个 Ubuntu Server 运行 dnsmasq 来担任 Kubernetes 集群外的 DNS 服务器角色,只为了满足测试需要的话,就不需要太复杂的配置了。
安装
具体安装步骤如下:
#!/bin/sh# 安装 dnsmasqapt install dnsmasq# 停止自动启动的 dnsmasq 服务systemctl stop dnsmasq# 生成一个 Host 文件并写入一条记录echo " 114.114.114.114 server.out-of.kubernetes" > /tmp/hosts# 显示 IPifconfig# 启动 DNS 服务# -d 用 debug 模式启动,在前台运行# -q 输出查询记录# -h 不使用 /etc/hosts# -R 不使用 /etc/resolve.conf# -H 使用刚才生成的文件作为 dns 记录dnsmasq -q -d -h -q -R -H /tmp/hosts
这样,我们就启动了一个 DNS 服务器,并且可以直观的看到其工作状况如下:
dnsmasq: started, version 2.76 cachesize 150 dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC lo op-detect inotify dnsmasq: warning: no upstream servers configured dnsmasq: bad address at /tmp/hosts line 1 dnsmasq: read /tmp/hosts - 0 addresses
Kubernetes 配置
前文说过,我们需要用一个 Configmap 对象来让 Kubernetes 应用新的 DNS 解析配置,这里我们简单的新建一个存根域,就是上文提到的out-of.kubernetes
域名,让其使用我们前面安装的 DNS 服务器进行解析,其他域名则使用8.8.8.8
和8.8.4.4
这一公共 DNS 解析。配置情况如下:
apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: stubDomains: | {"out-of.kubernetes": ["10.140.0.5"]} upstreamNameservers: | ["8.8.8.8", "8.8.4.4"]
利用kubectl apply -f
命令使之生效。
注意:系统可能缺省带有这一 configmap,因此需要用 apply 进行操作,建议使用 kubectl get configmap kube-dns -o yaml --namespace kube-system
进行复查。
测试 Pod
这里使用一个 Alpine Linux 的镜像作为测试工具:
apiVersion: v1 kind: Pod metadata: name: tester spec: containers: - name: alpine image: alpine imagePullPolicy: IfNotPresent command: ["sleep"] args: ["3600"]
测试
测试 Pod 运行之后,可以使用kubectl exec -it tester sh
命令进入 Pod开始测试。
在 Pod 的 Shell 中我们可以尝试执行
ping server.out-of.kubernetes
,会看到返回了我们写入在 Hosts 中的地址,在 DNS 服务器端,也会看到相关的查询记录。如果 ping 其他的主机名,则会返回正常的结果。
标签:1.6,Kubernetes,8.8,dnsmasq,DNS,hosts,Pod 来源: https://blog.51cto.com/u_15127693/2825145
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。