k8s网络之calico
一、概述
前面我们部署calico由于集群规模不是很大,使用的是calico的bgp模式的node-to-node-mesh全节点互联,这种模式在小规模集群里面还可以用,3.4.0版本的calico支持到100多个节点。
但是随着集群规模的扩大,bgp的mesh会变得很混乱,因为node-to-node-mesh模式要求所有的node节点都要互联。所以大规模集群使用bgp route reflector,集中式的路由信息分发,当Calico BGP客户端将路由从其FIB通告到Route Reflector时,Route Reflector会将这些路由通告给部署集群中的其他节点。
二、部署
在官网下载最新的部署文件:https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/calico
curl \
https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/hosted/calico.yaml \
-O
需要修改几个地方具体参考:https://www.cnblogs.com/cuishuai/p/9897006.html
calico默认使用的是node-to-node-mesh,我们需要全局禁用这种模式,需要提前部署calicoctl。
参考:https://www.cnblogs.com/cuishuai/p/9897006.html、https://docs.projectcalico.org/v3.4/usage/calicoctl/install
参考:https://docs.projectcalico.org/v3.4/usage/configuration/bgp
1、禁用node-to-node-mesh
#cat off-node-mesh.yaml
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
nodeToNodeMeshEnabled: false
asNumber:
calicoctl apply -f off-node-mesh.yaml
2、配置集群内路由反射器
# calicoctl get node
NAME
ku13-
ku13-
ku13-
ku13-
ku13-4是我们的kube-gateway,参考https://www.cnblogs.com/cuishuai/p/10310698.html
我们将这个节点作为bgp route reflector,建议选2-3个节点作为route reflector,这里我们就用这一个节点,前面已经知道这个节点上只部署了calico-node、kube-proxy,并且禁止调度。
1) 修改节点资源:
将节点设置
spec.bgp.routeReflectorClusterID为非空集群ID,例如224.0.0.1添加一个标签,指示该节点是路由反射器
# calicoctl get node ku13- --export -o yaml > node.yaml
ku13-4是要选择的节点名称,可以替换成任意的节点,这里我们选择kube-gateway节点。
修改为如下内容:
#cat node.yaml
apiVersion: projectcalico.org/v3
kind: Node
metadata:
creationTimestamp: null
labels:
i-am-a-route-reflector: "true"
name: ku13-
spec:
bgp:
ipv4Address: 10.42.11.1/
routeReflectorClusterID: 224.0.0.1
orchRefs:
- nodeName: ku13-
orchestrator: k8s
使配置生效:
calicoctl apply -f node.yaml
2)配置BGPPeer资源,告诉其他Calico节点与路由反射器节点对等:
#cat bgp-calico.yaml
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
name: peer-to-rrs
spec:
nodeSelector: !has(i-am-a-route-reflector)
peerSelector: has(i-am-a-route-reflector)
calicoctl create -f bgp-calico.yaml
3)如果选择多个节点为route reflector,还需要配置BGPPeer资源,告诉路由反射器节点互相对等:
#cat bgp-reflector.yaml
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
name: rr-mesh
spec:
nodeSelector: has(i-am-a-route-reflector)
peerSelector: has(i-am-a-route-reflector)
calicoctl create -f bgp-reflector.yaml
https://www.cnblogs.com/cuishuai/p/9897006.html
k8s网络之calico的更多相关文章
- k8s网络之Calico网络
k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 简介 Calico 是一种容器之间互通的网络方案.在虚拟化平台中,比如 Open ...
- k8s网络之calico学习
一.知识准备 1.calico主要通过ipip协议与bgp协议来实现通信.前者通过ipip隧道作为通信基础,后者则是纯三层的路由交换 2.bgp协议主要由两种方式:BGP Speaker 全互联模式( ...
- k8s网络之Flannel网络
k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 简介 Flannel是CoreOS团队针对Kubernetes设计的一个网络规划 ...
- k8s网络之设计与实现
k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 K8s网络设计与实现是在学习k8s网络过程中总结的内容.在学习k8s网络各种插件 ...
- 【Kubernetes】K8S 网络隔离 方案
参考资料: K8S-网络隔离参考 OpenContrail is an open source network virtualization platform for the cloud. – Kub ...
- ASP.NET Core on K8S深入学习(11)K8S网络知多少
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.Kubernetes网络模型 我们都知道Kubernetes作为容器编排引 ...
- k8s网络配置管理
docker容器的四种网络类型 1.桥接 2.联盟 3.主机 4.无 docker跨节点的容器通信必须通过NAT机制 宿主机上的容器一般都是私网地址 它可以通过宿主机 ...
- 19.网络插件calico
19.网络插件calico 官网: https://docs.projectcalico.org/v3.8/introduction/ calico默认工作在192.168.0.0/16 的网络 ca ...
- 【Kubernetes】K8S网络方案--最近在看的
K8S网络-最近在看的 Create a Minikube cluster - Kubernetes Kubernetes Documentation - Kubernetes Kubernetes ...
随机推荐
- 小白的CTF学习之路4——内存
明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRA ...
- go的基本数据类型
一,数据类型的介绍 在go语言中,数据类型是用于声明函数和变量的:数据类型是为了把数据分成所需内存不同大小的数据,除了在需要使用大数据的时候才会申请大内存,这样就会充分的使用内存 Go 语言按类别有以 ...
- 洛谷[LnOI2019]长脖子鹿省选模拟赛 简要题解
传送门 听说比赛的时候T4T4T4标程锅了??? WTF换我时间我要写T3啊 于是在T4T4T4调半天无果的情况下260pts260pts260pts收场真的是tcltcltcl. T1 快速多项式变 ...
- jQuery源码框架fn解读
(function( window, undefined ){ var jQuery = (function(){ var jQuery = function( selector, context ) ...
- 学以致用三十一-----IPAddressField has been removed
python 和 django版本 在进行makemigrations的时候报错 设置的字段 class Servers(models.Model): '''服务器信息''' hostname = m ...
- 《java多线程编程核心技术》(一)使用多线程
了解多线程 进程和多线程的概念和线程的优点: 提及多线程技术,不得不提及"进程"这个概念.百度百科对"进程"的解释如下: 进程(Process)是计算机中的程序 ...
- pyqt5 graphics view简单使用
Graphics View提供了一个平面,用于管理和交互大量自定义的2D图形图元,以及一个用于可视化图元的视图窗口小部件,支持缩放和旋转. 该框架包括一个事件传播架构,允许场景中图元的精确双精度交互功 ...
- The test form is only available for requests from the local machine
使用浏览器测试Web服务时出现提示“The test form is only available for requests from the local machine.”的解决办法 在Web服务项 ...
- MySQL--MHA原理
##==============================================================##MHA(Master High Availability)是一种My ...
- Base 底层库开源项目总结
在Android开发中,我们经常使用一些开源的项目,一般情况下,这些开源项目都是基于开源的底层库进行的开发,以适配各自的用户场景.下面来列举一下本人收藏或Star的项目: 一.JavaCV 项目地址: ...