📘 Day 26:赛题模拟 4-5
🎯 今日目标
完成 2 套进阶赛题,每套限时 110 分钟,覆盖网络 + 安全 + 调度。
🏆 赛题 4:网络与安全加固(110 分钟)
【场景】搭建一个安全的微服务系统,实现网络隔离和精细权限控制。
【操作要求】(总分 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 分钟)
【场景】设计多租户 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 | 查看集群事件 | 排错必用 |
📚 参考来源
| 来源 | 链接 / 说明 |
|---|---|
| Kubernetes 官方:kubectl 速查表 | https://kubernetes.io/docs/reference/kubectl/quick-reference/ |
| Kubernetes 官方:StatefulSet | https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/ |
| Kubernetes 官方:PV/PVC | https://kubernetes.io/docs/concepts/storage/persistent-volumes/ |
| CKA 模拟题 | https://killer.sh |