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

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

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


系统环境:

  • kubernetes 版本:1.16.3

一、遇到的问题

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

1stdout: 
2stderr: fatal: unable to access 
3'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

 1kind: Deployment
 2apiVersion: apps/v1
 3metadata:
 4  name: centos7
 5  labels:
 6    app: centos7
 7spec:
 8  replicas: 1
 9  selector:
10    matchLabels:
11      app: centos7
12  template:
13    metadata:
14      labels:
15        app: centos7
16    spec:
17      #-------------------------------------------
18      hostAliases:                   #配置hosts文件
19      - ip: "192.168.2.1"            #配置解析的IP
20        hostnames:
21        - "www.baidu.com"            #配置域名
22      #-------------------------------------------    
23      containers:
24      - name: service-provider
25        image: centos:7.7.1908
26        command:
27        - "/bin/sh"
28        args:
29        - "-c"
30        - "while true; do sleep 999999; done"

部署到 Kubernetes 中:

1$ kubectl apply -f centos-deployment.yaml

三、进入镜像查看与测试

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

查找示例 Pod

查找部署的 CentOS 的 Pod

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

进入 Pod 内部

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

查看镜像中的 Hosts 文件

查看 hosts 文件:

1$ cat /etc/hosts

内容如下:

 1# Kubernetes-managed hosts file.
 2127.0.0.1       localhost
 3::1     localhost ip6-localhost ip6-loopback
 4fe00::0 ip6-localnet
 5fe00::0 ip6-mcastprefix
 6fe00::1 ip6-allnodes
 7fe00::2 ip6-allrouters
 810.244.39.240   centos7-585dd57b95-qsx2c
 9# Entries added by HostAliases.
10192.168.2.1     www.baidu.com

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

测试配置的域名解析地址

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

1$ ping www.baidu.com

内容如下:

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

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

---END---


  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。