容器中的网络是建立docker集群的重要内容。

本文将介绍如何用Calico实现容器的多节点互通。

Calico的组件结构如下:

Calico通过etcd同步Bridge的信息,各个Docker node间通过BGP进行路由的交互。Iptables实现NAT、访问控制等。

具体的安装过程如下,其中两个节点的IP地址分别是10.1.1.4和10.1.1.5,在10.1.1.4上安装etcd:

一 安装docker

yum install docker -y
vim /etc/docker/daemon.json
{
"registry-mirrors": ["registry.docker-cn.com"],
"cluster-store": "etcd://10.1.1.4:2379"
}
systemctl enable docker
systemctl start docker

二 安装etcd

yum install etcd -y

修改etcd的配置文件:

cat /etc/etcd/etcd.conf | grep -v ^#

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="master"
ETCD_ADVERTISE_CLIENT_URLS="http://10.1.1.4:2379"

启动etcd:

systemctl enable etcd
systemctl start etcd

三 安装Calico

1 下载Calico

wget -O /usr/local/bin/calicoctl https://github.com/projectcalico/calicoctl/releases/download/v1.6.1/calicoctl
chmod +x /usr/local/bin/calicoctl

2启动Calico

Calico启动时,会调取calico的配置文件,编辑etcd的信息:

vim /etc/calico/calicoctl.cfg

apiVersion: v1
kind: calicoApiConfig
metadata:
spec:
datastoreType: "etcdv2"
etcdEndpoints: http://10.0.1.4:2379

3先下载calico node的docker image

docker pull quay.io/calico/node:v2.6.0

4 启动calico

calicoctl node run --node-image quay.io/calico/node:v2.6.0

5 检查calico的状态

calicoctl node status

6 创建docker的calico网络

docker network create --driver calico --ipam-driver calico-ipam net1

四 基于Calico网络创建容器

在node1上创建container:

docker run -d --net net2 --name c1 nginx

同样在node2上也创建contianer:

docker run -d --net net2 --name c2 nginx

两边可以互通。

查看两个node上的路由:

可以看到Calico是个扁平的网络,通过bgp宣告路由,容器网络的网段路由指向node的IP地址。

容器内部地址和路由:

五 Azure支持Calico的配置

由于公有云都采用SDN的网络架构,和数据中心的数据转发模型不同。在Azure需要做特别的配置,才能支持Calico的扁平网络的转发模式。

1 用户自定义路由

在node所在的网络配置用户自定义路由:

Node1的容器网络路由指向node1的IP地址

Node2的容器网络路由指向node2的IP地址

关联到subnet上:

2 每个node开启IP Forward

开启这两个功能后,Calico网络就可以通了。

总结:

Calico网络是通过BGP进行容器网络路由交互的一种Docker网络的实现方式。其实现方式相对比较简单,性能损耗更小。

容器中跨主机的网络方案-Calico的更多相关文章

  1. 容器中跨主机的网络方案-Weave

    容器中的网络是建立docker集群的重要内容. 本文将介绍如何用Weave实现容器的多节点互通. Weave是一个开源的项目,其网站为: https://www.weave.works/ 其工作原理相 ...

  2. 容器中跨主机的网络方案-flannel

    容器中的网络是建立docker集群的重要内容. 本文将介绍如何用flannel实现容器的多节点互通. 下图是flannel的实现原理,摘自: http://docker-k8s-lab.readthe ...

  3. 理解Docker(6):若干企业生产环境中的容器网络方案

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  4. k8s网络之Calico网络

    k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 简介 Calico 是一种容器之间互通的网络方案.在虚拟化平台中,比如 Open ...

  5. centos7下安装docker(15.7容器跨主机网络---calico)

    Calico是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是router,把不同host的容器连接起来.与vxlan不同的是:calico不对数据包进行封装,不需要NA ...

  6. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  7. Calico网络方案

    参考文档: Difficulties with traditional overlay networks:https://www.projectcalico.org/learn/ Get Start( ...

  8. Kubernetes网络方案 Flannel和calico

    摘抄某博客 1.   Flannel Flannel是为kubernetes设计的一个非常简洁的多节点三层网络方案,解决不同host上的容器互联问题,原理是为每个host分配一个subnet,容器从此 ...

  9. Docker容器跨主机通信--overlay网络

    一.Docker主机间容器通信的解决方案 Docker网络驱动 Overlay: 基于VXLAN封装实现Docker原生Overlay网络 Macvlan: Docker主机网卡接口逻辑上分为多个子接 ...

随机推荐

  1. maven中pom.xml标签介绍

    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以 ...

  2. 服务器状态监控之snmp&ipmi

    一.ipmi 1.简介 IPMI(Intelligent Platform Management Interface)即智能平台管理接口是使硬件管理具备"智能化"的新一代通用接口标 ...

  3. 大家来聊聊如何PASS 360

    真正做到PASS 360,启动项什么的.我觉得还是有可能的把? 虽然它就是一个流氓,但是我们要想办法比它更流氓. 只是有一个点:那就是行为监控,那既然行为监控(云分析抛开).那就找一个可信任的程序来调 ...

  4. 一次穿墙渗透测试,利用IPC跨域

    Shell是怎么拿下的我们就不纠结了. 我们来上传菜刀一句话,来仔细分析分析. 先来看看内网环境把. 很高兴的是现在管理员在线.可以抓去文明密码. 但是很悲催的又是.服务器不支持走TCP协议.HTTP ...

  5. DevExpress的GridControl选择一行,不显示单元格焦点的设置

    grid控件默认选择一行时,focused的cell并不是蓝色的,而是白色的 要想实现一次选择一行全都是蓝色的只要改一个属性就可以了 this.gridView1.OptionsSelection.E ...

  6. merge two sorted lists, 合并两个有序序列

    /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Lis ...

  7. C语言中链接影响程序的细节

    参考:<深入理解计算机系统>  7.61节  链接器如何解析多重定义的全局符号 基本的原则是这样的:对于所有的全局符号,函数和已初始化的全局变量是强符号,未初始化的全局变量是弱符号. Un ...

  8. js 验证 -身份证等

    js验证身份证: function isIdCard(idCard) { var num = idCard.toLowerCase().match(/\w/g); if (idCard.match(/ ...

  9. Shell 运算符 if

    Shell 支持多种运算符,包括: 算术运算符 原生bash不支持简单的数学运算,可以使用 expr,let 关系运算符 布尔运算符 字符串运算符 文件运算符 算术运算符 包括加减乘除,取余(%).赋 ...

  10. spring mvc:常用标签库(文本框,密码框,文本域,复选框,单选按钮,下拉框隐藏于,上传文件等)

    在jsp页面需要引入:<%@taglib uri="http://www.springframework.org/tags/form" prefix="form&q ...