Kubernetes 绑定Hosts的正确姿势
有的时候我们需要在容器里面绑定 hosts,比如我们用 logstash 需要消费 kafka 消息,但是 kafka 监听的地址是 hostname,这个时候就需要绑定 hosts(规范一点是做解析)
在容器里面绑定 hosts 常见的方法一种是挂载主机的 hosts 文件,一种是修改容器的启动 CMD,每次启动修改 hosts,这两种方法都有个缺点,就是不受 kubelet 管理了,默认的 hosts 内容也会被覆盖掉
在 k8s 环境下有更好的解决方案:那就是让 k8s 自己来管理
使用 hostAliases 来绑定 hosts
1  | apiVersion: apps/v1  | 
进入容器查看 hosts 文件
1  | kubectl exec -n ops logstash-k8s-68d6bf4dff-sxnst -- cat /etc/hosts  | 
1  | # Kubernetes-managed hosts file.  | 
这个 hosts 包括两个部分,一部分是容器自带的 hosts,另一部分是我们自己添加的
在 docker 下绑定 hosts
运行时候修改
docker 可以通过 –add-host 参数来添加 hosts 信息到容器的/etc/hosts 文件中
1  | docker run --rm --add-host=example.com:192.168.1.2 ubuntu cat /etc/hosts  | 
1  | 127.0.0.1 localhost  | 
构建时修改
Dockerfile 中,可以在 CMD 命令下进行修改,在 RUN 里面修改会提示文件只读无法修改。
1  | FROM centos:7  | 
在 docker-compose 环境下绑定 hosts
在 yml 文件里
1  | extra_hosts:  | 
显示出来的效果/etc/hosts
1  | 192.168.1.1 test.com  | 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!
 评论
