cilium/operatorCilium是一个开源软件,用于提供和透明地保护应用工作负载(如应用容器或进程)之间的网络连接和负载均衡。Cilium在第3/4层运行,提供传统网络和安全服务,并在第7层保护和保障现代应用协议(如HTTP、gRPC和Kafka)的使用。Cilium已集成到Kubernetes和Mesos等常见编排框架中。
一种名为eBPF的新Linux内核技术是Cilium的基础。它支持在各种集成点(如网络IO、应用程序套接字和跟踪点)将eBPF字节码动态插入Linux内核,以实现安全、网络和可见性逻辑。eBPF高效且灵活。要了解更多关于eBPF的信息,请访问eBPF.io。
!Cilium概述
能够保护现代应用协议,如REST/HTTP、gRPC和Kafka。传统防火墙在第3层和第4层运行。特定端口上运行的协议要么完全受信任,要么被完全阻止。Cilium提供了对单个应用协议请求进行过滤的能力,例如:
GET和路径/public/.*的HTTP请求。拒绝所有其他请求。service1在Kafka主题topic1上生产,service2在topic1上消费。拒绝所有其他Kafka消息。X-Token: [0-9]+。现代分布式应用依赖于应用容器等技术,以促进部署的灵活性和按需扩展。这导致在短时间内启动大量应用容器。典型的容器防火墙通过过滤源IP地址和目标端口来保护工作负载。此概念要求每当在集群中的任何位置启动容器时,所有服务器上的防火墙都要进行操作。
为了避免这种限制扩展的情况,Cilium为共享相同安全策略的应用容器组分配安全标识。然后,该标识与应用容器发出的所有网络数据包相关联,允许在接收节点验证标识。安全标识管理使用键值存储执行。
基于标签的安全性是集群内部访问控制的首选工具。为了保护与外部服务的访问,支持传统的基于CIDR的入口和出口安全策略。这允许将应用容器的访问限制到特定IP范围。
一个简单的平面第3层网络,能够跨多个集群连接所有应用容器。通过使用主机范围分配器,IP分配保持简单。这意味着每个主机可以分配IP,而无需主机之间的任何协调。
支持以下多节点网络模型:
覆盖网络(Overlay):基于封装的虚拟网络,跨越所有主机。目前内置VXLAN和Geneve,但可以启用Linux支持的所有封装格式。
使用场景:此模式具有最小的基础设施和集成要求。它几乎可以在任何网络基础设施上工作,唯一的要求是主机之间的IP连接,这通常已经具备。
原生路由(Native Routing):使用Linux主机的常规路由表。网络需要能够路由应用容器的IP地址。
使用场景:此模式适用于高级用户,需要对底层网络基础设施有一定的了解。此模式适用于:
Cilium为应用容器之间以及与外部服务的流量实现分布式负载均衡,并且能够完全替换kube-proxy等组件。负载均衡在eBPF中使用高效的哈希表实现,允许几乎无限的扩展。
对于南北向负载均衡,Cilium的eBPF实现针对最大性能进行了优化,可以附加到XDP(快速数据路径),并支持直接服务器返回(DSR)以及Maglev一致性哈希(如果负载均衡操作不在源主机上执行)。
对于东西向负载均衡,Cilium在Linux内核的套接字层(例如TCP连接时)执行高效的服务到后端转换,从而可以避免较低层中的每个数据包NAT操作开销。
Cilium通过基于EDT(最早离开时间)的高效速率限制,为离开节点的容器流量实现带宽管理。与传统方法(如带宽CNI插件中使用的HTB(层次令牌桶)或TBF(令牌桶过滤器))相比,这允许显著减少应用程序的传输尾部延迟,并避免在多队列NIC下的锁定。
获得可见性和排除问题的能力是任何分布式系统运行的基础。虽然我们学会了喜爱像tcpdump和ping这样的工具,并且它们将永远在我们心中占据特殊位置,但我们努力提供更好的故障排除工具。这包括提供以下功能的工具:
具有元数据的事件监控:当数据包被丢弃时,该工具不仅报告数据包的源IP和目标IP,还提供发送者和接收者的完整标签信息以及许多其他信息。
策略决策跟踪:为什么数据包被丢弃或请求被拒绝。策略跟踪框架允许跟踪运行中的工作负载以及基于任意标签定义的策略决策过程。
通过Prometheus导出指标:关键指标通过Prometheus导出,以便与现有仪表板集成。
Hubble_:专门为Cilium编写的可观测性平台。它提供服务依赖关系图、操作监控和警报,以及基于流日志的应用程序和安全可见性。
Cilium适用于需要安全网络连接和服务网格功能的容器化环境,特别适合:
Cilium社区为最后三个主要版本维护次要稳定版本。之前主要版本的旧Cilium稳定版本被视为EOL。
要升级到新的主要版本,请参考Cilium升级指南。
下面列出了当前维护的发布分支及其最新次要版本、相应的镜像拉取标签及其发布说明:
| 版本分支 | 发布日期 | 镜像标签 | 发布说明 | 公告 |
|---|---|---|---|---|
v1.8 | 2020-09-30 | docker.io/cilium/cilium:v1.8.4 | 发布说明 | 公告 |
v1.7 | 2020-09-30 | docker.io/cilium/cilium:v1.7.10 | 发布说明 | 公告 |
v1.6 | 2020-09-30 | docker.io/cilium/cilium:v1.6.12 | 发布说明 | 公告 |
bashdocker run -d --name cilium \ --privileged \ --net=host \ --restart=always \ -v /lib/modules:/lib/modules \ -v /run/cilium:/run/cilium \ -v /var/run/docker.sock:/var/run/docker.sock \ cilium/cilium:v1.8.4 \ agent \ --node=my-node \ --kv-store=etcd \ --kv-store-opt=etcd.config=/etc/etcd/config.yml \ --cluster-pool-ipv4-cidr=10.2.0.0/16 \ --cluster-pool-ipv4-mask-size=24
使用helm部署Cilium:
bashhelm repo add cilium [***] helm install cilium cilium/cilium --version 1.8.4 --namespace kube-system
yamlversion: '3' services: cilium-agent: image: cilium/cilium:v1.8.4 container_name: cilium-agent privileged: true network_mode: host restart: always volumes: - /lib/modules:/lib/modules - /run/cilium:/run/cilium - /var/run/docker.sock:/var/run/docker.sock - ./etcd-config.yml:/etc/etcd/config.yml command: | agent --node=my-node --kv-store=etcd --kv-store-opt=etcd.config=/etc/etcd/config.yml --cluster-pool-ipv4-cidr=10.2.0.0/16 --cluster-pool-ipv4-mask-size=24 etcd: image: quay.io/coreos/etcd:v3.4.3 container_name: etcd restart: always environment: - ETCD_LISTEN_CLIENT_URLS=[***] - ETCD_ADVERTISE_CLIENT_URLS=[***] ports: - "2379:2379" volumes: - etcd-data:/var/lib/etcd volumes: etcd-data:
| 参数 | 描述 | 示例值 |
|---|---|---|
--node | 节点名称 | my-node |
--kv-store | 键值存储类型 | etcd, consul |
--cluster-pool-ipv4-cidr | IPv4地址池CIDR | 10.2.0.0/16 |
--cluster-pool-ipv4-mask-size | IPv4子网掩码大小 | 24 |
--tunnel | 隧道模式 | vxlan, geneve, disabled |
--ipv6-disabled | 禁用IPv6 | true, false |
--policy-enforcement-mode | 策略执行模式 | default, always, never |
| 环境变量 | 描述 | 默认值 |
|---|---|---|
CILIUM_DEBUG | 启用调试日志 | false |
CILIUM_K8S_NAMESPACE | Kubernetes命名空间 | kube-system |
CILIUM_CLUSTER_NAME | 集群名称 | default |
CILIUM_LOCK_FILE | 锁文件路径 | /var/run/cilium/lock |
Berkeley Packet Filter (BPF)是一个Linux内核字节码解释器,最初引入用于过滤网络数据包,例如用于tcpdump和套接字过滤器。BPF指令集和周围的架构最近进行了重大改进,增加了哈希表和数组等数据结构来保存状态,以及支持数据包修改、转发、封装等附加操作。此外,LLVM的编译器后端允许用C编写程序并编译成BPF指令。内核验证器确保BPF程序可以安全运行,JIT编译器将BPF字节码转换为特定CPU架构的指令以提高执行效率。BPF程序可以在内核中的各个挂钩点运行,例如传入数据包、传出数据包、系统调用、kprobes、uprobes、跟踪点等。
BPF继续发展,并在每个新的Linux版本中获得额外的功能。Cilium利用BPF执行核心数据路径过滤、修改、监控和重定向,并需要Linux内核版本4.8.0或更新版本(最新的当前稳定Linux内核是4.14.x)。
许多Linux发行版,包括CoreOS、Debian、Docker的LinuxKit、Fedora、openSUSE和Ubuntu,已经发布了内核版本>=4.8.x。您可以通过运行uname -a检查Linux内核版本。如果您还没有运行足够新的内核,请查看Linux发行版的文档,了解如何运行Linux内核4.9.x或更高版本。
XDP是演进的又一步,它允许从网络驱动程序运行特定类型的BPF程序,并直接访问数据包的DMA缓冲区。根据定义,这是软件堆栈中最早的可能点,可以附加程序以允许在Linux内核网络数据路径中实现可编程的高性能数据包处理器。
加入Cilium Slack频道,与Cilium开发人员和其他Cilium用户聊天。这是了解Cilium、提问和分享经验的好地方。
有关所有SIG及其会议时间的列表,请参见特别兴趣小组。
cilium用户空间组件根据Apache License, Version 2.0授权。BPF代码模板根据General Public License, Version 2.0授权。
_.. _Hubble: []
_.. _CNI: []
_.. _libnetwork: []
_.. _containerd: []
_.. _service: []
_.. _Ingress: []
_.. _NetworkPolicy: []
_.. _Labels: []
_.. _Layer 7 Policy: []
_.. _BPF and XDP Reference Guide: []

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务