
本文共 4276 字,大约阅读时间需要 14 分钟。
Calico是针对容器,虚拟机和基于主机的本机工作负载的开源网络和网络安全解决方案。
Calico支持广泛的平台,包括Kubernetes,OpenShift,Docker EE,OpenStack和裸机服务。
Calico将灵活的网络功能与无处不在的安全性实施相结合,以提供具有本地Linux内核性能和真正的云原生可扩展性的解决方案。
Calico为开发人员和集群运营商提供了一致的经验和功能集,无论是在公共云中还是本地运行,在单个节点上还是在数千个节点集群中运行。
两种网络模式
IPIP网络:
流量:tunlo设备封装数据,形成隧道,承载流量。
适用网络类型:适用于互相访问的pod不在同一个网段中,跨网段访问的场景。外层封装的ip能够解决跨网段的路由问题。
效率:流量需要tunl0设备封装,效率略低。
BGP网络:
流量:使用路由信息导向流量
适用网络类型:适用于互相访问的pod在同一个网段,适用于大型网络。
效率:原生hostGW,效率高。
更多参考>>>
部署安装
1)确保Calico可以在主机上进行管理cali
和tunl
接口,如果主机上存在NetworkManage,请配置NetworkManager。
NetworkManager会为默认网络名称空间中的接口操纵路由表,在该默认名称空间中,固定了Calico veth对以连接到容器,这可能会干扰Calico代理正确路由的能力。
在以下位置创建以下配置文件,以防止NetworkManager干扰接口:
vim /etc/NetworkManager/conf.d/calico.conf[keyfile]unmanaged-devices=interface-name:cali*;interface-name:tunl*
2)首先下载calica.yaml部署文件,然后更改 CALICO_IPV4POOL_IPIP 为 Never 使用 BGP 模式,
另外增加 IP_AUTODETECTION_METHOD 为 interface 使用匹配模式,默认是first-found模式,在复杂网络环境下还是有出错的可能。
wget https://docs.projectcalico.org/manifests/calico.yamlvim calico.yaml# Cluster type to identify the deployment type- name: CLUSTER_TYPE value: "k8s,bgp"# IP automatic detection- name: IP_AUTODETECTION_METHOD value: "interface=en.*"# Auto-detect the BGP IP address.- name: IP value: "autodetect"# Enable IPIP- name: CALICO_IPV4POOL_IPIP value: "Never"
你会看到以下输出:
configmap "calico-config" createdcustomresourcedefinition.apiextensions.k8s.io "felixconfigurations.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "ipamblocks.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "blockaffinities.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "ipamhandles.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "bgppeers.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "bgpconfigurations.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "ippools.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "hostendpoints.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "clusterinformations.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "globalnetworkpolicies.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "globalnetworksets.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "networksets.crd.projectcalico.org" createdcustomresourcedefinition.apiextensions.k8s.io "networkpolicies.crd.projectcalico.org" createdclusterrole.rbac.authorization.k8s.io "calico-kube-controllers" createdclusterrolebinding.rbac.authorization.k8s.io "calico-kube-controllers" createdclusterrole.rbac.authorization.k8s.io "calico-node" createdclusterrolebinding.rbac.authorization.k8s.io "calico-node" createddaemonset.extensions "calico-node" createdserviceaccount "calico-node" createddeployment.extensions "calico-kube-controllers" createdserviceaccount "calico-kube-controllers" created
3)使用以下命令确认所有Pod正在运行。
watch kubectl get pods --all-namespaces
等到每个calico全部Running即可。
NAMESPACE NAME READY STATUS RESTARTS AGEkube-system calico-kube-controllers-6ff88bf6d4-tgtzb 1/1 Running 0 2m45skube-system calico-node-24h85 1/1 Running 0 2m43skube-system calico-node-45k48 1/1 Running 0 2m43skube-system coredns-846jhw23g9-9af73 1/1 Running 0 4m5skube-system coredns-846jhw23g9-hmswk 1/1 Running 0 4m5skube-system etcd-jbaker-1 1/1 Running 0 6m22skube-system kube-apiserver-jbaker-1 1/1 Running 0 6m12skube-system kube-controller-manager-jbaker-1 1/1 Running 0 6m16skube-system kube-proxy-8fzp2 1/1 Running 0 5m16skube-system kube-scheduler-jbaker-1 1/1 Running 0 5m41s
按CTRL + C退出watch。
4)如果是切换网络插件,需要清理每个节点上之前残留的路由表和网桥,以避免和calico冲突。
ip linkip link delete flannel.1ip routeip route delete 10.244.0.0/24 via 10.4.7.21 dev eth0
卸载其他网路插件之后,最好重启所有节点,这样系统会重置网卡规则,旧规则自动就会被清理了。
故障排除和诊断
作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
发表评论
最新留言
关于作者
