K8S安全问题

第 1 套:K8s 安全(RBAC/ServiceAccount/ 准入控制)口述面试题

Q1:RBAC 是什么?

A:Role-Based Access Control,基于角色访问控制。用来控制用户 / ServiceAccount 对 K8s 资源的增删改查权限。核心四组件:Role、ClusterRole、RoleBinding、ClusterRoleBinding。

  • Role:命名空间内权限;ClusterRole:集群全局权限。
  • RoleBinding:命名空间内绑定;ClusterRoleBinding:集群级别绑定。

Q2:ServiceAccount 是什么?和 User 账号区别

A:ServiceAccount 是Pod 内部使用的账号,属于命名空间资源,自动生成 secret 存放 token。
User 是给人使用;ServiceAccount 给 Pod 程序调用 apiserver。默认 default SA。

Q3:为什么不建议用 default ServiceAccount?

A:default SA 默认有基础权限,生产建议新建最小权限 SA,遵循最小权限原则。不需要访问 apiserver 的 Pod 直接禁用自动挂载 SA token。

Q4:什么是准入控制器 Admission Controller?

A:apiserver 在认证鉴权之后、写入 etcd 之前执行的拦截逻辑,分两类:

  1. 变更准入(Mutating):修改请求内容,比如自动注入 sidecar
  2. 校验准入(Validating):校验配置,不符合直接拒绝,比如 Pod 安全策略校验

Q5:PodSecurity(PS)介绍,替代旧的 PodSecurityPolicy

A:K8s 原生 Pod 安全标准,三个级别:

  • Privileged:无限制,最高权限
  • Baseline:禁止高危特权配置,生产基础推荐
  • Restricted:严格限制,最小权限,安全要求高业务
    通过命名空间打标签启用,替代废弃的 PSP。

Q6:Pod 安全常见风险点

A:特权容器 privileged、挂载宿主机路径 hostPath、使用 root 用户运行容器、capabilities 权限过多。

Q7:证书体系在 K8s 作用?

A:集群组件间 TLS 通信加密。apiserver 证书、kubelet 证书、etcd 证书;证书过期会导致集群组件通信失败。

Q8:RBAC 排查思路,权限不足报错

A:

  1. 确认账号:用户 / Pod 的 ServiceAccount
  2. 查 Role/ClusterRole,确认资源 verb 权限(get/list/watch/create 等)
  3. 检查 Binding 绑定是否正确,命名空间是否匹配

第 2 套:K8s 资源管理、Limit/Request、HPA、VPA

Q1:requests、limits 作用,OOM 行为

A:
requests:调度器判断节点资源是否充足的依据;
limits:资源硬上限。
CPU 超限:容器被限流;内存超限:容器直接 OOM kill。

Q2:QoS 三种类别,驱逐顺序(回顾 + 深化)

A:

  1. Guaranteed:requests=limits,优先级最高,最后驱逐
  2. Burstable:仅配置 requests,中间
  3. BestEffort:无 requests/limits,最先被驱逐

Q3:HPA 是什么?

A:Horizontal Pod Autoscaler,水平扩缩容,增减 Pod 副本数。基于指标(CPU / 内存 / 自定义 metrics)自动扩缩。
HPA 控制器循环查询 metrics-server 获取指标,调整 Deployment 副本。

Q4:HPA 稳定窗口(stabilizationWindowSeconds)作用

A:防止指标瞬间抖动导致频繁扩缩容,缩容有冷却窗口,避免震荡。

Q5:VPA 是什么?和 HPA 区别

A:Vertical Pod Autoscaler,垂直扩缩容,调整 Pod 内容器的 CPU、内存 requests/limits,不改变副本数量。
HPA:变 Pod 数量;VPA:改单个 Pod 资源规格。

Q6:LimitRange 资源限制

A:命名空间级别,给 Pod / 容器设置默认 requests/limits,限制单 Pod 最大最小资源。

Q7:ResourceQuota 资源配额

A:命名空间级资源总量限制,限制该 ns 下 Pod、PVC、CPU 内存总使用量,防止资源耗尽。

Q8:HPA 不触发扩容排查

A:metrics-server 是否正常;指标是否采集成功;HPA 目标阈值配置;最小 / 最大副本限制。


第 3 套:K8s 日志、监控、事件、Metrics Server

Q1:K8s 日志采集方案,容器日志原理

A:容器日志输出到 stdout/stderr,kubelet 写入宿主机日志文件。
采集方案:

  1. Node 级采集:fluentd/filebeat daemonset,采集宿主机容器日志
  2. Sidecar 采集:Pod 内边车读取 emptyDir 日志文件
    日志建议输出 stdout,避免日志落盘到容器内。

Q2:Metrics Server 作用

A:集群内置指标采集组件,收集节点、Pod 的 CPU / 内存指标;kubectl top依赖它,HPA 也依赖。只采集核心资源指标,不是完整监控。

Q3:Prometheus + K8s 监控方案

A:Prometheus 主动拉取指标。
采集目标:kube-state-metrics(K8s 资源状态指标)、node-exporter(宿主机硬件)、业务容器指标。
服务发现:Prometheus 基于 K8s SD 自动发现 Pod/Service。

Q4:Event 事件是什么?

A:集群事件,记录资源变更、警告,如 Pod 调度失败、镜像拉取失败。kubectl get events。事件有保存期限,不做长期存储,生产需要持久存储。

Q5:日志级别:容器日志轮转怎么处理?

A:kubelet 自带日志轮转,限制日志文件大小和数量,防止宿主机磁盘被日志打满。

Q6:kube-state-metrics 作用

A:不采集监控指标,把 K8s 资源对象状态转换成 Prometheus 指标(副本数、Pod 状态、PVC 状态等)。

Q7:监控排查:kubectl top pod 无数据

A:检查 metrics-server pod 是否 running;证书;网络;metrics-server 访问 kubelet 权限。

Q8:日志常见问题:日志丢失

A:容器频繁重启日志轮转;stdout 输出缓冲;磁盘满;日志采集程序崩溃。


第 4 套:K8s 升级、备份恢复、集群维护

Q1:K8s 集群升级思路,控制面优先还是节点优先?

A:先升级控制平面组件,再逐台升级 worker 节点,滚动升级,业务不中断。版本只能小版本递进升级,不能跨大版本直接跳。

Q2:etcd 备份和恢复怎么做?

A:备份:etcdctl snapshot save;恢复:停止 etcd,清空数据目录,用快照恢复。
要点:定期备份;备份时建议集群只读;恢复会覆盖数据。etcd 是集群唯一数据源。

Q3:节点维护,驱逐节点业务( cordon /drain )

A:
kubectl cordon node:标记节点不可调度,禁止新 Pod 调度上来,已有 Pod 继续运行。
kubectl drain node:驱逐节点上 Pod,Pod 调度到其他可用节点;维护 / 升级节点使用。

Q4:集群故障分级

A:

  • 单 master 故障:HA 集群自动选主,业务不受影响
  • etcd 集群半数节点宕机:集群不可写,只读,严重故障
  • 多 worker 节点宕机:Pod 漂移,依赖副本策略

Q5:什么是 kubeadm?

A:官方集群部署工具,简化 K8s 安装,生成证书、静态 pod 部署控制平面组件。

Q6:集群备份除了 etcd 还有什么?

A:etcd 包含全部集群资源。如果业务有持久数据,还需要单独备份存储 PV 数据,etcd 不保存业务数据。

Q7:节点恢复流程

A:cordon → drain → 维护操作 → uncordon。

Q8:升级风险

A:API 废弃字段、CRD 版本不兼容、存储插件、CNI 插件版本不匹配。升级前备份 etcd,环境预演。


第 5 套:K8s 自定义资源 CRD、Operator、Helm

Q1:CRD 是什么?

A:CustomResourceDefinition,自定义资源定义。扩展 K8s API,让你可以新增自定义资源类型,原生 K8s 不提供的资源。CRD 是集群级别资源。

Q2:Operator 是什么?

A:基于 CRD + 自定义控制器。把运维逻辑写进控制器,自动管理复杂有状态应用(数据库、消息队列)。
原理:控制器持续调谐自定义资源的期望状态。把人工运维自动化。

Q3:Helm 是什么?

A:K8s 包管理工具。Helm Chart 是 yaml 模板包,一键部署应用,支持参数渲染、版本管理、回滚。
Helm3 移除了 Tiller,客户端直接调用 apiserver。

Q4:Helm 核心概念:Chart / Release / Repository

A:
Chart:应用模板包;Release:Chart 安装到集群的实例;Repo:Chart 仓库。

Q5:Operator vs Helm 区别

A:
Helm:模板渲染工具,一次性部署 / 升级 yaml,没有持续运维能力。
Operator:持续运行控制器,自动处理故障、备份、扩缩容、版本迁移,适合有状态服务。

Q6:CRD 使用场景

A:封装业务、中间件资源定义;监控、存储、服务网格插件大量使用 CRD。

Q7:Helm 模板注意事项

A:避免硬编码;使用 values.yaml 传参;注意 yaml 缩进;版本管理。

Q8:Helm 升级失败怎么处理

A:查看 release 状态,helm rollback 回滚;检查模板渲染后的 yaml 是否合法;RBAC 权限、资源冲突。


第 6 套:K8s 服务网格 Istio(补充,你说再出 5 套,前面 5 套,这是第 5 套后续额外一套,总共 5+1)

Q1:Istio 是什么?

A:服务网格,在应用侧注入 Sidecar 代理(envoy),接管 Pod 进出流量。不用改业务代码,提供流量治理、可观测、安全。

Q2:Sidecar 模式原理

A:业务 Pod + Envoy 边车,所有流量经过 envoy 代理。控制平面 istiod 下发配置给 envoy。

Q3:Istio 核心能力

A:流量路由、灰度发布、熔断、重试、超时、mTLS 加密、遥测监控、限流。

Q4:Istio 控制面 istiod

A:新版 Istio 合并为 istiod 单体,包含 pilot、citadel、galley 等组件,下发配置给数据面 envoy。

Q5:mTLS 是什么?

A:Pod 之间双向 TLS 加密通信,istio 自动管理证书,业务无感知。

Q6:VirtualService 和 DestinationRule

A:
VirtualService:流量路由规则(域名、路径、版本分流)
DestinationRule:目标服务策略,如负载均衡、mTLS、熔断

Q7:注入 Sidecar 两种方式

A:命名空间自动注入(webhook 准入控制器);手动注入 yaml。

Q8:Istio 优缺点

A:优点:无侵入流量治理;缺点:增加网络延迟,资源开销,架构复杂度上升。

posted @ 2026-09-20 11:14  JacobJacob  阅读(13)  评论(0)    收藏  举报