深圳做企业网站的公/免费发布推广信息的软件
云原生面试
- 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
- 监控
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
成本监控
相关文章:

云原生面试
云原生面试 Kubernetes原理Kubernetes 如何保证集群的安全性。简述 Kubernetes 准入机制简述Kubernetes Secret 有哪些使用方式简述Kubernetes PodSecurityPolicy机制简述Kubernetes PodSecurityPolicy机制能实现哪些安全策略简述Kubernetes 网络策略原理简述Kubernetes 数据持…...

深度学习入门2—— 神经网络的组成和3层神经网络的实现
由上一章结尾,我们知道神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数。接下来会介绍神经网络的概要,然后再结合手写数字识别案例进行介绍。 1.神经网络概要 1.1从感知机到神经网 我们可以用图来表示神经网络,我们把最…...

tensorflow学习:错误 InternalError: Dst tensor is not initialized
tensorflow学习:错误 InternalError: Dst tensor is not initialized_dst tensor is not initialized.-CSDN博客https://blog.csdn.net/wanglitao588/article/details/77033659...

Docker环境安装anythingllm
拉镜像 docker pull mintplexlabs/anythingllm建目录 export STORAGE_LOCATION$HOME/anythingllm && \ mkdir -p $STORAGE_LOCATION && \ touch "$STORAGE_LOCATION/.env"检查目录具有写权限 # 为目录anythingllm赋写权限 chmod 777 anythingllm 启…...

FEC 向前纠错编码
随写,看的有点杂,简单记一下。 应该叫ReedSolomon FEC RS算法简单来讲就是,根据已有数据,构造模型,然后根据模型判纠错? 简单来讲,两点确定一条直线,直线直线上的点都会满足 y kx…...

【jupyter notebook】解决打不开以及安装扩展插件的问题
文章目录 问题描述问题 1解决问题 2解决 问题描述 问题 1 在自定义的虚拟环境下,安装 jupyter notebook 6.4.12 版本时,报以下错误: 解决 查了一些 解决方法,执行以下命令即可解决: conda install traitlets5.9.0 …...

Perl文件句柄深度解析:掌握文件操作的核心
Perl中的文件句柄是进行文件输入输出操作的关键。它们提供了一种机制,允许Perl脚本打开文件、读写数据、定位文件指针,以及关闭文件。理解文件句柄的使用对于编写高效的Perl脚本至关重要。本文将深入探讨Perl文件句柄的概念、使用方法和最佳实践。 1. 文…...

Tomcat 下载部署到 idea
一、下载Tomcat Tomcat 是Apache 软件基金会(Apache Software Foundation)下的一个核心项目,免费开源、并支持Servlet 和JSP 规范。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发…...

FutureTask如何使用?
FutureTask是Java中的一个具体类,它实现了RunnableFuture接口,该接口结合了Runnable和Future的功能。FutureTask可以用于表示一个可以取消的异步计算。FutureTask非常适合用于与Executor框架一起使用,但也可以单独使用。 FutureTask的基本用…...

Webpack: 如何借助预处理器、PostCSS 等构建现代 CSS 工程环境
概述 在开发 Web 应用时,我们通常需要编写大量 JavaScript 代码 —— 用于控制页面逻辑;编写大量 CSS 代码 —— 用于调整页面呈现形式。问题在于,CSS 语言在过去若干年中一直在追求样式表现力方面的提升,工程化能力薄弱ÿ…...

一篇文章告诉你如何正确使用chatgpt提示词
在chatgpt大火的时候,出现了一波学习chatgpt提示词的热潮,互联网出现很多了使用的学习提示词的课程。其中我觉得斯坦福大学教授吴恩达博士推出prompt engineer课最全面。接下来总结他课程中正确使用提示词工程的方法。 1. 明确目标 明确你希望ChatGPT完…...

qt基于QGraphicsView的屏幕旋转
一、代码实现 实现代码示例 MainWindow2 w;QGraphicsScene *scene new QGraphicsScene;QGraphicsProxyWidget *gw scene->addWidget(&w);// 旋转角度gw->setRotation(90);QGraphicsView *view new QGraphicsView(scene);//view->resize(1024, 600);//scene-&g…...

一个土木工程专业背景的开发者,讲述开源带给他的力量
在前段时间我们举办的“TDengine Open Day”第一季技术沙龙中,TDengine 应用研发高级工程师谭雪峰进行的“开源之路:程序员的成长与探索”主题分享获得了众多参会者的好评。谭雪峰从自身独特的职业发展经历出发,分享了自己在开源领域的种种收…...

express+vue在线im实现【四】
往期内容 expressvue在线im实现【一】 expressvue在线im实现【二】 expressvue在线im实现【三】 本期示例 本期总结 支持了音频的录制和发送,如果觉得对你有用,还请点个免费的收藏与关注 下期安排 在线语音 具体实现 <template><kl-dial…...

【Qt 实现3D按钮】
要在Qt中实现3D按钮,你可以使用QML和Qt 3D模块。这是一个简单的例子,展示了如何在Qt中创建一个3D按钮: 首先,确保你的系统中已经安装了Qt 3D模块。在命令行中输入以下命令检查: qmlscene --version如果没有安装&…...

8.每日LeetCode-笔试题,交替打印数字和字母
代码地址:interview-go: Go高级面试总结 问题描述 交替打印数字和字母 使用两个 goroutine 交替打印序列,一个 goroutine 打印数字, 另外一个 goroutine 打印字母, 最终效果如下: 12AB34CD56EF78GH910IJ1112KL…...

UE5近战对抗系统Tutorial
文章目录 BP_Character 组合攻击Notify State 检测攻击BP_Character 攻击反馈BP_Character 生命系统BP_Character 死亡效果BP_Character 武器系统BP_Enemy 初始化和行为树 BP_Character 组合攻击 首先我们获取攻击动画,在这里使用的是 Easy Combo Buffering 的攻击…...

Typescript: declear
问: const book: string 这样就可以声明而且赋值为什么还用declear去分成好几步骤走呢? 同时即使不赋值只需要使用const book: string;难道不也行吗? 为什么要加上一个declear呢? 回答: 在 TypeScript 中,声明变量和使用 declare 声明类型信息是两个不同的概念…...

Linux内核编译流程
删除之前编译生成的文件和配置文件 make mrproper生成.config文件 make menuconfig编译 make -j41. No rule to make target ‘debian/canonical-certs.pem‘, needed by ‘certs/x509_certificate_list‘ vim .config 修改CONFIG_SYSTEM_TRUSTED_KEYS为"" 修改C…...

昇思25天学习打卡营第2天 | 张量Tensor
张量Tensor 张量(Tensor)基础 张量是MindSpore中的基本数据结构的一种,类似于NumPy中数组和矩阵非常相似。它具有以下重要属性: 形状(shape)和数据类型(dtype):每个张量…...

时间安排 |规划
计算机网络(记得完成作业本上的习题) 先看王道知识点讲解 然后不懂得看 计算机网络微课堂(有字幕无背景音乐版)_哔哩哔哩_bilibili 最后做本章习题 【乱讲的】《计算机网络》(第8版)课后习题讲解_哔哩…...

PS系统教程28
Alpha通道(透明通道) 8位的灰度通道,也有256个位置记录图片当中的透明度信息 作用:定义透明、半透明、不透明通道信息。保存、存储选区。 白色不透明区域黑色透明区域灰色半透明区域 案例 为了将我们抠出来的人物方便下次修改…...

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

spring源码环境的搭建
为什么要编译spring源码 为了高效调试Spring源码、验证个人猜想,并从开发者的视角深化理解,编译自定义的Spring源码版本显得尤为重要。这样可以避免因缺乏预编译版本而带来的不便,并允许直接在源码上进行注释或修改,以记录学习心…...

小山菌_代码随想录算法训练营第三十四天| 56. 合并区间、
56. 合并区间 文档讲解:代码随想录.合并区间 视频讲解:贪心算法,合并区间有细节!LeetCode:56.合并区间 状态:已完成 代码实现 class Solution { public:vector<vector<int>> merge(vector<…...

让工厂像手机一样更“聪明”
手机,作为我们日常生活中不可或缺的一部分,以其智能、便捷、高效的特点,彻底改变了我们的沟通、娱乐和工作方式。那么,想象一下,如果工厂能像手机一样便捷,那么生产过程中的每一个环节都将变得触手可及。通…...

vue2与vue3数据响应式对比之检测变化
vue2 由于javascript限制,vue不能检测数组和对象的变化 什么意思呢,举例子来说吧 深入响应式原理 对象 比如说我们在data里面定义了一个info的对象 <template><div id"app"><div>姓名: {{ info.name }}</div><…...

Spring Cloud - 开发环境搭建
1、JDK环境安装 1、下载jdk17:下载地址,在下图中红色框部分进行下载 2、双击安装,基本都是下一步直到完成。 3、设置系统环境变量:参考 4、设置JAVA_HOME环境变量 5、在PATH中添加%JAVA_HOME%/bin 6、在命令行中执行:j…...

绘制图形
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在前3节的实例中,我们一直绘制的都是直线,实际上,海龟绘图还可以绘制其他形状的图形,如圆形、多边形等…...

SpringAop实战(xml文件/纯注解两种方式)
AOP的概述 什么是AOP? 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程 • AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构 • AOP最早由AOP联盟的组织提出的,制定了…...