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

一、遇到的问题

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

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 文件中添加 42.51.51.51 映射到 666.myit.icu 域名,Deployment 内容如下:

vim 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: "42.51.51.51"            #配置解析的IP          hostnames:          - "666.myit.icu"            #配置域名        #-------------------------------------------        containers:        - name: service-provider          image: centos:7.7.1908          command:          - "/bin/sh"          args:          - "-c"          - "while true; do sleep 999999; done"

部署到 Kubernetes 中:

$ kubectl apply -f centos-deployment.yaml
三、进入镜像查看与测试

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

查找示例 Pod

查找部署的 CentOS 的 Pod

[root@master1 ~]#kubectl get pod | grep centos7  centos7-7fcdf4d875-q2hr6             1/1     Running   0          10m

进入 Pod 内部,查看镜像中的Hosts文件

[root@master1 ~]#kubectl exec centos7-7fcdf4d875-q2hr6 -it -- /bin/bash  [root@centos7-7fcdf4d875-q2hr6 /]# cat /etc/hosts  # 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.4.24    centos7-7fcdf4d875-q2hr6    # Entries added by HostAliases.  42.51.51.51    666.myit.icu

可以看到配置信息 42.51.51.51 666.myit.icu 已经加入到镜像的hosts地址,说明配置已经生效。

测试配置的域名解析地址

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

$ ping 666.myit.icu

内容如下:

[root@centos7-7fcdf4d875-q2hr6 /]# ping 666.myit.icu  PING 666.myit.icu (42.51.51.51) 56(84) bytes of data.  64 bytes from 666.myit.icu (42.51.51.51): icmp_seq=1 ttl=58 time=0.553 ms  64 bytes from 666.myit.icu (42.51.51.51): icmp_seq=2 ttl=58 time=0.454 ms  64 bytes from 666.myit.icu (42.51.51.51): icmp_seq=3 ttl=58 time=0.404 ms  64 bytes from 666.myit.icu (42.51.51.51): icmp_seq=4 ttl=58 time=0.396 ms  ^C  --- 666.myit.icu ping statistics ---  4 packets transmitted, 4 received, 0% packet loss, time 3000ms  rtt min/avg/max/mdev = 0.396/0.451/0.553/0.067 ms

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

原文出处:myit -> https://myit.icu/index.php/archives/985/

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。
超哥软件库 » Kubernetes配置镜像中Hosts文件的域名解析