重新部署tomcat-service

# tomcat-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  labels:
    app: tomcat-service
spec:
#  type: NodePort  注释type和nodePort即可。
  selector:
    app: tomcat-cluster
  ports:
  - port: 8000
    targetPort: 8080
#    nodePort: 32500

查看tomcat-service

[bigcat@master k8s]$ kubectl describe service tomcat-service
Name:              tomcat-service
Namespace:         default
Labels:            app=tomcat-service
Annotations:       <none>
Selector:          app=tomcat-cluster
Type:              ClusterIP
IP:                10.97.32.127
Port:              <unset>  8000/TCP
TargetPort:        8080/TCP
Endpoints:         10.244.1.11:8080,10.244.2.8:8080
Session Affinity:  None
Events:            <none>

通过curl 10.97.32.127:8000可以在master上看到tomcat返回默认页面。

生成/usr/local/data/www-data/test/index.jsp

<%=request.getLocalAddr()%>  # 显示对应的ip地址

发现一个坑

  • node1/node2重启以后/mnt指向了/hgfs,而不是master的/usr/local/data/www-data,所以tomcat容器启动以后,webapps指向也不正确。
  • 手动设置/mnt映射 sudo mount 192.168.121.150:/usr/local/data/www-data /mnt
  • 重建tomcat deployment,这样tomcat容器内webapps才能指向正确路径

运行curl 10.97.32.127:8000/test/index.jsp,就返回pod对应的ip地址,说明请求被发送到了不同的pod。

安装端口转发工具Rinetd,实现service服务对外暴露

# 下载rinetd.tar.gz,解开以后进入rinetd目录
sed -i 's/65536/65535/g' rinetd.c   # 改端口映射范围
sudo make & sudo make install       # 编译&安装

vi /etc/rinetd.conf 加入地址映射
---------------------------------
0.0.0.0 8000 10.97.32.127 8000  #

# 加载conf
rinetd -c /etc/rinetd.conf

使用netstat -tulpn验证8000端口是否处于listen状态

现在可以通过http://192.168.121.150:8000/test/index.jsp访问到tomcat-service了。
不过我这里通过浏览器只能刷出一台pod的地址,用curl命令倒没有问题。