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 系统需求

RequirementMinimum VersionIn cilium container
Linux kernel>= 4.9.17no
Key-Value store (etcd)>= 3.1.0no
Key-Value store (consul)>= 0.6.4no
clang+LLVM>= 10.0yes
iproute2>= 5.0.0 [1]yes
[1](12) 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/

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐