k8s常见面试题2

news2025/2/7 17:22:17

k8s常见面试题2

  • 安全与权限
    • RBAC配置
    • 如何保护 Kubernetes 集群的 API Server?
    • 如何管理集群中的敏感信息(如密码、密钥)?
    • 如何限制容器的权限(如使用 SecurityContext)?
    • 如何防止容器逃逸(Container Escape)?
  • 存储管理
    • PV和 PVC的区别是什么?
    • 如何动态分配存储资源(StorageClass)?
    • 如何实现跨节点的共享存储?
  • 网络与服务发现
    • Service类型
    • 如何实现跨集群的服务发现?
    • 如何配置 Kubernetes 的网络策略(NetworkPolicy)
    • 如何实现外部流量访问集群内部服务
  • 架构设计
    • 如何优化 Kubernetes 集群的资源利用率?
    • 如何实现多租户的 Kubernetes 集群?
    • 如何设计跨地域的 Kubernetes 集群?
    • 高可用集群设计
  • 工具与生态
    • Helm用途
  • 场景题示例
    • 高并发微服务架构
    • 如何实现 Kubernetes 集群的自动化运维?
    • 如何应对 Kubernetes 集群的突发流量?
    • 如何设计一个跨云平台的 Kubernetes 集群?
  • 开放性问题
    • 遇到的最大挑战
    • 如何提升 Kubernetes 集群的安全性

安全与权限

RBAC配置

如何实现 Kubernetes 的 RBAC 权限控制?

  • 创建Role定义权限(如访问Pod、Service)。
  • 创建RoleBinding将Role绑定到用户/组。
  • 示例:授权用户读取Pod信息:
  ```yaml
  apiVersion: rbac.authorization.k8s.io/v1
  kind: Role
  metadata: {namespace: default, name: pod-reader}
  rules:
 - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "watch", "list"]

如何保护 Kubernetes 集群的 API Server?

  • 保护 API Server 需要启用 RBAC 限制权限
  • 配置身份认证(如 TLS、OIDC),开启 API 审计日志,禁用匿名访问
  • 并结合网络策略限制 API Server 访问来源。
kubectl create rolebinding user-binding --clusterrole=view --user=user@example.com --namespace=default  # 启用 RBAC(基于角色的访问控制)

启用 API Server 认证和授权

  • 使用 TLS 证书、OIDC(OpenID Connect)或 ServiceAccount 进行认证。
  • 配置 --authorization-mode=RBAC,Node 确保 API 请求经过权限检查。

开启 API Server 审计日志
通过 --audit-policy-file=/etc/kubernetes/audit-policy.yaml 开启审计

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: RequestResponse

限制匿名访问:禁用 --anonymous-auth,防止未授权请求访问 API Server。

启用网络策略(NetworkPolicy):限制 API Server 只能被特定 IP 或 Pod 访问。

如何管理集群中的敏感信息(如密码、密钥)?

  • 推荐使用 Kubernetes Secret 存储敏感数据,并启用加密存储或外部 KMS 保护 Secret,避免明文存储。
  • 同时,使用 RBAC 限制 Secret 访问权限。
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=pass123  #使用 Secret 存储 Base64 编码的敏感数据。

使用 envFrom 挂载 Secret

envFrom:
  - secretRef:
      name: db-secret

启用加密存储(EncryptionConfig)
通过 --encryption-provider-config=/etc/kubernetes/encryption-config.yaml 加密 Secret 数据。

kind: EncryptionConfig
resources:
  - resources: ["secrets"]
    providers:
      - aescbc:
          keys:
            - name: key1
              secret: <base64-encoded-secret>

最小化 Secret 访问权限:使用 RBAC 限制 Secret 访问

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: secret-reader
rules:
 - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get"]

如何限制容器的权限(如使用 SecurityContext)?

  • 使用 securityContext 限制容器权限,例如 runAsNonRoot 禁止 root 运行
  • privileged: false 防止特权模式
  • readOnlyRootFilesystem: true 只读根文件系统
  • 并最小化 Linux Capabilities。
securityContext:
  runAsUser: 1000
  runAsGroup: 3000
  allowPrivilegeEscalation: false    #运行非 root 用户
  privileged: false     #禁止特权模式(Privileged Mode)
  readOnlyRootFilesystem: true   #使用 readOnlyRootFilesystem
  capabilities:    #最小化 Linux Capabilities
    drop:
      - ALL  

使用 PodSecurityPolicy(PSP)或 PodSecurity Admission(PSA)
通过 PSP/PSA 统一限制容器权限:

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restricted
spec:
  privileged: false
  runAsUser:
    rule: MustRunAsNonRoot

如何防止容器逃逸(Container Escape)?

  • 防止容器逃逸需启用 seccomp 过滤系统调用
  • 禁止 hostPID、hostNetwork 访问宿主机资源,限制宿主机文件系统挂载
  • 并使用 AppArmor 或 SELinux 进行访问控制。

存储管理

PV和 PVC的区别是什么?

  • PV 是管理员预先配置的存储资源,表示物理存储资源(如 NFS、Ceph、EBS)。
  • PVC 是用户对存储的申请。由 Pod 请求存储,类似于云计算中的存储申请
  • 当 PVC 申请满足 PV 的条件时,Kubernetes 自动绑定 PV 和 PVC,Pod 通过 PVC 访问存储。

绑定关系

  • PVC 申请存储 → K8s 绑定可用 PV → Pod 使用 PVC
  • kubectl get pv / kubectl get pvc 查看绑定状态。

如何动态分配存储资源(StorageClass)?

  • StorageClass 允许 Kubernetes 动态创建 PV,无需管理员手动配置。
  • PVC 申请存储时,StorageClass 通过存储插件(如 AWS EBS、Ceph)自动创建 PV,并绑定 PVC。
  • StorageClass:动态创建PV(如按需创建云存储)。

如何实现跨节点的共享存储?

  • 可以使用 NFS、CephFS、GlusterFS 或 AWS EFS 等分布式存储系统
  • 并配置 ReadWriteMany (RWX) 模式
  • 使多个 Pod 在不同节点上共享同一个存储卷。

网络与服务发现

Service类型

Kubernetes 中的 Service 类型有哪些?各自的使用场景?

  • ClusterIP:默认类型,集群内部访问。
  • NodePort:通过节点端口暴露服务。
  • LoadBalancer:云平台提供外部负载均衡器。
  • ExternalName:通过CNAME指向外部服务。

如何实现跨集群的服务发现?

  • 实现跨集群的服务发现可以采用 Kubernetes 联邦(Federation)或多集群服务 API(MCS API)。
  • 联邦提供跨集群的统一管理和服务发现能力,而 MCS API 定义了一套轻量级的 API,实现服务的跨集群注册和发现

使用 Kubernetes 联邦(Federation):

  • 概念: Kubernetes 联邦提供了跨多个集群的统一管理和服务发现能力。
  • 实现: 通过在各个集群中部署联邦控制平面,实现资源的同步和服务的跨集群发现。
  • 优势: 提供自动配置 DNS 服务以及在所有集群后端上进行负载均衡的能力。

使用多集群服务 API(MCS API):

  • 概念: MCS API 定义了一套轻量级的 API,实现服务的跨集群注册和发现。
  • 实现: 通过在集群间导出和导入服务,使服务在多个集群间共享。
  • 优势: 能够像访问本地服务一样访问其他集群的服务。

如何配置 Kubernetes 的网络策略(NetworkPolicy)

  • 配置 NetworkPolicy 需要创建一个 YAML 文件,使用 podSelector 选择目标 Pod,并定义相应的 ingress 和/或 egress 规则。然后,通过 kubectl apply -f 命令将其应用到集群中,以控制 Pod 之间以及与外部的网络流量。

理解 NetworkPolicy:

  • 概念: NetworkPolicy 是一种资源对象,用于定义 Pod 之间以及 Pod 与外部之间的网络流量控制规则。
  • 作用: 通过指定规则,控制哪些流量可以进出特定的 Pod,从而提高集群的安全性。

配置步骤:

  • 定义策略: 创建 NetworkPolicy YAML 文件,指定 podSelector 选择目标 Pod,配置 ingress 和/或 egress 规则。
  • 应用策略: 使用 kubectl apply -f 命令将策略应用到集群中。

如何实现外部流量访问集群内部服务

  • 要使外部流量访问集群内部服务,可以使用 Service 的 NodePort 类型,将服务暴露在每个节点的特定端口上;
  • 在支持的云环境中,使用 LoadBalancer 类型,自动配置云提供商的负载均衡器;
  • 或者使用 Ingress 资源,定义 HTTP/HTTPS 路由规则,通过域名和路径将外部流量引导到内部服务。

架构设计

如何优化 Kubernetes 集群的资源利用率?

通过合理设置容器的资源请求和限制,结合自动水平扩缩容(HPA)和节点自动伸缩机制,并使用监控工具实时分析资源使用情况,可以有效优化 Kubernetes 集群的资源利用率

  • 合理设置资源请求和限制:为每个容器配置适当的 requests 和 limits,确保资源分配精确,避免资源浪费或争抢。
  • 使用自动水平扩缩容(HPA):根据应用负载,自动调整 Pod 数量,确保在高负载时扩展,低负载时收缩。
  • 节点自动伸缩:配置集群的节点自动伸缩,根据整体资源需求动态添加或移除节点。
  • 监控和分析:利用监控工具(如 Prometheus 和 Grafana)实时监测资源使用情况,识别瓶颈并进行优化。

如何实现多租户的 Kubernetes 集群?

可以通过为每个租户创建独立的命名空间,结合 RBAC 和网络策略实现资源和网络隔离。对于需要更强隔离的场景,可采用虚拟控制平面方案。此外,设置资源配额确保各租户公平使用资源。

  • 命名空间隔离:为每个租户创建独立的命名空间,结合 RBAC(基于角色的访问控制)和网络策略,确保资源和网络的隔离。
  • 虚拟控制平面:为每个租户提供独立的虚拟控制平面,实现更强的隔离和自主性。
  • 资源配额:为不同租户设置资源配额,确保资源的公平分配,防止单个租户过度消耗资源。

如何设计跨地域的 Kubernetes 集群?

通过在不同地域部署多个 Kubernetes 集群,结合服务网格或全球负载均衡器实现服务发现和流量管理,采用数据同步机制确保数据一致性,并使用多集群管理工具实现统一管理。

  • 多集群部署:在不同地域部署多个 Kubernetes 集群,确保本地化的高可用性和低延迟。
  • 服务发现和流量管理:使用服务网格(如 Istio)或全球负载均衡器,实现跨集群的服务发现和流量路由。
  • 数据同步:采用数据库的主从复制或数据同步机制,确保各地域间的数据一致性。
  • 统一管理:使用 Kubernetes 联邦(Federation)或多集群管理工具,实现跨集群的统一管理和配置。

高可用集群设计

如何设计高可用的 Kubernetes 集群?

  • 多Master节点,使用负载均衡(如HAProxy)暴露API Server。
  • etcd集群部署为奇数节点(3/5个),跨故障域分布。
  • Worker节点跨可用区(AZ)部署。

工具与生态

你使用过哪些 Kubernetes 相关的工具(如 Helm、Prometheus、Istio 等)?

Helm用途

  • Helm 是 Kubernetes 的包管理工具,通过定义 Chart 来描述应用的 Kubernetes 资源,提供应用的打包、安装、升级和回滚等功能,简化了应用的部署和管理。

常用命令:

helm install <release-name> <chart-name>  # 部署应用
helm upgrade --install                     # 更新或安装
helm rollback <release-name> <revision>    # 回滚

场景题示例

高并发微服务架构

如何设计一个支持高并发、高可用的微服务架构?

  • 使用DeploymentHPA自动扩缩容。
  • 通过**Service Mesh(如Istio)**管理流量(金丝雀发布、熔断)。
  • 数据库使用StatefulSet,搭配持久化存储。

如何实现 Kubernetes 集群的自动化运维?

通过使用基础设施即代码工具实现集群的自动化部署,采用 GitOps 工作流管理配置变更,利用 Operator 模式自动化应用运维,并结合监控与告警系统,全面实现 Kubernetes 集群的自动化运维。

  • 基础设施即代码(Infrastructure as Code,IaC):使用工具如 Terraform 或 Ansible 编写集群和相关资源的配置脚本,实现集群的自动化部署和管理。
  • GitOps 工作流:采用 GitOps 方法,将集群的声明性配置存储在版本控制系统中,通过持续集成/持续部署(CI/CD)管道自动应用配置更改。
  • Operator 模式:开发或使用现有的 Kubernetes Operator,自动管理复杂的应用程序和服务的生命周期,包括部署、升级和故障恢复。
  • 监控与告警:集成 Prometheus 和 Grafana 等监控工具,实时监测集群状态,并设置告警规则,及时响应异常情况。

如何应对 Kubernetes 集群的突发流量?

通过配置水平 Pod 自动伸缩和集群自动伸缩,结合弹性负载均衡策略,以及在应用层面实施缓存和限流机制,可以有效应对 Kubernetes 集群的突发流量。

  • 水平 Pod 自动伸缩(Horizontal Pod Autoscaler,HPA):根据指标(如 CPU 使用率)自动调整 Pod 的副本数量,以应对负载变化。
  • 集群自动伸缩(Cluster Autoscaler):当集群资源不足以调度新的 Pod 时,自动增加节点;当资源空闲时,自动移除多余的节点。
  • 弹性负载均衡:配置服务的负载均衡策略,确保流量均匀分布,防止单点过载。
  • 缓存和限流:在应用层面实现缓存机制,减少对后端服务的压力;设置限流策略,防止突发流量导致系统过载。

如何设计一个跨云平台的 Kubernetes 集群?

在不同云平台上部署独立的 Kubernetes 集群,使用多集群管理工具进行统一管理,通过网络互通方案确保服务通信,配置统一的认证与授权机制,并通过 CI/CD 管道实现应用分发和数据同步,从而设计一个跨云平台的 Kubernetes 集群。

  • 多集群管理:在不同云平台上部署独立的 Kubernetes 集群,使用工具如 Rancher、KubeSphere 或 Kubernetes 联邦(Federation)进行统一管理。
  • 网络互通:通过 VPN、专线或服务网格(如 Istio)实现不同云平台之间的网络连接,确保服务之间的通信。
  • 统一认证与授权:配置统一的身份认证和权限管理机制,确保跨集群的一致性和安全性。
  • 应用分发与数据同步:使用 CI/CD 管道实现应用的跨集群部署,采用数据库同步或数据复制策略,确保数据一致性。

开放性问题

遇到的最大挑战

你在 Kubernetes 运维中遇到的最大挑战是什么?如何解决的?

  • 示例回答
  • 挑战:集群网络频繁超时。
  • 排查:发现是CNI插件配置错误导致DNS解析失败。
  • 解决:修正Calico配置,并优化CoreDNS副本数。

如何提升 Kubernetes 集群的安全性

  • 身份认证和权限管理:通过启用 RBAC、结合 Open Policy Agent(OPA)等工具,精细化控制用户和服务账号的权限。
  • 安全审计与日志记录:开启 API 审计日志,及时发现异常操作和访问行为。
  • 网络策略与隔离:使用 NetworkPolicy 限制 Pod 间通信,减少攻击面。
  • 加密与密钥管理:对存储在集群中的敏感数据(如 Secrets)进行加密,同时使用外部密钥管理系统(KMS)。
  • 容器运行时安全:采用 Seccomp、AppArmor 或 SELinux 等安全机制,限制容器权限,防止容器逃逸。
  • 定期安全扫描与漏洞修补:利用安全扫描工具定期检查镜像、依赖和集群配置,及时更新补丁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2294395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言篇】“三子棋”

一、游戏介绍 三子棋&#xff0c;英文名为 Tic - Tac - Toe&#xff0c;是一款简单而经典的棋类游戏。游戏在一个 33 的棋盘上进行&#xff0c;两名玩家轮流在棋盘的空位上放置自己的棋子&#xff08;通常用 * 和 # 表示&#xff09;&#xff0c;率先在横、竖或斜方向上连成三个…

TongSearch3.0.4.0安装和使用指引(by lqw)

文章目录 安装准备手册说明支持的数据类型安装控制台安装单节点(如需集群请跳过这一节)解压和启动开启X-Pack Security和生成p12证书&#xff08;之后配置内置密码和ssl要用到&#xff09;配置内置用户密码配置ssl&#xff08;先配置内置用户密码再配ssl&#xff09;配置控制台…

在本地顺利的部署一个al模型从零开始 windows

引言 &#xff08;踩的坑&#xff0c;省流引言的内容没有有使模型跑起来&#xff09; 最近想在本地部署一个deepseek模型&#xff0c;就在网上搞了3 4天终于是能够部署下来了&#xff0c;在部署的时候也是成功的踩了无数的坑&#xff0c;比如我先问al如何在本地部署一个语言模…

【容器技术01】使用 busybox 构建 Mini Linux FS

使用 busybox 构建 Mini Linux FS 构建目标 在 Linux 文件系统下构建一个 Mini 的文件系统&#xff0c;构建目标如下&#xff1a; minilinux ├── bin │ ├── ls │ ├── top │ ├── ps │ ├── sh │ └── … ├── dev ├── etc │ ├── g…

尝试在Excel里调用硅基流动上的免费大语言模型

我个人觉得通过api而不是直接浏览器客户端聊天调用大语言模型是使用人工智能大模型的一个相对进阶的阶段。 于是就尝试了一下。我用的是老师木 袁进辉博士新创的硅基流动云上的免费的大模型。——虽然自己获赠了不少免费token&#xff0c;但测试阶段用不上。 具体步骤如下&am…

SqlSugar简单使用之Nuget包封装-Easy.SqlSugar.Core

SqlSugar官方文档 Nuget包开源地址 Nuget包是为了简化SqlSugar的使用步骤,增加一些基础的使用封装 引入分为两个版本&#xff0c;一个Ioc模式&#xff0c;另一个是注入模式&#xff0c;如果不想影响原本的仓储代码推荐使用Ioc模式&#xff0c;两者区别不到&#xff0c;方法通…

Linux网络 | 理解NATPT, 数据链路层Done

前言&#xff1a;本节内容结束数据链路层&#xff0c; 本节的重要内容有两个&#xff1a;一个是见一个综合性面试题&#xff0c;另一个就是NAT技术NATPT。 那么废话不多说&#xff0c; 开始我们的学习吧&#xff01;&#xff01;&#xff01; ps&#xff1a;最好先看一下上一篇…

微信小程序~django Petting pets(爱抚宠物)小程序

博主介绍&#xff1a;✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

UE (标识符, meta=())笔记

视频连接&#xff1a; [UFSH2024]UE5(标识符, meta(详解, 史上最全)) | 大钊 Epic Games 虚幻社区经理 参考文档&#xff1a; UE5标识符详解 | 史上最全 UnrealSpecifiers | UE5标识符详解 GitHub 老外整理的标识符文档 标识符 CPP_Default_ParamName&#xff08;18:22&a…

并发编程 引用类型 原子类 Stamped和Markable atomicMarkableReference表单Ref和标记Markable 面试题

目录 Stamped 和 Markable 的区别 示例代码 所以这个东西是一次性的 从来没听说过 从来没见过 Stamped 和 Markable 的区别 标记号 boolean 一次性的 版本号 整型数 不建议用 Markable 解决 ABA 问题 AtomicMarkableReference 是一个位于 java.util.concurrent.atomic 包中…

绿联NAS安装cpolar内网穿透工具实现无公网IP远程访问教程

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 本文主要介绍如何在绿联NAS中使用ssh远程连接后&#xff0c;使用一行代码快速安装cpolar内网穿透工具&#xff0c;轻松实现随时随地远程访问本地内网中的绿联NAS&#xff0c;无需公网…

【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题

【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题 零、起因 最近在使用Ubuntu虚拟机编译ARM程序&#xff0c;解压ARM的GCC后想要启动&#xff0c;报“没有那个文件或目录”&#xff0c;但是文件确实存在&#xff0c;环境配置也检查过了没问题&#xff0c;本文记…

微信小程序~电器维修系统小程序

博主介绍&#xff1a;✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

android 适配 api 35(android 15) 遇到的问题

首先升级 targetSdkVersion 和 compileSdkVersion 到 35&#xff0c;升级后发生的报错 一、 解决方案: 升级 gradle 和 gradle 插件版本 com.android.tools.build:gradle -> 8.3.0-alpha02 gradle-wrapper.properties : distributionUrl -> gradle-8.6-bin.zip htt…

Python Pandas(3):DataFrame

1 介绍 DataFrame 是 Pandas 中的另一个核心数据结构&#xff0c;类似于一个二维的表格或数据库中的数据表。它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。DataFrame 既有行索引也有列索引&#xff0c;它可以被看做由…

Mac电脑上好用的压缩软件

在Mac电脑上&#xff0c;有许多优秀的压缩软件可供选择&#xff0c;这些软件不仅支持多种压缩格式&#xff0c;还提供了便捷的操作体验和强大的功能。以下是几款被广泛推荐的压缩软件&#xff1a; BetterZip 功能特点&#xff1a;BetterZip 是一款功能强大的压缩和解压缩工具&a…

BUUCTF_XSS-Lab

xss XSS&#xff08;Cross - Site Scripting&#xff09;即跨站脚本攻击&#xff0c;是一种常见的 Web 安全漏洞。攻击者通过在目标网站注入恶意脚本&#xff08;通常是 JavaScript&#xff09;&#xff0c;当其他用户访问该网站时&#xff0c;这些恶意脚本会在用户的浏览器中执…

新能源算力战争:为什么AI大模型需要绿色数据中心?

新能源算力战争:为什么AI大模型需要绿色数据中心? 近年来,人工智能(AI)大模型的爆发式增长正在重塑全球科技产业的格局。以GPT-4、Gemini、Llama等为代表的千亿参数级模型,不仅需要海量数据训练,更依赖庞大的算力支撑。然而,这种算力的背后隐藏着一个日益严峻的挑战——…

go gin配置air

一、依赖下载 安装最新&#xff0c;且在你工作区下进行安装&#xff0c;我的是D:/GO是我的工作区&#xff0c;所有项目都在目录下的src&#xff0c; go install github.com/air-verse/airlatest 如果出现类似报错&#xff1a; 将图中第三行 github.com/air-verse/air 替换最…

【C语言系列】深入理解指针(5)

深入理解指针&#xff08;5&#xff09; 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1&#xff1a;2.2.2代码2&#xff1a;2.2.3代码3&#xff1a;2.2.4代码4&#xff1a;2.2.5代码5&#…