如何在docker容器、Kubernetes的Pod中添加/etc/hosts配置【转】
如何在docker容器、Kubernetes的Pod中添加/etc/hosts配置.md
一、概述
在实际业务场景中,经常会出现需要配置/etc/hosts 内容的情况,即使现在向docker和k8s方向转变,仍然是存在小部分这样的需求的。假如入内网里面有专用的内部DNS服务器的话,配置到内网DNS服务器才是最好的选择,如果真没有,那么这就告诉你以下几种方式如何配置/etc/hosts。
二、直接docker run的容器
直接docker run的容器,可以通过docker run的时候指定–add-host参数,就可以实现,如下
docker run -itd --add-host www.baidu.com:202.102.1.1 centos:7
进入容器后可以看到/etc/hosts内容
[root@iZ2zegjjeracuigce27w49Z ~]# docker exec -it d9fe /bin/bash [root@d9fe9a36af37 /]# 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 202.102.1.1 www.baidu.com 169.254.123.2 d9fe9a36af37 [root@d9fe9a36af37 /]#
三、使用docker-compose编排
使用docker-compose时,添加如下参数就可以实现
需要注意下文件格式的版本,目前2版本兼容性最好
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
四、Kubernetes
Kubernetes在官方文档中给出了如何给Pod设置/etc/hosts条目的方法,但是我们一般是用deployment来部署应用的,需要按照如下的方法配置
--- kind: Deployment apiVersion: extensions/v1beta1 metadata: name: stilton labels: app: cheese spec: replicas: 2 selector: matchLabels: app: cheese template: metadata: labels: app: cheese spec: containers: - name: cheese image: errm/cheese:stilton ports: - containerPort: 80 hostAliases: - ip: 127.0.0.1 hostnames: - myadded.examplehostname
注意hostAliases这一行和containers以及restartPolicy是同一级的,json格式如下
"restartPolicy": "Always", "terminationGracePeriodSeconds": 30, "dnsPolicy": "ClusterFirst", "hostAliases": [ { "ip": "127.0.0.1", "hostnames": [ "myadded.examplehostname" ] } ]
登陆到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 10.210.1.138 micro-ipsvr-web-5b855cc4d6-wz24x # Entries added by HostAliases. 127.0.0.1 myadded.examplehostname
或许会有人想:可不可以直接把这些域名映射关系配置到kube-dns(coredns)里面,这样所有的Pod都可以同步kube-dns获取到了?
翻阅了一下相关的文档,目前还是实现不了的。
参考资料
https://docs.docker.com/compose/compose-file/compose-file-v2/
https://kubernetes.io/zh/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2017-07-31 MySQL Warning: Using a password on the command line interface can be insecure.解决办法
2017-07-31 不老的神器:安全扫描器Nmap渗透使用指南【转】