k8s上不同服务之间可以通过service的域名来互相访问。域名的解析是一般是通过在集群中的kube-dns来完成有时候,我们希望给运行在k8s上的Pod增加一些域名的解析(例如宿主机的主机名),但操作dns模块也不太方便,那么k8s上有没有想linux主机那样可以直接在host文件设置域名解析呢,容易想到的是,将域名记录到容器镜像的/etc/hosts文件,这样容器运行时就可以正确解析了。然而这样是不行的。k8s会管理这个文件,打到镜像里的文件实际并不会起作用。举个例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 [root@master] FROM nginx:1.0 RUN echo "8.8.8.8 google.com" >> /etc/hosts EXPOSE 80 CMD ["/usr/local/nginx/sbin/nginx" , "-g" , "daemon off;" ] [root@master] [root@8153d35a37e9 /] 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix [root@master test ] 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" [root@mastertest] Warning: kubectl apply should be used on resource created by either kubectl create –save-config or kubectl apply pod "hostaliases-pod" configured [root@master-168-32 test ] 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.1.162 hostaliases-pod 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配置文件中增加的几条记录都出现在 /etc/hosts 文件中了。