2. 部署三层应用: a. 前端层:Deployment blog-frontend(nginx:alpine,2 副本) ClusterIP Service frontend-svc b. API 层:Deployment blog-api(httpd:alpine,3 副本) ClusterIP Service api-svc c. 数据库层:Pod blog-db(redis:7-alpine) ClusterIP Service db-svc
4. 配置 NetworkPolicy: a. 默认拒绝所有入站流量 b. frontend-svc → api-svc:80 c. api-svc → db-svc:6379 d. Ingress Controller(ingress-nginx 命名空间)→ frontend-svc:80 e. 所有 Pod → CoreDNS UDP 53
5. 验证: - 外部可访问 http://<NodeIP>:30080/ 和 /api - 前端能访问 API - API 能访问 DB - 前端**不能**直接访问 DB - DB **不能**访问外网
2. 放行规则: a. web → api:8080(前端调用 API) b. api → db:5432(API 调用数据库) c. 所有 Pod → CoreDNS(UDP 53,kube-system 命名空间) d. web 允许来自 Ingress Controller 命名空间的入站(标签 app=ingress-nginx)
3. 验证: - web 可以访问 api:8080 ✅ - api 可以访问 db:5432 ✅ - web 无法直接访问 db:5432 ❌(应被拒绝) - api 无法访问外部网络 ❌(应被拒绝)
# 故障 1:删除 Pod(验证自愈) kubectl get pod -n microshop -l app=shop-backend POD_NAME=$(kubectl get pod -n microshop -l app=shop-backend -o name | head -1) kubectl delete $POD_NAME -n microshop kubectl get pod -n microshop -l app=shop-backend -w # 观察:旧 Pod Terminating,新 Pod 自动创建并 Running
# 故障 2:杀掉容器进程(验证 livenessProbe) BACKEND_POD=$(kubectl get pod -n microshop -l app=shop-backend -o name | head -1) kubectl exec$BACKEND_POD -n microshop -- nginx -s stop # 预期:livenessProbe 失败 → 容器重启 kubectl get $BACKEND_POD -n microshop -w # RESTARTS 列递增
# 2. 多次请求验证负载均衡效果 kubectl run lb-client --image=busybox:1.36 --rm -it --restart=Never -- \ sh -c 'for i in $(seq 1 10); do wget -q -O- http://lb-test:8080; echo; done' # 输出应分布在不同 Pod