
1) 【一句话结论】
K8s通过Horizontal Pod Autoscaler(HPA)根据资源指标(如CPU利用率)动态调整Pod副本数实现弹性伸缩;通过NetworkPolicy结合标签选择器定义流量规则(允许/拒绝),保障容器间通信安全。
2) 【原理/概念讲解】
老师来解释下核心概念:
app=frontend)匹配流量,简单高效,无需额外代理。类比就像“教室进出规则”:每个班级(服务)有自己的进出规则(NetworkPolicy),只有允许的班级(服务)可以进入,其他不行。3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| HPA(Horizontal Pod Autoscaler) | 根据CPU/内存等指标自动调整Pod副本数 | 仅水平扩缩容,垂直资源调整需配合其他工具 | 负载敏感的应用(如Web服务、计算密集型任务) | 需准确监控指标,避免误判(如CPU vs 内存) |
| VPA(Vertical Pod Autoscaler) | 根据CPU/内存等指标自动调整单个Pod的资源请求 | 仅垂直调整资源,不改变副本数 | 资源利用率波动大的应用(如数据库) | 需考虑资源限制,避免过度分配 |
| NetworkPolicy | K8s原生资源,定义Pod间的流量规则(允许/拒绝) | 基于标签选择器,简单高效,无额外代理 | 基础网络隔离场景(如微服务间通信) | 规则复杂度限制(不支持复杂流量控制,如会话保持) |
| Service Mesh(如Istio) | 通过Sidecar代理实现流量控制 | 提供丰富规则(如会话保持、熔断),支持复杂策略 | 高级流量控制场景(如灰度发布、故障注入) | 增加网络延迟,部署复杂 |
4) 【示例】
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector:
matchLabels:
app: backend
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
egress:
- to:
- podSelector:
matchLabels:
app: database
5) 【面试口播版答案】
“面试官您好,关于K8s实现弹性伸缩,核心是通过Horizontal Pod Autoscaler(HPA)根据CPU等资源指标动态调整Pod副本数。比如当系统负载升高时,HPA会自动增加Pod数量以分担压力,负载降低时减少副本数,保证资源利用率。同时,容器间通信安全方面,我们使用NetworkPolicy结合标签选择器定义流量规则,比如允许前端服务的Pod访问后端服务的Pod,拒绝其他流量,这样既能实现隔离又能保障通信安全。具体来说,通过定义NetworkPolicy资源,指定允许的源Pod(如app=frontend)和目标Pod(如app=backend),确保只有授权的容器间通信,避免未授权访问。”
6) 【追问清单】
7) 【常见坑/雷区】