Day 26 - 赛题模拟 4-5

📘 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 查看集群事件 排错必用

📚 参考来源

来源 链接 / 说明
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