cilium 是基于 eBPF 模式下的 kubernetes 网络服务,它可以替代 kube-proxy 全部功能或托管服务,性能与 calico 基本一致,但由于项目较新,使用时有较多配置问题,需要深入研究解决相关依赖配置问题。

替代 kube-proxy 不会监听端口, 它会直接通过内核接口获取到目标端口的流量。

安装可通过 Helm 直接部署:


​$ helm repo add cilium https:​​​​//helm​​​​.cilium.io/​


​$ helm template cilium cilium​​​​/cilium​​ ​​--version 1.10.1 \​

​--namespace kube-system \​

​--​​​​set​​ ​​=​​​​"cilium-a"​​ ​​\​

​--​​​​set​​ ​​cluster.​​​​id​​​​=1 \​

​--​​​​set​​ ​​cni.binPath=​​​​"/opt/cni/bin"​​ ​​\​

​--​​​​set​​ ​​cni.confPath=​​​​"/etc/cni/net.d"​​ ​​\​

​--​​​​set​​ ​​daemon.runPath=​​​​"/var/run/cilium"​​ ​​\​

​--​​​​set​​ ​​debug.enabled=​​​​false​​ ​​\​

​--​​​​set​​ ​​datapathMode=​​​​"veth"​​ ​​\​

​--​​​​set​​ ​​nodeinit.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​externalIPs.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​nodePort.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hostPort.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hostServices.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​pullPolicy=IfNotPresent \​

​--​​​​set​​ ​​config.ipam=cluster-pool \​

​--​​​​set​​ ​​prometheus.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​prometheus.port=9990 \​

​--​​​​set​​ ​​peratorPrometheus.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hubble.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hubble.listenAddress=​​​​":4244"​​ ​​\​

​--​​​​set​​ ​​hubble.relay.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hubble.metrics.enabled=​​​​"{dns,drop,tcp,flow,port-distribution,icmp,http}"​​ ​​\​

​--​​​​set​​ ​​hubble.ui.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hubble.tls.enabled=​​​​false​​ ​​\​

​--​​​​set​​ ​​kubeProxyReplacement=strict \​

​--​​​​set​​ ​​k8sServiceHost=192.168.122.86 \​

​--​​​​set​​ ​​nodePort.range=​​​​"10\,65534"​​ ​​\​

​#--set devices="eth0" \​

​--​​​​set​​ ​​nodePort.directRoutingDevice=​​​​"eth0"​​ ​​\​

​--​​​​set​​ ​​ipam.operator.clusterPoolIPv4PodCIDR=10.0.0.0​​​​/8​​ ​​\​

​--​​​​set​​ ​​ipam.operator.clusterPoolIPv4MaskSize=24 \​

​--​​​​set​​ ​​k8sServicePort=6443​


Cil 工具安装:


​$ curl -L --remote-name-all https:​​​​//github​​​​.com​​​​/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64​​​​.​​​​tar​​​​.gz{,.sha256sum}​

​$ sha256sum --check cilium-linux-amd64.​​​​tar​​​​.gz.sha256sum​

​$ ​​​​sudo​​ ​​tar​​ ​​xzvfC cilium-linux-amd64.​​​​tar​​​​.gz ​​​​/usr/local/bin​

​$ ​​​​rm​​ ​​cilium-linux-amd64.​​​​tar​​​​.gz{,.sha256sum}​


在节点数量大于 500 时建议使用外部的 kvstore 进行存储。

如需使用 kvstore 则通过如下命令部署:


​$ helm template cilium cilium​​​​/cilium​​ ​​--version 1.10.1 \​

​--namespace kube-system \​

​--​​​​set​​ ​​=​​​​"cilium-a"​​ ​​\​

​--​​​​set​​ ​​cluster.​​​​id​​​​=1 \​

​--​​​​set​​ ​​cni.binPath=​​​​"/opt/cni/bin"​​ ​​\​

​--​​​​set​​ ​​cni.confPath=​​​​"/etc/cni/net.d"​​ ​​\​

​--​​​​set​​ ​​daemon.runPath=​​​​"/var/run/cilium"​​ ​​\​

​--​​​​set​​ ​​debug.enabled=​​​​false​​ ​​\​

​--​​​​set​​ ​​datapathMode=​​​​"veth"​​ ​​\​

​--​​​​set​​ ​​nodeinit.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​externalIPs.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​nodePort.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hostPort.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​pullPolicy=IfNotPresent \​

​--​​​​set​​ ​​config.ipam=cluster-pool \​

​--​​​​set​​ ​​prometheus.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​prometheus.port=9990 \​

​--​​​​set​​ ​​peratorPrometheus.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hubble.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hubble.listenAddress=​​​​":4244"​​ ​​\​

​--​​​​set​​ ​​hubble.relay.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hubble.metrics.enabled=​​​​"{dns,drop,tcp,flow,port-distribution,icmp,http}"​​ ​​\​

​--​​​​set​​ ​​hubble.ui.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​hubble.tls.enabled=​​​​false​​ ​​\​

​--​​​​set​​ ​​kubeProxyReplacement=strict \​

​--​​​​set​​ ​​k8sServiceHost=192.168.122.86 \​

​--​​​​set​​ ​​ipam.operator.clusterPoolIPv4PodCIDR=10.0.0.0​​​​/8​​ ​​\​

​--​​​​set​​ ​​ipam.operator.clusterPoolIPv4MaskSize=24 \​

​--​​​​set​​ ​​k8sServicePort=6443 \​

​--​​​​set​​ ​​etcd.enabled=​​​​true​​ ​​\​

​--​​​​set​​ ​​etcd.endpoints[0]=​​​​"​​https://etcd-endpoint1:2379​​"​​ ​​\​

​--​​​​set​​ ​​etcd.endpoints[1]=​​​​"​​https://etcd-endpoint2:2379​​"​​ ​​\​

​--​​​​set​​ ​​etcd.endpoints[2]=​​​​"​​https://etcd-endpoint3:2379​​"​​ ​​\​

​--​​​​set​​ ​​etcd.clusterDomai=​​​​"cluster.local"​​ ​​\​

​--​​​​set​​ ​​identityAllocationMode=kvstore​


​$ kubectl create secret generic -n kube-system cilium-etcd-secrets \​

​--from-​​​​file​​​​=etcd-client-ca.crt=ca.crt \​

​--from-​​​​file​​​​=etcd-client.key=client.key \​

​--from-​​​​file​​​​=etcd-client.crt=client.crt​


集群部署:


​$ cilium clustermesh ​​​​enable​​ ​​--context kubernetes-admin@kubernetes --service-​​​​type​​ ​​NodePort​

​$ cilium clustermesh ​​​​enable​​ ​​--context kubernetes-admin2@kubernetes2 --service-​​​​type​​ ​​NodePort --create-ca kubernetes-admin@kubernetes​

​$ cilium clustermesh connect --context kubernetes-admin@kubernetes --destination-context kubernetes-admin2@kubernetes2​

​$ cilium clustermesh status --wait​


清除集群:


​$ cilium clustermesh disable​

​$ cilium clustermesh disable --context kubernetes-admin-b@kubernetes-b​


清除集群配置目前不彻底,建议测试环境。

目前集群功能比较鸡肋,在多集群下如果域名后缀不一样,可能会引发 bug 。

Kubernetes Cilium_服务器Kubernetes Cilium_服务器_02

比如说,香港天域国际,香港本土服务器供应公司,业界领先的内核优化和热补丁技术,快速修复宿主机/云主机内核,针对底层硬件,尤其是内存,内存是硬件宕机故障的大头,则通过内核技术把内存硬件故障给隔离开,避免它引发宕机。同时,服务器放开带宽给用户使用,给用户极致的体验。服务器采用双上联网络架构,即使某台交换机出现异常,云服务器也能正常工作。超高的服务水平,极致的合理定价,7x24小时用户至上的服务标准。访问http://iis3.com/server/获取。

部分日常维护使用的命令:


​$ kubectl ​​​​exec​​ ​​-it -n kube-system cilium-s4cg7 -- cilium status --verbose​

​$ kubectl ​​​​exec​​ ​​-it -n kube-system cilium-s4cg7 -- cilium status | ​​​​grep​​ ​​KubeProxyReplacement​

​$ kubectl ​​​​exec​​ ​​-it -n kube-system cilium-s4cg7 -- cilium service list​

​$ kubectl ​​​​exec​​ ​​-it -n kube-system cilium-pf4cc -- cilium status --verbose | ​​​​grep​​ ​​XDP​

​$ kubectl ​​​​exec​​ ​​-it -n kube-system cilium-pf4cc -- cilium status --verbose | ​​​​grep​​ ​​HostPort​