昨天试了一下cilium使用阿里云的vpc网络作为ipam,centos8是不行的,centos7就可以。
初始化kubernetes的pod网络设置尽量别与vpc网络一样,不然会缩小ipam段,不知道为什么。
cilium版本需要1.10或以上才能使用阿里云vpc作为ipam
初始化kubernetes
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=stable --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.18.108.52 --skip-phases=addon/kube-proxy,addon/coredns --ignore-preflight-errors=all;
kubeadm init phase addon coredns --image-repository registry-vpc.cn-shenzhen.aliyuncs.com/liweilun;
helm安装cilium并使用阿里云vpc作为ipam
helm repo add cilium https://helm.cilium.io;
helm uninstall cilium -n kube-system;
helm install cilium cilium/cilium --version 1.10.1 \
--namespace kube-system \
--set alibabacloud.enabled=true \
--set ipam.mode=alibabacloud \
--set enableIPv4Masquerade=false \
--set enableK8sEventHandover=true \
--set tunnel=disabled \
--set nodeinit.enabled=true \
--set nodeinit.restartPods=true \
--set wellKnownIdentities.enabled=true \
--set autoDirectNodeRoutes=true \
--set bpf.waitForMount=true \
--set bpf.preallocateMaps=true \
--set enableK8sEndpointSlice=true \
--set installNoConntrackIptablesRules=true \
--set hubble.enabled=false \
--set bpf.tproxy=true \
--set bpf.hostRouting=false \
--set localRedirectPolicy=true \
--set endpointRoutes.enabled=false \
--set kubeProxyReplacement=strict \
--set loadBalancer.mode=dsr \
--set k8sServiceHost=172.18.108.52 \
--set k8sServicePort=6443
我们在阿里云控制台上也已经看到相应的弹性网卡已经有ip存在
可以看出podip已经使用上了vpc的网段,不过在阿里云控制台上会看到网卡绑定了很多ip,但实际上有一些还没使用上。
可以看到,使用了vpc网络后,就只有弹性网卡的辅助ip了,没有了cilium虚拟化的网络。
而通过同vpc下另一台机traceroute某个pod的ip,发现是第一跳是先去主网卡,然后再到podip。这就是弹性辅助网卡多ip的特性,而阿里云的terway独占eni还能完全绕过主机网络栈,将网卡下放到pod独占。
cilium用了vpc网络性能确实更高了,因为少了cilium通过ebpf进行masquerade伪装的消耗。不过pod访问外网就不能走主机的弹性公网ip了,只能通过nat网关进行统一的snat才能上外网了