修改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脚本,

 

 

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即可。

 

posted @ 2024-06-06 14:54  瘦阿瘦  阅读(37)  评论(0编辑  收藏  举报