云原生技术栈
Last updated
Last updated
供应层是整个云原生最底层,提供构建云原生基础设施的工具,包括了基础设施的创建、管理、配置流程的自动化、容器镜像扫描、签名和存储等,也跟安全相关提供了一些工具可用于设置和实施策略,将身份验证和授权内置到应用程序和平台中。
自动化和配置
自动化和配置工具可加快计算资源的创建和配置过程,例如创建虚拟机、网络、防火墙规则、负载均衡器等。主要解决的问题是缩短开发周期
热门项目
Chef
Puppet
Ansible
SaltStack
Terraform
KubeEdge
Ansible服务器:关注/etc/ansible/hosts文件
SaltStack远程命令执行(CVE-2020-11651/CVE-2020-11652)
Container Registry
主要是负责统一集中存储和提分发容器镜像,使开发者访问。
本质上是一种Web API,允许容器存储和检索镜像,也可以使容器扫描/签名工具来增强所存储的镜像安全性。
热门项目:
Docker Hub
Harbor
AWS/Azure/GCP 托管注册表
artifactory
Docker Hub供应链攻击
Harbor任意管理员注册(CVE-2019-1609)
安全和合规
为平台和应用程序加强、监控和实施安全性,使容器和Kubernetes环境中设置策略用于合规性,捕获错误配置,并加固容器和集群。
一些工具很少会被直接使用,例如Trivy、Claire会被Container Registry工具调用。
审计和合规
生产环境
代码扫描
漏洞扫描
镜像签名
策略制定和执行
网络层安全
热闹项目:
Falco
in-toto
Notary
Open Policy Agent (OPA)
国内项目有,青藤云安全、探真科技、小佑科技
密钥和身份管理
用于安全存储密码和其他secrets
安全分发secret或密钥的方法
身份谁和授权的服务或规范
热门项目:
Vault
Spiff
OAuth2
运行时层包含了容器在云原生环境中运行所需的一切。
云原生存储
为容器提供云原生存储
标准化容器与存储提供者之间的接口
通过备份和还原操作提供数据保护
热门项目:
Minio
CSI
Ceph+Rook
Velero
Minio:默认口令,特权管理不恰当
Ceph:linuxfoundation ceph 认证机制不恰当
容器运行时
主要解决的问题:
标准化
安全
隔离
CRI-O、gVisor运行时强化了它们的安全性边界,运行时还为容器设置了资源限制
热门项目:
Containerd
CRI-O
Kata
gVisor
Firecracker
Containerd:(CVE-2020-15257)/(RunC/CVE-2019-5736)
CRI-O任意代码执行:(CVE-2022-0811)
云原生网络
容器通过云原生网络实现相互之间及和基础设施层之间的通信。
热门项目:
Calico
Weave Net
Flannel
Antrea
NSX-T
各层组件必须相互识别以进行通信,并通过协调实现共同的目标。
编排和管理层的工具可实现自动化和弹性伸缩,基于此云原生应用程序天然具有可扩展性。
编排和调度
编排和调度是指在集群中运行和管理容器,集群是通过网络连接的一组机器。
容器编排器大多数是指Kubernetes,容器和Kubernetes是云原生架构的核心
Kubernetes 做的事情是“期望状态协调”:将集群中容器的当前状态与期望状态匹配。
该状态需持续与实际状态进行比较。如果预期状态与实际状态不匹配,Kubernetes 会通过创建或销毁对象来进行协调
目的是允许将多个不同的计算机作为一个资源池进行管理,并以声明式方式管理它们
Kubernetes不是CNCF唯一的编排器,另外两个孵化项目:Crossplane、Volcano
热门项目:
Kubernetes
Docker Swarm
Mesos
Kubernetes:(CVE-2018-1002105/远程特权提升漏洞)
协调和服务发现
现代应用程序由多个单独的服务组成,这些服务之间需要相互协作才能为最终用户提供价值。
云原生架构是动态的,总是在不断变化,服务发现工具可提供一个公共的位置来查找和识别单个的服务。
在 Kubernetes 中,为了使 Pod 可达,引入了一个称为“Service”的新抽象层。Service 为动态变化的 Pod 组提供了单一稳定的地址。
在 Kubernetes 中,当你创建了一个 Service (抽象),你就创建了一组 Pod,这些 Pod 一起通过单一 endpoint (入口)提供一个服务(功能)。
名称解析工具:CoreDNS
Coordination & Service Discovery
热门项目:
CoreDNS
Etcd
Zookeeper
Eureka
Etcd:授权不当、API未授权
远程进程调用
远程进程调用(RPC,Remote Procedure Call)是一种使应用程序相互通信的特殊技术。它代表了应用程序相互之间构建通信的一种方法。
RPC 为服务之间的通信提供了高度结构化且紧密耦合的接口。gRPC 是非常流行的 RPC 实现,已被 CNCF 采
热门项目:
gRPC
服务代理
服务代理的本质是一种“中间人”,收集网络流量的信息并对其应用规则。
服务代理的工作原理是拦截服务之间的流量,对它们执行一些逻辑,然后可能会允许流量继续前进。
代理收集关键数据,管理路由(在服务之间平均分配流量或在某些服务发生故障时重新路由),加密连接和缓存内容(减少资源消耗)。
热门项目:
Envoy
Contour
nginx
API网关
API 网关允许组织将关键功能(例如授权或限制应用程序之间的请求数量)移动到集中管理的位置。
API 网关的工作原理是拦截对后端服务的调用,执行某种增值活动,例如验证授权、收集指标或转换请求,然后执行它认为适当的操作。
同时为团队提供了可以注入业务逻辑以处理授权,速率限制和拒绝请求的地方。
热门项目:
Kong
Mulesoft
Ambassador
Kong:JWT任意用户登录、API未授权访问
服务网格
服务网格技术成为云原生技术栈中最关键的部分
服务网格在平台层的所有服务之间统一增加了可靠性,可观察性和安全性,而无需触及应用程序代码。它们与任何编程语言兼容,使开发团队可以专注于编写业务逻辑。
热门项目:
Linkerd
Consul
lstio
Consul:API远程命令执行、未授权访问
聚焦在帮助工程师构建应用程序并使其运行的工具上
数据库
帮助其他应用程序高效地存储和检索数据
热门项目:
Postgres
MySQL
Redis
Postgres:JDBC驱动远程代码执行、弱密码
Redis:未授权、主从RCE
数据流和消息传递
消息传递和数据流传输系统为编排系统进行通信提供了一个中心位置。
热门项目:
Spark
Kafka
RabbitMQ
Nats
Spark:管理员后台未授权、命令注入
RabbitMQ:弱口令
应用程序定义和镜像构建
聚集于开发的工具
聚集于运维的工具
Application Definition & Image Build
Helm
Buildpacks
Tilt
Okteto
持续集成和持续交付
持续集成(CI)和持续交付(CD)工具可通过嵌入式质量保证实现快速高效开发过程。
CI/CD 系统必须通过各种测试或验证来决定该过程是继续还是失败。
云原生 CI/CD 系统能够利用 Kubernetes 本身来构建、运行和管理 CI/CD 流程(通常称为流水线)。
Continuous Integration & Delivery
Argo
Flagger
Spinnaker
Jenkins
Jenkins:反序列化、远程代码执行、任意文件读取、任意文件写入
将每个层的工具捆绑在一起。
Kubernetes发行版
发行版是指供应商以 Kubernetes 为核心(采用未经修改的开源代码,尽管有些人对其进行了修改)并将其打包以进行重新发行
AgorKube
Canonical
OpenShift
托管Kubernetes
由云服务商提供k8s集群一部分。
Azure
Alibaba Cloud
它贯穿并观察所有层,因此在整个全景图的侧面而不是嵌在某一层。
此类别中的工具包括日志记录 (logging)、监控 (monitoring)、追踪(tracing) 和混沌工程(chaos engineering)。
日志记录
日志记录工具将收集、存储和分析这些消息,以追溯错误报告和相关数据。
日志代表应用程序有意输出的消息,它们不一定能查明给定问题的根本原因。
Fluentd
Fluentbit
Elastic Logstash
监控
监控是指对应用程序进行检测,收集、聚合和分析日志和指标,以增进我们对应用程序行为的理解。
Prometheus
Cortex
Thanos
Grafana
Grafana:任意文件读取、SSRF、弱密码
追踪
追踪是日志记录的一种专门用法,可以跟踪请求在分布式系统中移动的路径。
Jaeger
Open Tracing
混沌工程
混乱工程工具以一种可控的方式在系统中引入故障,并针对应用程序的特定实例运行特定的实验。
Chaos Mesh
Litmus Chaos