📘 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 官方:StatefulSethttps://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
Kubernetes 官方:PV/PVChttps://kubernetes.io/docs/concepts/storage/persistent-volumes/
CKA 模拟题https://killer.sh