Kubernetes 项目 1、Nginx 代理 + 2 x Tomcat Web 应用

                                  

                                  

                                  

                                  

                                  

                                  

项目要求

使用deploy部署3个pod,要求如下:

1、- 两个pod提供tomcat服务, 一个pod提供nginx代理tomcat;

2、- 删除tomcat,或者nginx的Pod保证数据不丢失;

3、- 要求windows通过nginx能够访问到tomcat业务;

                                  

业务架构

技术解析:

①nginx 使用反向代理 tomcat

②3 个 pod 都要使用 NFS

③tomcat 之间使用 ClusterIP 网络

④ nginx 使用NodePort 网络

                                  

技术细节


1、将 tomcat 与 nginx 推送到 harbor 仓库

docker push harbor250.oldboyedu.com/greytracks/tomcat:9.0.87-jdk17
docker push harbor250.oldboyedu.com/greytracks/xiuxian:v1.0

                                  


2、准备数据目录

mkdir -pv /data/nfs-server/lb/{tomcat01,tomcat02,nginx}

                                  

3、部署 NFS

#K8S 所有节点 安装 NFS 服务
apt -y install nfs-kernel-server	

#nfs  server 端 即 master 配置共享目录 并配置 共享权限
mkdir -pv /data/nfs-server 
vim /etc/exports 
/data/nfs-server         *(rw,no_root_squash)

#开机自启并重启服务
systemctl enable --now nfs-server
systemctl restart nfs-server

#验证是否生效
exportfs 

                                 

4、编写资源清单

vim 01-deploy-tomcat-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-tomcat01
spec:
  replicas: 1
  selector:
    matchLabels:
      apps: tomcat01
  template:
    metadata:
      labels:
        apps: tomcat01
    spec:
      volumes:
      - name: data
        nfs: 
          server: 10.0.0.231
          path: /data/nfs-server/lb/tomcat01
      containers:
      - name: tomcat01
        image: harbor250.oldboyedu.com/greytracks/tomcat:9.0.87-jdk17
        volumeMounts:
        - name: data
          mountPath: /usr/local/tomcat/webapps/ROOT

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-tomcat02
spec:
  replicas: 1
  selector:
    matchLabels:
      apps: tomcat02
  template:
    metadata:
      labels:
        apps: tomcat02
    spec:
      volumes:
      - name: data
        nfs: 
          server: 10.0.0.231
          path: /data/nfs-server/lb/tomcat02
      containers:
      - name: tomcat02
        image: harbor250.oldboyedu.com/greytracks/tomcat:9.0.87-jdk17
        volumeMounts:
        - name: data
          mountPath: /usr/local/tomcat/webapps/ROOT

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      apps: nginx
  template:
    metadata:
      labels:
        apps: nginx
    spec:
      volumes:
      - name: data
        nfs: 
          server: 10.0.0.231
          path: /data/nfs-server/lb/nginx
      containers:
      - name: xiuxian
        image: harbor250.oldboyedu.com/greytracks/xiuxian:v1.0
        volumeMounts:
        - name: data
          mountPath: /etc/nginx/conf.d

                                  


5、准备 tomcat 测试数据

kubectl exec -it deploy-tomcat01-6fb8b5888d-kfsws -- bash
echo tomcat01 > webapps/ROOT/index.html 

kubectl exec -it deploy-tomcat02-694ff867f4-l25wm -- bash
echo tomcat02 > webapps/ROOT/index.html

                                  


6、创建 service 网络 关联nginx和tomcat

vim 02-svc-tomcat-nginx.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-lb
spec:
  type: NodePort
  selector:
    apps: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30080

---

apiVersion: v1
kind: Service
metadata:
  name: svc-tomcat01
spec:
  type: ClusterIP
  selector:
    apps: tomcat01
  ports:
    - protocol: TCP
      port: 8080

---

apiVersion: v1
kind: Service
metadata:
  name: svc-tomcat02
spec:
  type: ClusterIP
  selector:
    apps: tomcat02
  ports:
    - protocol: TCP
      port: 8080

测试验证 
kubectl get -f 02-svc-tomcat-nginx.yaml

#NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
#svc-lb         NodePort    10.200.64.121   <none>        80:30080/TCP   13s
#svc-tomcat01   ClusterIP   10.200.95.254   <none>        8080/TCP       13s
#svc-tomcat02   ClusterIP   10.200.209.96   <none>        8080/TCP       13s

                                  


7、 修改 nginx 配置文件

kubectl exec -it deploy-nginx-846784cc45-tnvbr -- sh

cat > /etc/nginx/conf.d/default.conf <<EOF
upstream tomcat {
   server svc-tomcat01:8080;
   server svc-tomcat02:8080;
}

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
 
    location / {
        proxy_pass http://tomcat;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
}
EOF

nginx -t 
#nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
#nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload
2025/07/15 07:29:22 [notice] 33#33: signal process started

                                  


8、 测试验证

kubectl get svc
#NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
#kubernetes     ClusterIP   10.200.0.1      <none>        443/TCP        15d
#svc-lb         NodePort    10.200.64.121   <none>        80:30080/TCP   10m
#svc-tomcat01   ClusterIP   10.200.95.254   <none>        8080/TCP       10m
#svc-tomcat02   ClusterIP   10.200.209.96   <none>        8080/TCP       10m

for i in `seq 10`; do curl 10.200.64.121;done
#tomcat01
#tomcat02
#tomcat01
#tomcat02
#tomcat01
#tomcat02
#tomcat01
#tomcat02
#tomcat01
#tomcat02

访问  http://10.0.0.231:30080/


大功告成!                                  

上一篇
下一篇