云原生面试

云原生面试

  • Kubernetes
    • 原理
      • Kubernetes 如何保证集群的安全性。
      • 简述 Kubernetes 准入机制
      • 简述Kubernetes Secret 有哪些使用方式
      • 简述Kubernetes PodSecurityPolicy机制
      • 简述Kubernetes PodSecurityPolicy机制能实现哪些安全策略
      • 简述Kubernetes 网络策略原理
      • 简述Kubernetes 数据持久化的方式有哪些
      • ipvs 和 iptables的区别
      • 简述 Helm 及其优势
      • 什么是 Google 容器引擎
      • 简述kube-proxy的三种工作模式和原理
      • 指针探测失败的可能原因
      • Pod启动失败的原因
      • Pod异常崩溃,如何排查原因
      • Docker 的网络通信模式
      • Kubernetes 最佳安全实践
      • Ingress
      • Ingress-controller 工作原理
    • 应用架构(可用性、扩展性、性能、安全、成本)
    • 组件
    • 计算、数据库、云安全、运维
  • 网络
    • WireGuard
    • Tailscale
    • MetalLB
  • 存储
    • Etcd
    • OpenEBS
    • Ceph
    • NFS
  • 监控
    • IaaS层基础资源监控、中间件监控及升级
      • Prometheus
      • 网络
    • 应用级故障分析、应用告警管理、指标阈值告警
    • 日志监控分析
      • EFK
      • Loki
    • 接口性能监控、调用链监控
      • SkyWalking
      • Jaeger + Kali
      • Deepflow
    • 成本监控

Kubernetes

原理

Kubernetes 如何保证集群的安全性。

  • 基础设施方面: 基于容器技术与宿主机的隔离
  • 权限方面:
    • 最小权限原则: 合理限制所有组件的权限,确保组件只执行它被授权行为,通过限制单个组件的能力来限制它的权限范围。
    • 用户权限: 划分普通用户和管理员的角色
  • 集群方面:
    • API Server的认证授权: Kubernetes集群中所有资源的访问和变更都是通过Kubernetes API Server 来实现的,因此需要建议采用更安全的HTTPS或Token来识别和认证客户端身份(Authentication),以及随后访问权限的授权(Authorization)环节。
    • API Server 的授权管理: 通过授权策略来决定一个API调用是否合法。对合法用户进行授权并且随后在用户访问时进行鉴权,建议采用更安全的RBAC方式来提升集群安全授权。
    • 敏感数据引入Secret机制: 对于集群敏感数据建议使用Secret方式进行保护。
    • AdmissionControl(准入机制): 对Kubernetes api的请求过程中,顺序为:先经过认证 & 授权,然后执行准入操作,最后对目标对象进行操作。

简述 Kubernetes 准入机制

在对集群进行请求时,每个准入控制代码都按照一定顺序执行。如果有一个准入控制拒绝了此次请求,那么整个请求的结果将会立即返回,并提示用户相应的error信息。
准入控制(AdmissionControl)准入控制本质上为一段准入代码,在对Kubernetes api 的请求过程中,顺序为:先经过认证 & 授权,然后执行准入操作,最后对目标对象进行操作。常用组件如下:

  • AlwaysAdmit: 允许所有请求
  • AlwaysDeny: 禁止所有请求,多用于测试环境。
  • ServiceAccount: 它将ServiceAccount 实现了自动化,它会辅助ServiceAccount做一些事情,比如如果Pod没有ServiceAccount属性,它会自动添加一个default,并确保Pod的ServiceAccount始终存在。
  • LimitRanger: 观察所有的请求,确保没有违法已经定义好的约束条件,这些条件定义在namespace中LimitRange对象中。
  • NamespaceExists: 观察所有请求,如果请求尝试创建一个不存在的namespace,则这个请求被拒绝。

简述Kubernetes Secret 有哪些使用方式

  • 在创建Pod时,通过为Pod指定ServiceAccount来自动使用该Secret。
  • 通过挂载该Secret到Pod来使用它。
  • 在Docker镜像下载时使用,通过指定Pod的spec.ImagePullSecrets来使用它。

简述Kubernetes PodSecurityPolicy机制

Kubernetes PodSecurityPolicy是为了更精细地控制Pod对资源的使用方式以及提升安全策略。在开启PodSecurityPolicy准入控制器后,Kubernetes默认不允许创建任何Pod,需要创建PodSecurityPolicy策略和相应的RBAC授权策略(Authorizing Policies),Pod才能创建成功。

简述Kubernetes PodSecurityPolicy机制能实现哪些安全策略

在PodSecurityPolicy对象中可以设置不同字段来控制Pod运行时的各种安全策略,常见的有:

  • 特权模式:privileged是否允许Pod以特权模式运行。
  • 宿主机资源:控制Pod对宿主机资源的控制,如hostPID:是否允许Pod共享宿主机的进程空间。
  • 用户和组:设置运行容器的用户ID(范围)或组(范围)。
  • 提升权限:AllowPrivilegeEscalation: 设置容器内的子进程是否可以提升权限,通常在设置非root用户(MustRunAsNonRoot)时进行设置。
  • SELinux:进行SELinux的相关配置。

简述Kubernetes 网络策略原理

Network Policy的工作原理主要为:policy controller 需要实现一个API Listener,监听用户设置的Network Policy定义,并将网络访问规则通过各Node Agent进行实际设置(Agent则需要通过CNI网络插件实现)。

简述Kubernetes 数据持久化的方式有哪些

  • EmptyDir(空目录): 没有指定要挂载宿主机上的某个目录,直接由Pod内部映射到宿主机上。类似于docker中的manager volume。
    • 只需要临时将数据保存在磁盘上,比如在合并/排序算法中。
    • 作为两个容器的共享存储。
    • 同个Pod里面的不同容器,共享同一个持久化目录,当Pod节点删除时,volume的数据也会被删除。
    • emptyDir的数据持久化的生命周期和使用的Pod一致,一般是作为临时存储使用。
  • Hostpath: 将宿主机上已存在的目录或文件挂载到容器内部。类似于docker 中的bind mount 挂载方式。
    • 增加了pod与节点之间的耦合。
  • PersistentVolume(简称PV): 如基于NFS服务的PV。

ipvs 和 iptables的区别

iptables和ipvs都是基于Netfilter实现的,iptables是为防火墙而设计的;ipvs是为高性能负载设计的,并且使用更高效的数据结构(Hash表),允许几乎无限的规模扩张。

  • 为大型集群提供了更好的可扩展性和性能
  • 支持比iptables更复杂的负载均衡算法(最小负载、最少链接、加权等)
  • 支持服务器健康检查和连接重试等功能。
  • 可以动态修改ipset的集合,即使iptables的规则正在使用这个集合。

简述 Helm 及其优势

Helm 是 Kubernetes 的软件包管理工具。Helm 能够将一组K8S资源打包统一管理,是查找、共享和使用为Kubernetes构建的软件的最佳方式。
Helm 中通常每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。

  • 统一管理、配置和更新这些分散的K8S的应用资源文件
  • 分发和复用一套应用模板
  • 将应用的一系列资源当做一个软件包管理
  • 对于使用者而言,使用Helm后不用需要编写复杂的应用部署文件,可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序。

什么是 Google 容器引擎

GKE: Google Container Engine 是Docker容器和集群的开源管理平台。这个基于 Kubernetes 的引擎仅支持在Google的公共云服务中运行。

简述kube-proxy的三种工作模式和原理

  • userspace 模式
    • 该模式下 kube-proxy 会为每一个Service创建一个监听端口。发向Cluster IP的请求被Iptables规则重定向到kube-proxy监听的端口上,kube-proxy根据LB算法选择一个提供服务的Pod并和其建立链接,以将请求转发到Pod上。
    • 该模式下,kube-proxy 充当了一个四层 Load balancer 的角色。由于 kube-proxy 运行在 userspace 中,在进行转发处理时会增加两次内核和用户空间之间的数据拷贝,效率较两外两种模式低一些。好处是当后端的Pod不可用时,kube-proxy 可以重试其他Pod。
  • iptables 模式
    • 为了避免增加内核和用户空间的数据拷贝操作,提高转发效率,kube-proxy 提供了 iptables 模式。在该模式下,kube-proxy 为 service 后端的每个Pod创建对应的 iptables 规则,直接将发送 Cluster IP 的请求重定向到下一个Pod IP。
    • 该模式下 kube-proxy 不承担四层代理的角色,只负责创建 iptables 规则。该模式的优点是较 userspace 模式效率更高,但不能提供灵活的LB策略,当后端Pod不可用时也无法进行重试。
  • ipvs模式
    • 该模式和 iptables 类似,kube-proxy 监控Pod的变化并创建相应的ipvs rules。ipvs也是在kernel模式下通过netfilter实现的,但采用了hash table 来存储规则,因此在规则较多的情况下,ipvs 相对 iptables 转发效率更高。除此之外,ipvs支持更多的LB算法。如果要设置 kube-proxy 为ipvs模式,必须在操作系统中安装ipvs内核模块。

指针探测失败的可能原因

  • 容器未成功启动(如服务无法正常启动运行)
  • 执行命令失败(如用于检测的exec、http get等本身就不能执行成功)
  • docker、docker-shim、containerd存在故障
  • 宿主机node到容器ip的网络不通(因为http和tcp都是kubelet自node节点发起的,向容器的ip进行探测)

Pod启动失败的原因

  • K8S集群资源不足。一般kubectl get pods 会发现Pod处于Pending状态,kubectl describe pod 会发现 0/n 个节点可用,kubectl describe node k8snode1 会发现节点可分配的资源不足。
  • 排查K8S组件(apiserver、dns)日志
  • 排查网络插件日志

Pod异常崩溃,如何排查原因

  • kubectl describe pod xxx ,可以查看到上次Pod终止的原因(比如 OOM killed)
  • kubectl logs --previed,可以查看上次Pod终止前容器最后输出的日志。

Docker 的网络通信模式

  • host 模式: 和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡和IP,而是直接使用宿主机的IP和端口。
  • container 模式: 指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。
  • none 模式: 告诉 docker 将新容器放到自己的网络堆栈中,但是不需要配置它的网络。
  • bridge 模式: 是 docker 默认的网络设置,此模式会为每一个容器分配 Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。

Kubernetes 最佳安全实践

  • 定期对环境应用安全更新。
  • 严格限制访问ETCD。
  • 记录生产环境的所有内容。
  • 使用网络隔离。
  • 为资源定义严格的策略/规则。
  • 实现持续的安全漏洞扫描。
  • 开启审计功能。
  • 提供对K8S节点的有限直接访问。
  • 设置资源限额。
  • 仅使用已认证仓库的镜像。

Ingress

  • Service是基于四层TCP和UDP协议转发

  • Ingress可以基于七层HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分

  • Ingress 是 Kubernetes 中的一种资源对象,用来管理集群外部访问集群内部服务的方式

    • 可以通过 Ingress 资源来配置不同的转发规则,从而达到根据不同的规则设置访问集群内不同的 Service 所对应的后端 Pod
    • Ingress 通过http或https暴露集群内部Service,给Service提供外部URL、负载均衡、SSL/TLS能力以及基于host的反向代理。
  • Ingress-controller 是具体实现反向代理及负载均衡的程序,对 ingress 定义的规则进行解析,根据配置的规则来实现转发

    • Ingress-controller 并不是 Kubernetes 自带的组件,用户可以选择不同的ingress-controller实现,比如 Kubernetes 官方维护的 NGINX Ingress Controller、华为云CCE使用华为云ELB实现Ingress的七层负载均衡。

Ingress-controller 工作原理

当用户创建更新 Ingress 资源后,Ingress-controller 就会根据其中定义的转发规则刷新 LoadBalancer 配置文件(如:nginx.conf,或者华为云ELB配置)。在外部流量访问集群时,由 LoadBalancer 组件根据转发规则将其转发至对应的各个工作负载。

Ingress-controller 以Pod的形式运行在 K8S 集群中,里面包含两个进程,一个是 ingress controller(daemon程序),另一个是负责转发的反向代理程序(如nginx)。
当外部请求到达 ingress controller 的时候,ingress controller 会根据 Ingress的路由规则查找对应的Service,进而通过Endpoint查询到Pod的IP地址,然后由反向代理程序nginx将请求转发到后端Pod。

应用架构(可用性、扩展性、性能、安全、成本)

组件

计算、数据库、云安全、运维

网络

WireGuard

WireGuard:是一款可以组建虚拟私人局域网(VPN)的软件,允许用户通过公共网络(如互联网)安全地传输数据,同时保持数据的机密性和完整性。

  • https://blog.csdn.net/hzf0701/article/details/134433969
  • https://github.com/orgs/WireGuard/repositories
  • https://zhuanlan.zhihu.com/p/108365587

WireGuard 是一个易于配置、快速且安全的开源 VPN,它利用了最新的加密技术。目的是提供一种更快、更简单、更精简的通用 VPN,它可以轻松地在树莓派这类低端设备到高端服务器上部署。
WireGuard 最初是为 Linux 开发的,但现在可用于 Windows、macOS、BSD、iOS 和 Android。它仍在活跃开发中。

Tailscale

基于 WireGuard 异地组建虚拟局域网

  • https://zhuanlan.zhihu.com/p/481100424
  • https://blog.csdn.net/github_36665118/article/details/128733646
  • https://blog.csdn.net/weixin_45508265/article/details/135361374

MetalLB

为自建的kubernetes裸机集群提供LoadBalancer服务。

  • https://cloud.tencent.com/developer/article/2146391
  • https://zhuanlan.zhihu.com/p/617807098
  • https://blog.51cto.com/zhangxueliang/5746562

存储

Etcd

Kubernetes&&etcd

OpenEBS

Kubernetes&&OpenEBS

Ceph

k8s 基于cepf实现数据持久化

NFS

监控

IaaS层基础资源监控、中间件监控及升级

Prometheus

网络

应用级故障分析、应用告警管理、指标阈值告警

日志监控分析

EFK

Loki

接口性能监控、调用链监控

SkyWalking

Jaeger + Kali

Deepflow

成本监控

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

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

相关文章

基于SpringBoot+Vue的美容美发在线预约系统的设计与实现【附源码】

毕业设计(论文) 题目:基于SpringBootVue的美容美发在线预约系统的设计与实现 二级学院: 专业(方向): 班 级: 学 生: 指导教师&#xff…

072、对象的创建与调用方法

071、Python 类的定义 当我们定义好一个类后,肯定是为了使用其中的功能来解决某些问题的,那么如何使用呢? 首先就是需要通过类创建对象,也就是类的实例化(只有实例化后的对象才能够调用里面的属性和方法)…

Go 语言学习笔记之通道 Channel

Go 语言学习笔记之通道 Channel 大家好,我是码农先森。 概念 Go 语言中的通道(channel)是用来在 Go 协程之间传递数据的一种通信机制。 通道可以避免多个协程直接共享内存,避免数据竞争和锁的使用,从而简化了并发程…

【解决方案】Mysql 数据库千万数据插入脚本

一.背景 要做数据模拟,需要在测试环境创建7千万的流水数据,进行迁移的模拟动作。 二.具体代码 private static final String DB_URL "jdbc:mysql://IP:3306/twallet_dev?zeroDateTimeBehaviorconvertToNull&allowMultiQueriestrue&useAf…

《Mybatis-Plus》系列文章目录

什么是 MyBatis-Plus? Mybatis-Plus是一个在MyBatis基础上进行增强和扩展的开源Java持久层框架。 Mybatis-Plus(简称MP)旨在简化开发、提高效率,通过提供一系列便捷的功能和工具,大幅度减少开发人员编写重复代码的时…

element-ui 下拉菜单el-dropdown-item添加点击事件

使用element-ui下拉菜单组件Dropdown时绑定点击事件,事件不生效。 click 常见于其用在Vue中的事件绑定,而实际上是 v-on 的简写,而 v-on 则是对 vue 的事件体系封装之后的 API接口。 native修饰符用于处理DOM原生事件,由于组件 …

如何在web页面下做自动化测试?

自动化测试是在软件开发中非常重要的一环,它可以提高测试效率并减少错误率。在web页面下进行自动化测试,可以帮助我们验证网页的功能和交互,并确保它们在不同浏览器和平台上的一致性。本文将从零开始,详细介绍如何在web页面下进行…

10--7层负载均衡集群

前言:动静分离,资源分离都是在7层负载均衡完成的,此处常被与四层负载均衡比较,本章这里使用haproxy与nginx进行负载均衡总结演示。 1、基础概念详解 1.1、负载均衡 4层负载均衡和7层负载均衡是两种常见的负载均衡技术&#xff…

PHP 语言特定指南

PHP 语言特定指南 本指南将教您如何使用 Docker 创建容器化的 PHP 应用程序。通过本指南,您将学习如何: 容器化并运行一个 PHP 应用程序设置用于开发 PHP 应用程序的本地环境在容器内运行 PHP 应用程序的测试使用 GitHub Actions 配置容器化 PHP 应用程…

vite+vue3+ts项目搭建流程 (pnpm, eslint, prettier, stylint, husky,commitlint )

vitevue3ts项目搭建 项目搭建项目目录结构 项目配置自动打开项目eslint①vue3环境代码校验插件②修改.eslintrc.cjs配置文件③.eslintignore忽略文件④运行脚本 prettier①安装依赖包②.prettierrc添加规则③.prettierignore忽略文件④运行脚本 stylint①.stylelintrc.cjs配置文…

前端自动化

前端自动化的内容 自动化代码检查自动化测试自动化构建自动化部署自动化文档 前端自动化的最佳实践

基于改进YOLOv5的安全帽检测算法 | 引入Ghost卷积 + 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之WIoU

前言:Hello大家好,我是小哥谈。为了解决建筑工地、隧道、煤矿等施工场景中现有安全帽检测算法对于小目标、密集目标以及复杂环境下的检测精度低的问题,设计实现了一种基于YOLOv5的改进目标检测算法,记为YOLOv5-GBCW。首先使用Ghos…

心理健康测试系统设计

心理健康测试系统设计需要综合考虑多个方面,以确保系统的准确性、易用性和有效性。以下是一个心理健康测试系统设计方案: 一、设计目标 准确性:确保测试结果能够准确反映被测者的心理健康状况。 易用性:设计简洁明了的界面和操作…

C语言 | Leetcode C语言题解之第166题分数到小数

题目: 题解: struct HashMapNode {int key;int val;UT_hash_handle hh; };struct HashMapNode* hashMap NULL;int hashMapAdd(int key, int val) {struct HashMapNode* node;HASH_FIND_INT(hashMap, &key, node);if(node ! NULL){return node->…

openai停止中国的api服务,但是性能相当的阿里云免费提供迁移

🎥 开场白: “大家好,我是你们的科技小助手,今天给大家带来一个重要的信息更新!” 🌐 引入话题: “最近,许多朋友可能已经听说了,OpenAI决定停止对中国的服务。但别担心…

fiddler抓https包

1,安装fiddler省略 2,下载证书步骤:tools-options-https 点击确认,点击OK,点击是 把证书安装到谷歌浏览器上步骤:点击谷歌浏览器右上角的设置,在搜索框中搜索证书,点击“证书管理”…

从0搭建一个vue项目,不使用脚手架从html到vue

前言 从最开始学习web网页开始,搭建一个网页只需要创建一个html文件对其进行编写dom标签语言即可;后来分离了html,css和js,搭建一个网页开始需要文件夹,文件夹包含了这3类文件以及静态文件,图片&#xff0c…

备战秋招day4

算法 242. 有效的字母异位词 class Solution {public boolean isAnagram(String s, String t) {int[] count new int[26];for(int i 0;i<s.length();i){count[s.charAt(i)-a];}for(int i 0;i<t.length();i){count[t.charAt(i)-a]--;if(count[t.charAt(i)-a]<0){r…

【CSS】 简单理解一下CSS 3D变换

CSS 3D变换是Web开发中一项强大的技术&#xff0c;它允许开发者在网页上创建和展示三维图形和动画。以下是关于CSS 3D变换的深入浅出介绍&#xff1a; 一、3D变换基础 坐标轴&#xff1a; X轴&#xff1a;水平向右&#xff0c;正方向为右&#xff0c;负方向为左。Y轴&#xff…

【会议征稿】2024年应用计算智能、信息学与大数据国际会议(ACIIBD 2024,7月26-28)

2024年应用计算智能、信息学与大数据国际学术会议&#xff08;ACIIBD 2024&#xff09;将于2024年7月26-28日在中国广州举办。会议将聚焦于计算智能及其应用、信息、大数据等相关的研究领域&#xff0c; 广泛邀请国内外知名专家学者&#xff0c;共同探讨相关学科领域的最新发展…