概述
cilium都近期比较火的一个网络插件,它通过将ebpf技术引入网络插件中用于满足容器工作负载的新可伸缩性,安全性和可见性要求。
前置条件
ebpf依赖内核技术,所以需要保证以下内核版本
1 、kernel版本 >= 4.9.17
软件 | 版本 |
---|---|
k3s | v1.18.6+k3s1 |
cilium | 1.8 |
部署k3s
采用两节点部署k3s,节点一角色为master+worker,节点二角色为worker
部署master
1 | curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666 --docker --no-flannel |
获取连接master的token信息
1 | cat /var/lib/rancher/k3s/server/node-token |
部署worker
1 | curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh| INSTALL_K3S_EXEC='--docker --no-flannel' INSTALL_K3S_MIRROR=cn K3S_URL=https://master-ip:6443 K3S_TOKEN=xxx sh - |
查看节点部署
1 | kubectl get node |
此时因为没有部署网络插件所以节点状态为NotReady状态
所有节点执行挂载bpf文件系统
1 | sudo mount bpffs -t bpf /sys/fs/bpf |
方式一:快速部署cilium网络插件
1 | kubectl create -f https://raw.githubusercontent.com/cilium/cilium/v1.8/install/kubernetes/quick-install.yaml |
查看组件状态
1 | kubectl get pod -n kube-system |
测试网络连通性
1 | kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/v1.8/examples/kubernetes/connectivity-check/connectivity-check.yaml |
主要测试二层网络联通性和三层网络联通性 ,状态都为running表示正常
cilium默认跨主机网络通信是通过VXLAN实现的
1 | kubectl get pod |
删除测试用例
1 | kubectl delete -f https://raw.githubusercontent.com/cilium/cilium/v1.8/examples/kubernetes/connectivity-check/connectivity-check.yaml |
方式二:Helm部署方式cilium网络插件
因为cilium1.8开始hubble功能集成到Cilium的helm-chart中了,所以在1.8版本cilium需要使用hubble需要在chart中启用,部署方式分两种
方式一:Cilium + cilium-etcd-operator
方式二:cilium+自带etcd
因为k3s默认使用SQLite3做为后端数据库所以这里使用方式一方式进行安装
hubble主要用于
下载helm客户端
1 | wget https://get.helm.sh/helm-v3.3.0-linux-amd64.tar.gz |
添加cilium的repo
1 | helm repo add cilium https://helm.cilium.io/ |
部署cilium和hubble
1 | helm install cilium cilium/cilium --version 1.8.2 \ |
使用NodePort方式对外暴露
1 | kubectl patch svc hubble-ui -p '{"spec": {"type": "NodePort"}}' -n kube-system |
访问hubble-UI
通过hubble可以非常清晰看到各个应用的互相连接关系和访问信息。
总结:
整体部署和使用下来功能是非常强大,目前看社区都有往ebpf方向走,包括向calico目前也有个ebpf的模式,通过ebpf可以提升整体网络的性能和细粒化网络流量的控制和可视化,后续将以这个为方向深入理解。但带来的问题就是对于排错对比与calico-bgp或flannel-vxlan会更加复杂,在部署后出现过一次大面积瘫痪情况,没有找到是k3s问题和cilium问题,后面将集群和cilium重新部署就好了。