【kubernetes/k8s概念】Cilium架构与概念
Cilium着重强调了其在网络安全上的优势,可以透明的对Kubernetes等容器管理平台上的应用程序服务之间的网络连接进行安全防护。Cilium在设计和实现上,基于Linux的一种新的内核技术eBPF,可以在Linux内部动态插入强大的安全性、可见性和网络控制逻辑,相应的安全策略可以在不修改应用程序代码或容器配置的情况下进行应用和更新。1. Cilium 架构...
Cilium着重强调了其在网络安全上的优势,可以透明的对Kubernetes等容器管理平台上的应用程序服务之间的网络连接进行安全防护。
Cilium在设计和实现上,基于Linux的一种新的内核技术eBPF,可以在Linux内部动态插入强大的安全性、可见性和网络控制逻辑,相应的安全策略可以在不修改应用程序代码或容器配置的情况下进行应用和更新。
eBPF使用场景包括
XDP
流量控制
防火墙
网络包跟踪
内核探针
cgroups
bcc
bpftools
1. Cilium 架构
Cilium 位于容器编排系统和 Linux Kernel 之间,向上可以通过容器编排系统为容器进行网络以及相应的安全策略进行配置,向下可以在 Linux 内核 hook 点挂载 eBPF 程序,来控制容器网络数据的转发以及安全策略的实施。
1.1 Cilium 组件
Agent, cilium-agent 运行在集群的每一个 node 节点,接收上层的配置,包括通过 kubernetes 或者 API 来定义网络,服务负载均衡,网络策略,可见性和监控需求。cilium-agent 监听来自编排系统(例如 kubernetes)的事件,来了解容器或者 workloads 启动和停止。通过 CNI 插件与 CRI 和 kubernetes 交互, 生成 eBPF 程序,编译字节码,attach 到内核
Client(CLI), 与 cilium-agent 一起安装的命令行工具,它与运行在同一节点上的 cilium-agent 的 REST API 交互。 CLI 允许检查本地 agent 的状态。 它还提供了直接访问 eBPF maps 以验证其状态的工具。
Operator, Cilium Operator 负责管理集群,逻辑上应该为整个集群处理一次,而不是为集群中的每个节点处理一次。 主要是节点之间资源信息的同步、确保 Pod DNS 更新管理、集群 NetworkPolicy 的管理和更新等。
CNI Plugin,配置容器网络, 使村里通网
2. Cilium 部署安装
2.1 系统需求
Requirement | Minimum Version | In cilium container |
---|---|---|
Linux kernel | >= 4.9.17 | no |
Key-Value store (etcd) | >= 3.1.0 | no |
Key-Value store (consul) | >= 0.6.4 | no |
clang+LLVM | >= 10.0 | yes |
iproute2 | >= 5.0.0 [1] | yes |
[1] | (1, 2) Requires support for eBPF templating as documented below. |
2.2 Mounted eBPF filesystem
# mount bpffs /sys/fs/bpf -t bpf
或者在 /etc/fstab 加入开机 mount 操作
bpffs /sys/fs/bpf bpf defaults 0 0
2.3 安装 cilium
kubectl create -f https://raw.githubusercontent.com/cilium/cilium/v1.8.8/install/kubernetes/quick-install.yaml
注意: 如果未安装 kube-proxy 组件,需要修改 configmap cilium-config 配置添加 k8s-api-server: https://172.16.236.230:6443, 否则 cilium 连不到 kube-apiserver
2.4 取消 kube-proxy 组件
Cilium 宣称已经全面实现取代 kube-proxy 的功能,包括ClusterIP, NodePort, ExternalIPs 和 LoadBalancer, 验证是否可以停止 kube-proxy 组件
kubectl exec -it -nkube-system cilium-8vds2 -- cilium status | grep KubeProxyReplacement
KubeProxyReplacement: Probe [NodePort (SNAT, 30000-32767), ExternalIPs, HostReachableServices (TCP, UDP)]
查看Cilium保存的应用服务访问列表
> kubectl exec -it -n kube-system [Cilium-agent-pod] -- cilium service list
将kube-proxy nodeSelector设置为不存在的node,也就是禁止kube-proxy, 该步骤可选执行,如果不需要 kube-proxy
kubectl patch ds -n kube-system kube-proxy -p '{"spec":{"template":{"spec":{"nodeSelector":{"non-calico": "true"}}}}}'
参考:
https://docs.cilium.io/en/v1.10/concepts/overview/
https://docs.cilium.io/en/v1.10/concepts/networking/routing/
更多推荐
所有评论(0)