在当今快节奏的数字世界中,组织需要迅速有效地交付高质量软件,以在竞争中保持领先地位。云服务器和 DevOps 实践相结合,可以显著精简工作流程,优化软件交付。
云服务器的优势
云服务器提供弹性、可扩展和按需的基础设施,为 DevOps 实践创造了理想的环境:
- 弹性:云服务器可以根据需要快速扩展或缩减,满足不断变化的工作负载需求。
- 可扩展性:云服务器可以在需要时轻松添加或删除资源,以支持不断增长的项目。
- 按需:云服务器按使用付费,消除了对昂贵的内部基础设施的需要。
DevOps 实践
DevOps 是一种软件开发方法,它强调协作、自动化和持续交付。它打破了传统开发和运维团队之间的壁垒,允许在整个软件开发生命周期内进行更顺畅的协作:
- 持续集成/持续交付 (CI/CD):自动化构建、测试和部署过程,使开发团队能够频繁地交付软件更新。
- 基础设施即代码:使用代码来配置和管理基础设施,确保一致性和可重复性。
- 容器:将应用程序打包为独立的单元,使它们可以在任何环境中轻松部署。
云服务器 x DevOps 的结合
- 简化的工作流程:自动化工具和基础设施即代码,消除了 DevOps 流程中的手动任务和错误。
- 加速交付:CI/CD 流程使开发团队能够快速可靠地交付软件更新。
- 提高质量:自动化测试和持续监控,有助于确保软件质量。
- 降低成本:按需基础设施和自动化工具,可以降低运营成本。
选择云服务器提供商
在选择云服务器提供商时,请考虑以下因素:
- 平台支持:确保提供商支持您选择的 DevOps 工具和技术。
- 弹性:寻找具有冗余基础设施和高可用性功能的提供商。
- 可扩展性:选择可根据需要轻松扩展或缩减资源的提供商。
- 定价模型:比较不同的定价模型,以找到最适合您需求的模型。
实施云服务器 x DevOps
成功实施云服务器 x DevOps 涉及以下步骤:
- 制定策略:制定明确的 DevOps 策略,概述您的目标和流程。
- 选择工具:选择与您策略相符的 DevOps 工具和技术。
- 自动化流程:自动化尽可能多的 DevOps 流程,以提高效率和减少错误。
- 持续监控:监控您的 DevOps 流程,以识别瓶颈并进行改进。
结论
云服务器和 DevOps 实践的结合,为组织提供了优化软件交付的关键优势。通过精简工作流程、加速交付、提高质量和降低成本,企业可以获得竞争优势并实现数字化转型。通过仔细选择云服务器提供商、有效实施 DevOps 策略,组织可以充分利用云计算和 DevOps 的力量,从而推动业务成功。
云计算有什么特点?
云计算特点如下:\x0d\x0a(1) 超大规模\x0d\x0a“云”具有相当的规模,Google云计算已经拥有100多万台服务器, Amazon、IBM、微软、Yahoo等的“云”均拥有几十万台服务器。
企业私有云一般拥有数百上千台服务器。
“云”能赋予用户前所未有的计算能力。
\x0d\x0a(2) 虚拟化\x0d\x0a云计算支持用户在任意位置、使用各种终端获取应用服务。
所请求的资源来自“云”,而不是固定的有形的实体。
应用在“云”中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。
只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。
\x0d\x0a(3) 高可靠性\x0d\x0a“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。
\x0d\x0a(4) 通用性\x0d\x0a云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一个“云”可以同时支撑不同的应用运行。
\x0d\x0a(5) 高可扩展性\x0d\x0a“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。
\x0d\x0a(6) 按需服务\x0d\x0a“云”是一个庞大的资源池,你按需购买;云可以像自来水,电,煤气那样计费。
\x0d\x0a(7) 极其廉价\x0d\x0a由于“云”的特殊容错措施可以采用极其廉价的节点来构成云,“云”的自动化集中式管理使大量企业无需负担日益高昂的数据中心管理成本,“云”的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受“云”的低成本优势,经常只要花费几百美元、几天时间就能完成以前需要数万美元、数月时间才能完成的任务。
\x0d\x0a云计算可以彻底改变人们未来的生活,但同时也要重视环境问题,这样才能真正为人类进步做贡献,而不是简单的技术提升。
\x0d\x0a(8) 潜在的危险性\x0d\x0a云计算服务除了提供计算服务外,还必然提供了存储服务。
但是云计算服务当前垄断在私人机构(企业)手中,而他们仅仅能够提供商业信用。
对于政府机构、商业机构(特别像银行这样持有敏感数据的商业机构)对于选择云计算服务应保持足够的警惕。
一旦商业用户大规模使用私人机构提供的云计算服务,无论其技术优势有多强,都不可避免地让这些私人机构以“数据(信息)”的重要性挟制整个社会。
对于信息社会而言,“信息”是至关重要的。
另一方面,云计算中的数据对于数据所有者以外的其他用户云计算用户是保密的,但是对于提供云计算的商业机构而言确实毫无秘密可言。
所有这些潜在的危险,是商业机构和政府机构选择云计算服务、特别是国外机构提供的云计算服务时,不得不考虑的一个重要的前提。
什么是K8S?
k8s是什么?
Kubernetes 是一个可移植的,可扩展的开源容器编排平台,用于管理容器化的工作负载和服务,方便了声明式配置和自动化。
它拥有一个庞大且快速增长的生态系统。
Kubernetes 的服务,支持和工具广泛可用。
为什么现在流行使用容器?
早期: 在物理服务器上面部署应用程序存在资源分配问题,因为其不能在物理服务器中的应用程序定义资源边界,导致应用程序资源利用不足而无法扩展.
后来: 为了解决该问题,引入了虚拟化技术, 虚拟化技术是指允许你在单个物理服务器的 CPU 上运行多个虚拟机,可以让多个应用程序在虚拟机之间进行隔离,具有一定的安全性, 每一个虚拟机就是一台完整的计算机, 在虚拟化硬件之上运行所有组件.
现在: 多数在物理服务器上面部署应用程序都是采kubectl用容器的方式,容器类似于虚拟机,它们都具有自己的文件系统、CPU、内存、进程空间等, 且由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。基于此特点被企业大范围使用.
为什么需要使用k8s容器?
若出现这样一个环境: 在生产环境中如果一个容器发生故障,则我们需要手动去启动另外一个容器,这样的操作是对我们的管理员来说是不太方便的, 若一个容器出现故障,另一个容器可以自动启动容器接管故障的容器,这样是最好的.
k8s就可以实现该效果,Kubernetes 提供了一个可弹性运行分布式系统的框架。
Kubernetes 会满足你的扩展要求、故障转移、部署模式等。
k8s功能: 服务发现和负载均衡, 存储编排, 自动部署和回滚, 自动完成装箱计算, 自我修复, 密钥与配置管理
名词解释
Secret有三种类型:
k8s的组成
k8s是由组件,API,对象等组成.
包含所有相互关联组件的 Kubernetes 集群图如下:
组件
Kubernetes 控制面 的核心是 API 服务器。
API 服务器负责提供 HTTP API,以供用户、集群中的不同部分和集群外部组件相互通信。
对象
Kubernetes对象是Kubernetes系统中的持久实体。Kubernetes使用这些实体来表示集群的状态.
具体来说,他们可以描述:
Kubernetes 架构
Kubernetes 架构由节点,控制面到节点通信, 控制器, 云控制器管理器组成.
master 流程图
节点
节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。 每个节点包含运行 Pods 所需的服务, 这些 Pods 由 控制面 负责管理.
节点上的组件包括 kubelet、 容器运行时以及 kube-proxy。
节点状态
可以使用 kubectl 来查看节点状态和其他细节信息:
kubectl describe node <�节点名称>
一个节点包含以下信息:
控制面到节点通信
控制器
在 Kubernetes 中,控制器通过监控集群 的公共状态,并致力于将当前状态转变为期望的状态。
举个例子: 当前室内温度为20度, 我们通过调节遥控器,使其温度上升至24度, 这20度到24度的变化即为让其从当前状态接近期望状态。
控制器模式分为直接控制和通过API服务器来控制.
云控制器管理器
云控制器管理器是指嵌入特定云的控制逻辑的 控制平面组件。
云控制器管理器允许您链接聚合到云提供商的应用编程接口中, 并分离出相互作用的组件与您的集群交互的组件。
云控制器管理器中的控制器包括:
Kubernetes 安全性
云原生安全
云原生安全4个C: 云(Cloud)、集群(Cluster)、容器(Container)和代码(Code)
云原生安全模型的每一层都是基于下一个最外层,代码层受益于强大的基础安全层(云、集群、容器)。
我们无法通过在代码层解决安全问题来为基础层中糟糕的安全标准提供保护。
基础设施安全
Kubetnetes 基础架构关注领域
建议
通过网络访问 API 服务(控制平面)
所有对 Kubernetes 控制平面的访问不允许在 Internet 上公开,同时应由网络访问控制列表控制,该列表包含管理集群所需的 IP 地址集。
通过网络访问 Node(节点)
节点应配置为 仅能 从控制平面上通过指定端口来接受(通过网络访问控制列表)连接,以及接受 NodePort 和 LoadBalancer 类型的 Kubernetes 服务连接。
如果可能的话,这些节点不应完全暴露在公共互联网上。
Kubernetes 云访问提供商的 API
每个云提供商都需要向 Kubernetes 控制平面和节点授予不同的权限集。
为集群提供云提供商访问权限时,最好遵循对需要管理的资源的最小特权原则。
Kops 文档提供有关 IAM 策略和角色的信息。
访问 etcd
对 etcd(Kubernetes 的数据存储)的访问应仅限于控制平面。
根据配置情况,你应该尝试通过 TLS 来使用 etcd。
更多信息可以在 etcd 文档中找到。
etcd 加密
在所有可能的情况下,最好对所有驱动器进行静态数据加密,但是由于 etcd 拥有整个集群的状态(包括机密信息),因此其磁盘更应该进行静态数据加密。
集群组件安全
容器安全
代码安全
Kubernetes架构常见问题
Kubernetes ATTACK 矩阵
信息泄露
云账号AK泄露
API凭证(即阿里云AccessKey)是用户访问内部资源最重要的身份凭证。用户调用API时的通信加密和身份认证会使用API凭证.
API凭证是云上用户调用云服务API、访问云上资源的唯一身份凭证。
API凭证相当于登录密码,用于程序方式调用云服务API.
k8s configfile泄露
kubeconfig文件所在的位置:
$HOME//config
Kubeconfig文件包含有关Kubernetes集群的详细信息,包括它们的位置和凭据。
云厂商会给用户提供该文件,以便于用户可以通过kubectl对集群进行管理. 如果攻击者能够访问到此文件(如办公网员工机器入侵、泄露到Github的代码等),就可以直接通过API Server接管K8s集群,带来风险隐患。
Master节点SSH登录泄露
常见的容器集群管理方式是通过登录Master节点或运维跳板机,然后再通过kubectl命令工具来控制k8s。
云服务器提供了通过ssh登陆的形式进行登陆master节点.
若Master节点SSH连接地址泄露,攻击者可对ssh登陆进行爆破,从而登陆上ssh,控制集群.
容器组件未鉴权服务
Kubernetes架构下常见的开放服务指纹如下:
注:前六个重点关注: 一旦被控制可以直接获取相应容器、相应节点、集群权限的服务
了解各个组件被攻击时所造成的影响
组件分工图:
假如用户想在集群里面新建一个容器集合单元, 流程如下:
攻击apiserver
apiserver介绍:在Kubernetes中,对于未鉴权对apiserver, 能访问到 apiserver 一般情况下就能获取了集群的权限.
在攻击者眼中Kubernetes APIServer
默认情况下apiserver都有鉴权:
未鉴权配置如下:
对于这类的未鉴权的设置来说,访问到 apiserver 一般情况下就获取了集群的权限:
如何通过apiserver来进行渗透,可参考:攻击kubelet
每一个Node节点都有一个kubelet(每个节点上运行的代理)服务,kubelet监听了,,等端口。
端口,是kubelet与apiserver进行通信对主要端口, 通过该端口,kubelet可以知道当前应该处理的任务.该端口在最新版Kubernetes是有鉴权的, 但在开启了接受匿名请求的情况下,不带鉴权信息的请求也可以使用提供的能力, 在Kubernetes早期,很多挖矿木马基于该端口进行传播.
在配置文件中,若进行如下配置,则可能存在未授权访问漏洞.
/var/bin/kubulet/config/yaml
若端口存在未授权访问漏洞,我们可以直接访问/pods进行查看
根据在pods中获取的信息,我们可以在容器中执行命令
curl -Gks{namespace}/{podname}/{containername} \-d input=1 -d output=1 -d tty=1 \-d command=whoami
上述命令得到websocket地址,连接websocket得到命令结果:
使用wscat工具连接websocket
wscat -c “{websocket}” –no-check
即可得到我们执行命令的结果.
获取token
/var/run/secrets//serviceaccount
然后即可访问kube-api server,获取集群权限
curl -ks -H Authorization: Bearer \ ttps://master:6443/api/v1/namespaces/{namespace}/secrets
攻击kubelet总体步骤如下:
攻击dashboard
dashboard登陆链接如下:
界面如下:
dashboard是Kubernetes官方推出的控制Kubernetes的图形化界面.在Kubernetes配置不当导致dashboard未授权访问漏洞的情况下,通过dashboard我们可以控制整个集群。
默认情况下, dashboard是需要进行鉴权操作的,当用户开启了enable-skip-login时可以在登录界面点击Skip跳过登录进入dashboard.
通过skip登陆的dashboard默认是没有操作集群的权限,因为Kubernetes使用RBAC(Role-based access control)机制进行身份认证和权限管理,不同的serviceaccount拥有不同的集群权限。
但有些开发者为了方便或者在测试环境中会为Kubernetes-dashboard绑定cluster-admin这个ClusterRole(cluster-admin拥有管理集群的最高权限).
为Kubernetes-dashboard绑定cluster-admin 设置如下:
后通过skip登陆dashboard便有了管理集群的权限.
创建Pod控制node节点,该pod主要是将宿主机根目录挂载到容器tmp目录下。
新建一个Pod如下:
通过该容器的tmp目录管理node节点的文件
攻击etcd
Kubernetes默认使用了etcd v3来存储数据, 若能naetcd对内暴露2379端口,本地127.0.0.1可免认证访问. 其他地址要带—endpoint参数和cert进行认证。
未授权访问流程:
攻击docker remote api(Docker daemon公网暴露)
2375是docker远程操控的默认端口,通过这个端口可以直接对远程的docker 守护进程进行操作。Docker 守护进程默认监听2375端口且未鉴权.
当机器以方式启动daemon时,可以在外部机器对该机器的docker daemon进行直接操作:
docker daemon -H=0.0.0.0:2375
之后依次执行systemctl daemon-reload、systemctl restart docker
外部主机使用 即可操作暴露2375端口的主机.
因此当你有访问到目标Docker API 的网络能力或主机能力的时候,你就拥有了控制当前服务器的能力。我们可以利用Docker API在远程主机上创建一个特权容器,并且挂载主机根目录到容器.
检测目标是否存在docker api未授权访问漏洞的方式也很简单,访问路径是否含有ContainersRunning、DockerRootDir等关键字。
攻击kubectl proxy
二次开发所产生的问题
管理Kubernetes无论是使用 kubectl 或 Kubernetes dashboard 的UI功能,其实都是间接在和 APIServer 做交互.
如果有需求对k8s进行二次开发的话,大部分的开发功能请求了 APIServer 的 Rest API 从而使功能实现的。
例如:
低代码开发可以解决那些问题?
根据Forrester在2014年提出的定义,“低代码”是指“利用很少或几乎不需要写代码就可以快速开发应用,并可以快速配置和部署软件的一种技术和工具”!
低代码-LowCode
1、低代码开发平台可以帮助企业解决哪些问题?
对此T研究发布的《2020年中国低代码平台指数测评报告》给了我们答案,主要是三方面:
A、降门槛。
低代码开发平台基于业务形式进行代码封装,并提供了可视化、可拖拽的便捷式操作,减少了大量单纯的代码编程操作,降低了开发门槛。
B、促交付。
多数应用可通过简单拼搭、配置完成,开发难度降低;复用成熟代码降低了代码出错风险,,应用开发周期缩短,交付效率提升。
C、固基础。
低代码平台汇集开发资源,促进系统流程的标准化、规范化和统一化。
支持企业应用的构建、分发、安装、运维、升级,快速响应业务需求、支持企业加速数字化转型。
低代码平台助力企业
2、用户使用低代码开发平台主要在哪些方面?
随着对客户需求理解的深入挖掘与不断探索,个性化、定制服务等业务的不断出现,应用开发/更新、部署的周期不断缩短,企业对应用持续交付的诉求愈发明显。根据T研究的调查,用户最为关心的低代码平台功能特质主要包括:可视化流程设计能力、复杂业务逻辑设计能力、动态报表设计能力!
低代码助力终端用户
一切管理和信息化解决方案的本质是提升效率,低代码开发平台以其创新的思维和视角提供了软件开发提速和业务变革的新路径,必将成为企业的赋能神器!