📘 Day 26:赛题模拟 4-5 🎯 今日目标 完成 2 套进阶赛题,每套限时 110 分钟 ,覆盖网络 + 安全 + 调度。
🏆 赛题 4:网络与安全加固(110 分钟) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 【场景】搭建一个安全的微服务系统,实现网络隔离和精细权限控制。 【操作要求】(总分 100 分) Part A: 三层网络(30 分) 1. 创建命名空间 net-secure 2. 部署三层应用: a. frontend: Deployment web-ui(nginx:alpine, 2副本) ClusterIP Service frontend-svc b. backend: Deployment api-gateway(httpd:alpine, 3副本) ClusterIP Service backend-svc c. database: Pod data-db(redis:7-alpine) ClusterIP Service db-svc 3. 配置 Ingress(NGINX Controller 已安装): - / → frontend-svc:80 - /api → backend-svc:80 - rewrite-target: / Part B: NetworkPolicy(30 分) 4. 创建 Deny-All 默认策略(拒绝所有 ingress) 5. 放行规则: a. Ingress Controller → frontend-svc:80 b. frontend → backend-svc:80 c. backend → db-svc:6379 d. 所有 Pod → CoreDNS(UDP 53) 6. 验证: - 外部可访问 frontend - frontend 可访问 backend - backend 可访问 db - frontend 不可直接访问 db(跨层访问被阻止) Part C: RBAC(25 分) 7. 创建 3 个 SA:sa-viewer, sa-dev, sa-admin 8. 创建 Role viewer-role:pods/deployments/svc get/list/watch 9. 创建 Role dev-role:viewer + create/update + pods/log 10. 创建 Role admin-role:全部权限 11. 分别绑定到对应 SA 12. 验证权限差异 Part D: SecurityContext(15 分) 13. 修改 backend Deployment: - runAsUser: 1001 - runAsNonRoot: true - allowPrivilegeEscalation: false - drop ALL capabilities 【验证清单】 □ Ingress 路由正常工作 □ NetworkPolicy 隔离有效 □ RBAC 权限分级正确 □ backend 以非 root 用户运行
🏆 赛题 5:调度与弹性伸缩(110 分钟) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 【场景】设计多租户 K8s 平台的调度和资源管理策略。 【操作要求】(总分 100 分) Part A: 节点池划分(20 分) 1. 给节点打标签: - k8s-node1: pool=frontend, zone=az1 - k8s-node2: pool=backend, zone=az1 - k8s-master: pool=management, zone=az1(移除 NoSchedule 污点用于测试) 2. 给 k8s-node1 添加污点 frontend=true:NoSchedule (只有明确声明 toleration 的 Pod 才能调度到 frontend 节点) Part B: 调度策略实战(30 分) 3. 创建 Deployment frontend-app(3 副本,nginx:alpine): - nodeAffinity (required): pool=frontend - toleration: frontend=true:NoSchedule - podAntiAffinity (required): 按 hostname 分散 4. 创建 Deployment backend-app(2 副本,httpd:alpine): - nodeAffinity (required): pool=backend - topologySpreadConstraints: 按 zone 均匀分布,maxSkew=1 5. 观察调度结果并解释 Part C: 资源管理(30 分) 6. 创建命名空间 project-x 7. ResourceQuota project-x-quota: - requests.cpu: 2 - requests.memory: 4Gi - pods: 10 8. LimitRange project-x-limits: - 默认 requests cpu=100m, mem=128Mi - 默认 limits cpu=500m, mem=512Mi - max cpu=1, max mem=1Gi 9. 创建 Deployment quota-test(3 副本): - requests cpu=600m, mem=256Mi(验证是否能创建成功) - 如果成功,尝试创建第 2 个相同 Deployment Part D: HPA(20 分) 10. 创建 Deployment hpa-app(1 副本,nginx:alpine): - requests cpu=50m 11. 配置 HPA: - 目标 CPU 50% - min 1, max 6 12. 生成负载或手动验证 HPA 【验证清单】 □ Pod 按节点标签正确分布 □ frontend-app 有 toleration □ ResourceQuota 生效 □ HPA 显示目标
📋 命令速查 该赛题涉及的核心命令速查:
命令
功能
注解
kubectl create deploy <name> --image=<image>
创建 Deployment
快速部署应用
kubectl expose deploy <name> --type=NodePort --port=<p> --target-port=<tp>
创建 NodePort Service
外部可通过 节点IP:NodePort 访问
kubectl set image deploy/<name> <container>=<new-image>
更新容器镜像
触发滚动更新
kubectl rollout status deploy/<name>
查看更新进度
等待更新完成
kubectl rollout history deploy/<name>
查看部署历史
确认 revision 数
kubectl rollout undo deploy/<name>
回滚
赛题高频操作
kubectl get pv,pvc
查看存储绑定状态
确认 PVC 是否 Bound
kubectl create cm <name> --from-file=<file>
从文件创建 ConfigMap
配置文件注入
kubectl describe pod <pod>
Pod 详情
查看挂载卷/环境变量/事件
kubectl exec <pod> -- cat <path>
验证挂载内容
确认配置是否正确注入
kubectl get events --sort-by=.lastTimestamp
查看集群事件
排错必用
📚 参考来源