Kubernetes Cilium

270 阅读2分钟

 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 cluster.name=``"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 cluster.name=``"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 。

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