Loading
Loading...

Kubernetes 配置镜像中 Hosts 文件的域名解析

系统环境:

  • kubernetes 版本:1.16.3

一、遇到的问题

最近,给公司搭建的持续集成过程中,由于每次执行任务时都是新创建一个 Kubernetes Pod 执行的,在执行过程中经常出现 DNS 解析错误问题,如下:

Terminal window
stdout:
stderr: fatal: unable to access
'http://git.xxx.cn/mydlqcloud-xxxx/': Could not resolve host: git.xxxx.cn

经过排查物理机 DNS 和 CodeDNS 插件,都没找出问题所在,所以只能归咎于公司 DNS 服务器问题导致。无奈,没有能力要求修复与更改 NDS 服务器,只能想如果能手动配置镜像中的 Host 文件,让其直接解析域名到指定的 IP 地址,不要经过 DNS 服务器解析,那么这个问题就能够简单的迎刃而解。

经过一番查找 Kubernetes 中确实提供了能够配置 Docker 镜像中的 Host 的配置的字段 hostAliases,只要简单的配置就能轻松指定域名解析的 IP 地址,下面将介绍下如何配置。

二、配置镜像中的 Hosts 文件

这里配置一个用于示例的 Deployment 对象,为了后续测试时,能够执行部分命令,所以这里使用 CentOS 镜像。在 Deployment 配置中配置 Host 文件中添加 192.168.1.1 映射到 www.baidu.com 域名,Deployment 内容如下:

centos-deployment.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
name: centos7
labels:
app: centos7
spec:
replicas: 1
selector:
matchLabels:
app: centos7
template:
metadata:
labels:
app: centos7
spec:
#-------------------------------------------
hostAliases: #配置hosts文件
- ip: "192.168.2.1" #配置解析的IP
hostnames:
- "www.baidu.com" #配置域名
#-------------------------------------------
containers:
- name: service-provider
image: centos:7.7.1908
command:
- "/bin/sh"
args:
- "-c"
- "while true; do sleep 999999; done"

部署到 Kubernetes 中:

Terminal window
$ kubectl apply -f centos-deployment.yaml

三、进入镜像查看与测试

接下来将要进入刚刚部署的 Deployment 的 Pod 中,查看 Hosts 文件是否发生变化,以及是否能够按照 Hosts 文件中的配置进行解析。

查找示例 Pod

查找部署的 CentOS 的 Pod

Terminal window
$ kubectl get pod | grep centos7
centos7-585dd57b95-qsx2c 1/1 Running 0 5m30s

进入 Pod 内部

Terminal window
$ kubectl exec -it centos7-585dd57b95-qsx2c -n mydlqcloud /bin/bash

查看镜像中的 Hosts 文件

查看 hosts 文件:

Terminal window
$ cat /etc/hosts

内容如下:

Terminal window
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.244.39.240 centos7-585dd57b95-qsx2c
# Entries added by HostAliases.
192.168.2.1 www.baidu.com

可以看到配置信息 192.168.2.1 www.baidu.com 已经加入到镜像的 hosts 地址,说明配置已经生效。

测试配置的域名解析地址

接下来执行 Ping 命令访问对应域名,查看是否能按照我们配置解析出 IP 地址:

Terminal window
$ ping www.baidu.com

内容如下:

PING www.baidu.com (192.168.2.1) 56(84) bytes of data.
64 bytes from www.baidu.com (192.168.2.1): icmp_seq=1 ttl=127 time=0.248 ms
64 bytes from www.baidu.com (192.168.2.1): icmp_seq=2 ttl=127 time=0.274 ms
64 bytes from www.baidu.com (192.168.2.1): icmp_seq=3 ttl=127 time=0.294 ms

经过上面测试,在 Kubernetes 部署对象中,确实可以配置 hostAliases 参数,来加入我们自定义 host 配置,根绝这一点,在发生 DNS 解析问题时,通过此能够帮助我们解决部分问题。

---END---
如果本文对你有帮助,可以关注我的公众号 "小豆丁技术栈" 了解最新动态,顺便也请帮忙 Github 点颗星哦,感谢~

本文作者:超级小豆丁 @ 小豆丁技术栈

本文链接:http://www.mydlq.club/article/52/

本文标题:Kubernetes 配置镜像中 Hosts 文件的域名解析

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!