总结:重启后,转发策略不仅被禁用,而且重新运行转发命令后也无法访问。 该计划将于稍后编制并公布。 第三次制作时,通过与现场沟通,了解到客户的策略是在制作时关闭防火墙。 然而,端口绑定在实际业务环境中长期以来一直是一个问题,研究和分析揭示了各种可能性。
简介
之前写过单机Tomcat多个实例,最后使用iptables转发到80解决了访问问题。
第三:第一轮投产前,客户进行了迁移扩容。 重启后,不仅转发策略被禁用,而且即使重新运行转发命令,80也无法访问。 后来我还发现防火墙完全关闭了。 经过一番研究,通过打开防火墙、配置自定义防火墙功能、保存iptables策略解决了iptables传输和重启失败的问题。 该解决方案也已提交给客户。 该计划将于稍后编制并公布。
在第三轮生产中,通过与现场的沟通,我们了解到客户的策略是在生产过程中关闭防火墙。 太奇怪了! 但我们还是得想办法,不是吗? 你总不能说这个系统需要防火墙吧?经过一番研究、实验和咨询专家,我们终于弄清楚了。 整理如下。
# 进入Docker容器并启动 tomcatroot@40f7130d7832:/usr/local/tomcat/bin# ./startup.sh # 获取Tomcat对应的Java进程: root@40f7130d7832:/usr/local /tomcat/ bin# ps -ef | grep java# kch 添加用户 root@40f7130d7832:/usr/local# # groupadd kch && useradd -d /kch -g kch -m kch && passwd kch # 更改 tomcat 所有者 For kchroot@40f7130d7832:/usr /local# chown -R kch.kch tomcat# 给出 tomcat 对应的 Java 进程进程u+s权限(进程只能是exe,不能是脚本):对于一般用户访问,可以临时授予进程root权限,并绑定80端口。 root@40f7130d7832:/usr/local# chmod u+s /docker[ k4 ]java-home/jre/bin/java
实验如下
直观使用tomcat7官方镜像。 如果没有,请自行拉取。
docker pull tomcat:7.0
默认为8080端口,启动命令。
docker run --name w1 [ k4]it -p 8080:8080 tomcat:7.0 /bin/bash
这里需要绑定80端口启动命令如下所示。 您还需要修改 server.xml。 将 Tomcat 端口更改为 8080 将其更改为 80。
启动Tomcat镜像
ChinaDreams:workspace kangcunhua$ docker镜像仓库标签镜像ID创建大小....tomcat 7.0 3402a4bb8ae6 4个月前357MB....ChinaDreams :workspace kangcunhua $ docker run --name www -it -p 80:80 tomcat:7.0 /bin/bashroot@40f7130d7832:/usr/local/tomcat# cd binroot@40f7130d7832:/usr/local/tomcat/bin# ./startup.shroot@40f7130d7832:/usr/local/tomcat/bin# ps -ef | grep javaroot 12 1 37 15: 12 分/0 00:00:05 /docker-java-home/jre/bin/java -Djava.util.logging.config.file=/usr/local/ tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat /endorsed -类路径 / usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/ usr /local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap startroot 56 1 0 15:12 pts/0 00:00 :00 grep javaroot@40f7130d7832 : /usr/local/tomcat/bin#curl localhost:8080...root@40f7130d7832:/usr/local/tomcat/bin#
访问Tomcat进程(exe):/docker- java -home/jre/bin/java. 注意:您在这里写下的查询必须是进程(exe)而不是脚本。 以后会有用的。
修改server.xml
ChinaDreams:workspace kangcunhua$ docker cp www:/usr/local/tomcat/conf/server.xml .ChinaDreams:workspace kangcunhua$ vi server .xml ChinaDreams :workspace kangcunhua$ docker cp server.xml www:/usr/local/tomcat/conf/
将默认8080更改为80
搜索 > p>
<Connector port="8080"
<Connector port="80"
新prms用户更改为
对应容器中已创建prms用户
root@40f7130d7832:/usr/local# # groupadd kch && useradd -d /kch - g kch -m kchroot @40f7130d7832:/ usr /local# # passwd kch
更改 Tomcat 所有者
root@40f7130d7832:/usr/local# ls - ladrwxr-sr-x 14 root 人员 4096 12 月 18 日 15:12 tomcatroot@40f7130d7832:/usr/local# chown -R kch.kch tomcatroot@40f7130d7832:/usr/local# ls -ladrwxr[ k4] sr-x 20 kch kch 4096 Dec 18 15:22 tomcatroot@40f7130d7832:/usr/local#
启动
原来可以正常启动。但无法启动访问80端口;
$ ./startup.sh...Tomcat running.$curl localhostcurl: (7) 无法连接到本地主机80端口:连接被拒绝 $ ./shutdown.sh
修复 Java 所有者
root@40f7130d7832:/usr/local# ls -la /docker-java -home/jre/bin/java-rwxr [ k4] xr-x 1 root root 6408 2017年5月19日 /docker-java-home/jre/bin/javaroot@40f7130d7832 :/usr/local# chmod u+s /docker-java - ]home /jre/bin/javaroot@40f7130d7832:/usr/local# ls -la /docker-java-home /jre/bin/java-rwsr-xr[k4 ]x 1根根6408May 19 2017 /docker-java-home/jre/bin/java
启动Tomcat
正常启动并允许访问80端口也可以查看Tomcat home通过从浏览器访问 http://localhost 来访问该页面。
root@40f7130d7832:/usr/local# su kch$ ./startup.sh使用CATALINA_BASE: /usr/local/tomcat使用CATALINA_HOME: /usr/local/tomcat使用CATALINA_TMPDIR: /usr/local/tomcat/ 使用tempJRE_HOME: /docker-java-home/jreCLASSPATH 使用: /usr/local/tomcat/bin/bootstrap.jar:/usr/ local /tomcat/bin/tomcat-juli.jarTomcat 已启动 已完成。 $curl localhost...$
退出提交镜像
docker commit www tomcat-bind80:7.0
提交dockerhub
ChinaDreams:workspace kangcunhua$ docker镜像仓库标签镜像ID创建大小 tomcat-bind807.0 c6e1013adaf9 6 秒前 374MBChinaDreams:workspace kangcunhua$ docker tag c6e1013adaf9 aninputforce/tomcat7-bind80:latestChinaDreams:workspace kangcunhua$ docker 镜像仓库标签镜像 ID 创建 sizetomcat-bind80 7.0 c6e1013 f9 2 分钟 上一个 374MBaninput力/tomcat7 - bind80 最新 c6e1013adaf9 2 分钟前 374MBChinaDreams:workspace kangcunhua$ docker pull aninputforce/tomcat7-bind80
使用镜像
ChinaDreams:workspace kangcunhua$ docker pull aninputforce/tomcat7 -bind80ChinaDreams : 工作空间 kangcunhua$ docker run --name www -it-p 80:80 aninputforce/tomcat7-bind80 /bin/bashroot@ff63d8ac4776:/usr/local/tomcat# su kch$ pwd/usr/local/tomcat$ cd bin$ ./startup.sh使用 CATALINA_BASE: / usr/local/tomcat 使用 CATALINA_HOME:/usr/local/tomcat 使用 CATALINA_TMPDIR:/usr/local/tomcat/temp 使用 JRE_HOME:/docker-java-home/jre 使用 CLASSPATH:/usr/local/tomcat/ bin/引导程序。 jar:/usr/local/tomcat/bin/tomcat-juli.jarTomcat running.$curl localhost....
参考链接
你会吗有吗? 有没有办法让非 -root 进程绑定到 Linux 上的“特权”端口?请为链接添加说明。
再见
本备忘录已结束。 我对Linux的理解加深了。 然而,80端口绑定长期以来一直是现实业务环境中的一个问题,研究和分析已经意识到了各种可能性。 以后可能会有“茴香豆系列”补充说明:)
重启51K8s特别分享
时间:2019年1月4日 周日 21:00- 22 : 00
共享导师:GY先生
他有10年的一线软件开发经验,曾在传统安全公司工作过。与多家互联网公司合作。 出于安全原因开发方面,开发过Linux防火墙、Web应用防火墙、Linux安全内核强化、基于大规模流量的Web安全威胁分析等项目。 我在互联网公司工作时,基于DPDK高性能网络开发框架开发了全流量网络。 基于Sflow的流量分析平台、网络流量分析平台、基于Golang开发的SmartDNS等。 开发语言是不是也是从C->python->golang的转换过程?目前从事基于K8S和Docker的私有云平台建设研发。 他在Linux系统开发、网络开发和项目管理方面拥有丰富的经验。 如今,我们 90% 以上的开发工作都使用 Golang。 Golang 是一种简单、高效、强大且灵活的编程语言。
加入方式:添加助理微信:18310139238,注:打开课程,加入直播分享群,与老师互动。
评论前必须登录!
注册