背景
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
组件基本信息
内容
本节我们分享一个基于Golang实现的用于在应用程序容器或进程等应用程序工作负载之间提供并透明地确保网络连接和负载平衡组件cilium,Cilium 在第 3/4 层运行以提供传统的网络和安全服务,并在第 7 层运行以保护和保护现代应用程序协议(如 HTTP、gRPC 和 Kafka)的使用。Cilium 被集成到 Kubernetes 等常见的编排框架中。 Cilium 的基础是基于ebpf的新 Linux 内核技术实现。它支持在各种集成点(例如:网络 IO、应用程序套接字和跟踪点)将 eBPF 字节码动态插入到 Linux 内核中,以实现安全、网络和可见性逻辑。eBPF 高效且灵活。要了解有关 eBPF 的更多信息,请访问eBPF.io。
image.png
image.png
功能概述 透明地保护和保护 API 能够保护现代应用程序协议,例如 REST/HTTP、gRPC 和 Kafka。传统防火墙在第 3 层和第 4 层运行。在特定端口上运行的协议要么完全受信任,要么完全被阻止。Cilium 提供了过滤单个应用程序协议请求的能力,例如:
GET/public/.*service1topic1service2topic1X-Token: [0-9]+请参阅我们文档中的第 7 层策略部分,以获取支持的协议的最新列表以及有关如何使用它的示例。 基于身份的安全服务到服务通信 现代分布式应用程序依赖于应用程序容器等技术来促进部署的敏捷性和按需扩展。这导致在短时间内启动大量应用程序容器。典型的容器防火墙通过过滤源 IP 地址和目标端口来保护工作负载。这个概念要求每当容器在集群中的任何地方启动时,所有服务器上的防火墙都可以被操作。 为了避免这种限制规模的情况,Cilium 将安全身份分配给共享相同安全策略的应用程序容器组。然后,该身份与应用程序容器发出的所有网络数据包相关联,从而允许在接收节点验证身份。使用键值存储执行安全身份管理。 安全访问外部服务 基于标签的安全性是集群内部访问控制的首选工具。为了保护对外部服务的访问,支持传统的基于 CIDR 的入口和出口安全策略。这允许限制对应用程序容器的访问和来自特定 IP 范围的访问。 简单的网络 一个能够跨越多个集群的简单平面第 3 层网络连接所有应用程序容器。通过使用主机范围分配器,IP 分配保持简单。这意味着每个主机都可以分配 IP,而无需主机之间的任何协调。 支持以下多节点网络模型:
- 覆盖:跨越所有主机的基于封装的虚拟网络。目前 VXLAN 和 Geneve 已内置,但 Linux 支持的所有封装格式都可以启用。 何时使用此模式:此模式对基础架构和集成的要求最低。它几乎适用于任何网络基础设施,因为唯一的要求是通常已经给出的主机之间的 IP 连接。
- 本机路由:使用 Linux 主机的常规路由表。网络需要能够路由应用程序容器的 IP 地址。
何时使用此模式:此模式适用于高级用户,需要对底层网络基础设施有所了解。此模式适用于:
- 本机 IPv6 网络
- 与云网络路由器结合使用
- 如果您已经在运行路由守护程序
tcpdumpping- 使用元数据进行事件监控:当数据包被丢弃时,该工具不仅会报告数据包的源 IP 和目标 IP,还会提供发送方和接收方的完整标签信息以及许多其他信息。
- 通过 Prometheus 导出指标:通过 Prometheus 导出关键指标,以便与您现有的仪表板集成。
- Hubble:专为 Cilium 编写的可观测平台。它提供基于流日志的服务依赖关系图、操作监控和警报以及应用程序和安全可见性。
更多详细文档可以参考官方提供的README