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 许可协议。转载请注明来源 杂烩饭!
评论