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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值