修改k8s pod的hosts文件
当我们服务需要使用自定义的域名解析时,就需要修改pod内hosts文件。
而如果我们在pod内部修改后,下次重启依然会丢,所有下面用两种方式实现持久化修改:
1.当集群内所有或者大部分服务都需要修改hosts文件时,我们可以修改CoreDNS的configmap文件
kubectl edit cm -n kube-system coredns
在data里加入hosts{
.....
}
然后重启pod后生效。
2.只针对特定的服务添加hosts内容,此时在dockerfile的文件里添加
提醒:不可用RUN echo "1.1.1.1 www.yx.com">>/etc/hosts
因为尽管构建时修改了hosts,容器在启动时会重新生成这个文件,就会覆盖点修改的hosts.
我们可以写一个修改hosts的脚本,然后在entrypoint里执行这个脚本,用于容器启动执行的命令:
在Dockerfile的同级目录下新将sh脚本,
1 2 3 4 5 | cat >>edithost.sh <<EOF #!/bin/sh echo "1.1.1.1 www.yx.com">>/etc/hosts exec "$@" EOF |
exec "$@" 必须添加,表示用指定的命令代替当前的shell,一旦exec执行成功,指定的命令会取代当前的进程。
在下面dockerfile表示,追加hosts脚本执行完成后用CMD的启动jar命令替代当前的进程,这样就保持了jar程序运行的命令是主进程。
Dockerfile的内容为:
FROM openjdk:17.0.2-slim
ENV LANG=C.UTF-8
ENV TZ=Asia/Shanghai
workdir /app
COPY edithost.sh /app/edithost.sh
ADD myweb-0.0.1-SNAPSHOT.jar ./app.jar
RUN chmod +x edithost.sh
ENTRYPOINT ["sh","edithost.sh"]
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
然后重新docker build构建镜像 ,k8s重启pod即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了