Kubernetes HostAliases添加其他主机别名到Pod

k8s的不同微服务之间可以通过service-name域名来相互访问,通过集群中的coreDNS来完成service-name域名解析。当我们想在Pod上增加一些域名解析时(例如宿主机的主机名),操作DNS模块也不太方便。那么k8s上有没有像linux主机那样,可以直接在/etc/hosts文件中设置域名解析呢?

1. 在容器镜像中添加/etc/hosts解析(不行)

很容易想到的是,我们把域名记录到容器镜像的/etc/hosts文件,这样容器运行时就可以正确解析了。然而这样是不行的,docker会管理/etc/hosts文件,打到镜像里的域名解析实际并不会起作用。

FROM nginx:latest

RUN  echo "8.8.8.8 google.com" >> /etc/hosts

EXPOSE 80

CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
# docker run -it nginx /bin/bash

Container# cat /etc/hosts

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.5      8153d35a37e

显然在打镜像的时候配置/etc/hosts是不满足要求的。

2. 在Pod控制器yaml中添加hostAliases解析(行)

我们可以在Pod控制器yaml中通过.spec.hostAliases字段添加主机别名,这个功能是在1.7.x以及以上版本提供的。

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  restartPolicy: Never
  hostAliases:
  – ip: "10.1.2.2"
    hostnames:
    – "mc.local"
    – "rabbitmq.local"
  – ip: "10.1.2.3"
    hostnames:
    – "redis.local"
    – "mq.local"
  containers:
  – name: cathosts
    image: busybox
    command:
    – cat
    args:
    – "/etc/hosts"                        
# kubectl apply -f hostalias.yaml 
# kubectl exec hostaliases-pod -- 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
127.0.0.1   foo.local
127.0.0.1   bar.local

10.1.2.2    mc.local
10.1.2.2    rabbitmq.local
10.1.2.3    redis.local
10.1.2.3.   mq.local

在yaml配置文件中,增加的几条记录都出现在Pod容器的/etc/hosts文件中了。

3. 参考文章

https://www.centosdoc.com/docker/163.html

本文转自 https://blog.csdn.net/yjk13703623757/article/details/108071067,如有侵权,请联系删除。

标题: Kubernetes HostAliases添加其他主机别名到Pod

链接: https://zhiyong0389.github.io/2023/01/15/k8s-HostAliases/

版权声明: 若无特殊标注皆为 智勇 原创版权, 转载请以链接形式注明作者及原始出处

最后编辑时间: 2023-06-29

本站由免费云加速(FreeCDN)提供网站加速和攻击防御服务