跳到主要内容
约 7 分钟6 张卡

工作负载、Service 与集群网络

工作负载管理应用副本,Service 提供稳定的访问入口。本文负责工作负载选择、滚动更新和集群网络。

1. 面试核心​

先记住这几条,再读正文

2. 工作负载​

对象主要用途
Deployment管理可替换副本、滚动更新和版本回滚
StatefulSet提供稳定序号、网络身份及按模板创建的 PVC
DaemonSet在符合条件的节点上运行日志、网络等代理
Job执行到完成的任务
CronJob按计划创建 Job

StatefulSet 默认使用 OrderedReady 管理顺序。Parallel 策略可并行创建和删除 Pod。稳定身份有助于应用识别成员。数据库复制、选主和一致性仍由应用承担。

PVC 通过 StorageClass 可触发动态供应 PV。实际存储还取决于供应器和访问模式。StatefulSet 的卷保留行为由 PVC 保留策略决定。数据保留与应用备份应分别设计。

2.1 滚动更新与回滚​

ReplicaSet 维持副本数量。Deployment 在它之上管理 Pod 模板版本。修改模板会创建或复用对应的 ReplicaSet。

apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
selector:
matchLabels: {app: web}
strategy:
rollingUpdate: {maxSurge: 25%, maxUnavailable: 0}
template:
metadata:
labels: {app: web}
spec:
containers:
- name: web
image: registry.example.com/web:1.4.2
ports: [{containerPort: 8080}]
readinessProbe:
httpGet: {path: /ready, port: 8080}
resources:
requests: {cpu: 250m, memory: 256Mi}
limits: {memory: 512Mi}

3 个副本的 25% maxSurge 向上取整为 1。maxUnavailable 为 0,要求维持 3 个可用副本。新副本未就绪时,滚动更新会停住。终止中的 Pod 仍占资源,应额外预留容量。

kubectl rollout status deployment/web 检查进展。progressDeadlineSeconds 超时会记录进展失败。Deployment 控制器不会因此自动回滚。kubectl rollout undo deployment/web 可恢复保留的模板版本。外部配置、数据库迁移和业务数据需单独恢复。

2.2 配置更新​

ConfigMap 保存普通配置,Secret 保存敏感配置。安全边界见 Kubernetes 架构。

环境变量在容器启动时注入。更新对象后,已有进程的环境变量保持原值。卷投射文件会经 kubelet 更新传播。应用还需重新读取或重载配置。subPath 挂载不会接收此类自动更新。

需要确定切换时点时,可使用版本化配置。修改 Pod 模板引用,再触发滚动更新。

3. Service 与流量入口​

类型或模式行为
ClusterIP分配集群虚拟 IP,供内部访问
NodePort在节点地址的指定端口提供入口
LoadBalancer请求负载均衡器实现提供外部入口
ExternalNameDNS 返回配置的 CNAME
HeadlessclusterIP: None,通过 DNS 提供端点地址

带选择器的 Service 由控制器维护 EndpointSlice。端点包含地址、端口和 ready 等条件。代理根据这些条件选择后端。无选择器的 Service 可由使用者维护端点。

CoreDNS 为 Service 提供名称解析。默认集群域为 cluster.local,部署可更改。kubectl port-forward svc/web 8080:80 选择后端 Pod 建立调试通道。它不经过 ClusterIP 的常规转发路径。

Ingress 描述 HTTP 域名和路径路由,需要控制器执行。Gateway API 用 GatewayClass、Gateway 和路由对象分工。Gateway API 同样需要具体实现。

3.1 外部流量策略​

externalTrafficPolicy: Cluster 可选择集群内后端。Local 只选择当前节点的本地后端。NodePort 等外部路径使用 Local 可保留客户端源 IP。

没有本地后端的节点无法按 Local 正常转发。外部负载均衡器需正确检查节点健康。副本分布不均时,各节点流量也会不均。Local 需要在源地址、可用性和分布之间取舍。

4. 集群网络​

普通 Pod 网络要求跨节点直接寻址。NetworkPolicy 可进一步限制允许的连接。hostNetwork Pod 则共享节点网络。

路径实现方式
同一 Pod通过共享网络空间与 localhost 通信
同一节点可通过网桥、主机路由或 eBPF 转发
跨节点通过封装隧道或可达的 Pod 网段路由
Service先选择后端,再经 Pod 网络送达
外部入口由负载均衡器和网关转入集群

Flannel 支持 VXLAN 和 host-gw 等后端。Calico 支持路由以及 IPIP、VXLAN 等封装。Cilium 可用 eBPF 实现网络和 Service 转发。具体路径应以插件及部署模式为准。

隧道要求节点间承载网络可达,并放行相应协议。封装额外占用 MTU。直接路由则要求底层能转发 Pod 网段。

Linux kube-proxy 可通过 iptables 或 IPVS 实现转发。IPVS 将 Service VIP 绑定到虚拟接口。因此,VIP 的具体落点取决于代理模式。

排查从源 Pod 路由开始,再看节点与目标 Pod。沿途检查策略、防火墙、隧道、MTU 和连接跟踪。两端抓包用于确认丢失位置。

5. NetworkPolicy​

NetworkPolicy 按 Pod、命名空间和网段选择流量。网络插件必须支持策略执行。

某方向没有选择该 Pod 的策略时,该方向默认放行。策略选中 Pod 并声明该方向后,该方向进入隔离。所有匹配策略允许的流量取并集。

连接需同时满足源端 egress 和目标端 ingress 规则。允许出站 DNS 时,需按部署开放 UDP 和 TCP 53。策略控制连接边界,HTTP 路径授权需由应用或网关完成。

6 · 面试题卡片​

本页题目与参考回答

6.1 Deployment、StatefulSet 和 DaemonSet 有什么区别?Deployment 和 ReplicaSet 是什么关系?​

考察重点

  • 三类工作负载在身份、存储、分布上的区别和适用场景。
  • Deployment 通过多个 ReplicaSet 实现滚动更新和回滚;清单的结构。

相关内容:工作负载。

参考回答

Deployment 管理可替换副本,StatefulSet 保留稳定身份。

StatefulSet 可按卷模板为副本配置独立 PVC。数据复制与选主仍由应用完成。DaemonSet 在符合条件的节点运行代理。

ReplicaSet 维持数量,Deployment 管理模板版本。滚动更新受 maxSurge 和 maxUnavailable 约束。回滚恢复历史 Pod 模板。外部配置和数据库数据需单独处理。

6.2 Service 有哪些类型?Service 是怎样把流量转发到 Pod 的?Ingress 和 Service、Nginx 是什么关系?​

考察重点

  • 各类型的访问方式和适用场景;Headless Service。
  • EndpointSlice、kube-proxy、CoreDNS 的分工;Ingress 规则与控制器;Gateway API。

相关内容:Service 与流量入口、Linux 网络排查。

参考回答

Service 提供后端发现和访问方式,Ingress 定义七层路由,Nginx 可作为实现这些路由的控制器所使用的代理。

Service 有 ClusterIP、NodePort、LoadBalancer 和 ExternalName 四种类型。Headless 模式不分配 ClusterIP,其 DNS 可返回端点地址。控制器维护 EndpointSlice,Service 代理按端点条件转发,CoreDNS 负责解析。

Ingress 规则需要控制器执行;Gateway API 将网关与路由拆为独立对象。port-forward 则经 API 通道访问选中的 Pod,不经过普通 Service 转发路径。

6.3 Kubernetes 中 Pod 之间怎样通信?跨节点通信是怎样实现的?Flannel、Calico 和 kube-proxy 有什么区别?​

考察重点

  • 网络模型的要求;同 Pod、同节点、跨节点三种路径。
  • 隧道与路由两种方式的取舍;CNI 与 kube-proxy 的分工。

相关内容:集群网络、Service 与流量入口。

参考回答

Pod 网络由 CNI 等网络实现建立。

Pod 内容器用 localhost 通信。同节点路径可用网桥、路由或 eBPF。跨节点路径可用隧道或直接路由。

Flannel 支持 VXLAN、host-gw 等模式。Calico 支持路由、IPIP 与 VXLAN。隧道要求承载网络可达,并需要合适的 MTU。直接路由要求底层能转发 Pod 网段。

Service 代理负责虚拟地址到后端的选择与转发。它可由 kube-proxy 或网络插件实现。故障时按实际数据路径检查策略、路由和抓包。

6.4 Deployment 更新卡住会自动回滚吗?ConfigMap 更新何时生效?​

考察重点:滚动参数、进展条件与配置传播。

相关内容:滚动更新与回滚、配置更新。

参考回答

进展超时会记录失败条件,控制器不会自动回滚。

需修复原因或执行 rollout undo。环境变量在容器启动时固定。投射文件经 kubelet 更新后,应用仍需重新读取。subPath 挂载不会自动接收更新。回滚模板也不会撤销数据库迁移。

6.5 NetworkPolicy 如何决定 Pod 能否通信?多条策略怎样合并?​

考察重点:双向许可、默认隔离与策略并集。

相关内容:NetworkPolicy。

参考回答

多条策略的允许规则取并集。

连接需满足源端 egress 和目标端 ingress。某方向被策略选中后,只放行规则允许的流量。策略生效还要求网络插件支持。默认拒绝出站后,还需按部署放行 DNS。

6.6 externalTrafficPolicy 设置为 Local 有什么收益和代价?​

考察重点:源地址、本地端点与节点负载。

相关内容:外部流量策略。

参考回答

Local 只使用节点本地后端。

NodePort 等外部路径可因此保留客户端源 IP。没有本地后端的节点无法正常承接该流量。负载均衡器需检查节点健康,副本也要合理分布。

7. 参考资料​