Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来。与 VxLAN 不同的是,Calico 不对数据包做额外封装,不需要 NAT 和端口映射,扩展性和性能都很好。

与其他容器网络方案相比,Calico 还有一大优势:network policy。用户可以动态定义 ACL 规则,控制进出容器的数据包,实现业务需求。

实验环境描述

Calico 依赖 etcd 在不同主机间共享和交换信息,存储 Calico 网络状态。我们将在 host 192.168.56.101 上运行 etcd。

Calico 网络中的每个主机都需要运行 Calico 组件,提供容器 interface 管理、动态路由、动态 ACL、报告状态等功能。

实验环境如下图所示:

首先启动 etcd。

启动 etcd

在 host 192.168.56.101 上运行如下命令启动 etcd:

etcd -listen-client-urls http://192.168.56.101:2379 -advertise-client-urls http://192.168.56.101:2379

etcd 安装配置详细方法请参考 flannel 章节。

修改 host1 和 host2 的 Docker daemon 配置文件 /etc/systemd/system/docker.service, 连接 etcd:

--cluster-store=etcd://192.168.56.101:2379

重启 Docker daemon。

systemctl daemon-reload

systemctl restart docker.service

部署 calico

下载 calicoctl:

wget -O /usr/local/bin/calicoctl https://github.com/projectcalico/calicoctl/releases/download/v1.0.2/calicoctl

chmod +x calicoctl

在 host1 和 host2 上启动 calico:

calicoctl node run

启动过程如下:

① 设置主机网络,例如 enable IP forwarding。

② 下载并启动 calico-node 容器,calico 会以容器的形式运行(与 weave 类似)。

③ 连接 etcd。

④ calico 启动成功。

创建 calico 网络

在 host1 或 host2 上执行如下命令创建 calico 网络 cal_ent1:

docker network create --driver calico --ipam-driver calico-ipam cal_net1

--driver calico 指定使用 calico 的 libnetwork CNM driver。

--ipam-driver calico-ipam 指定使用 calico 的 IPAM driver 管理 IP。

calico 为 global 网络,etcd 会将 cal_net 同步到所有主机。

Calico 已经就绪,下一节将运行容器并分析 Calico 的网络结构。

如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)的更多相关文章

  1. 如何快速部署 Prometheus?- 每天5分钟玩转 Docker 容器技术(85)

    上一节介绍了 Prometheus 的核心,多维数据模型.本节演示如何快速搭建 Prometheus 监控系统. 环境说明 我们将通过 Prometheus 监控两台 Docker Host:192. ...

  2. ELK 完整部署和使用 - 每天5分钟玩转 Docker 容器技术(90)

    上一节已经部署了容器化的 ELK,本节讨论如何将日志导入 ELK 并进行图形化展示. 几乎所有的软件和应用都有自己的日志文件,容器也不例外.前面我们已经知道 Docker 会将容器日志记录到 /var ...

  3. 部署 Prometheus Operator - 每天5分钟玩转 Docker 容器技术(179)

    本节在实践时使用的是 Prometheus Operator 版本 v0.14.0.由于项目开发迭代速度很快,部署方法可能会更新,必要时请参考官方文档. 下载最新源码 git clone https: ...

  4. 一文搞懂各种 Docker 网络 - 每天5分钟玩转 Docker 容器技术(72)

    前面各小节我们先后学习了 Docker Overaly,Macvaln,Flannel,Weave 和 Calico 跨主机网络方案.目前这个领域是百家争鸣,而且还有新的方案不断涌现. 本节将从不同维 ...

  5. 学容器必须懂 bridge 网络 - 每天5分钟玩转 Docker 容器技术(32)

    上一节我们讨论了 none 和 host 类型的容器网络,本节学习应用最广泛也是默认的 bridge 网络. Docker 安装时会创建一个 命名为 docker0 的 linux bridge.如果 ...

  6. 创建 macvlan 网络 - 每天5分钟玩转 Docker 容器技术(55)

    上一节我们准备好了 macvlan 的实验环境,今天在 host1 和 host2 中创建 macvlan 网络 mac_net1: 注意:在 host2 中也要执行相同的命令. ① -d macvl ...

  7. 创建 overlay 网络 - 每天5分钟玩转 Docker 容器技术(50)

    上一节我们搭建好实验环境,配置并运行了consul,今天开始创建 overlay 网络. 在 host1 中创建 overlay 网络 ov_net1: -d overlay 指定 driver 为 ...

  8. 部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)

    我们将部署三个节点的 Kubernetes Cluster. k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node. 所有节点的操作系统均为 Ubuntu ...

  9. 部署 k8s Cluster(下)- 每天5分钟玩转 Docker 容器技术(119)

    上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署. 安装 Pod 网络 要 ...

  10. k8s 各种网络方案 - 每天5分钟玩转 Docker 容器技术(170)

    网络模型有了,如何实现呢? 为了保证网络方案的标准化.扩展性和灵活性,Kubernetes 采用了 Container Networking Interface(CNI)规范. CNI 是由 Core ...

随机推荐

  1. Eclipse常用快捷键大全1

    Eclipse常用快捷键大全 1.ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字 ...

  2. Docker Registry

    前言 上一篇文章讲了Docker Machine实现多主机Docker节点的管理.本文讲解如何实现Docker Registry,其实这个在第一篇Docker入门一文中已经简单介绍,本文仅是对一些细节 ...

  3. python--DenyHttp项目(1)--socket编程:客户端与服务器端

    查找了许多资料,实现了客户端与服务器端的连接,通过虚拟机进行测试 服务器端IP:192.168.37.129 端口1122 客户端IP: 192.168.37.1 端口1122 Server: #co ...

  4. C语言中全局变量存放在哪个位置?

    今年软考的时候,遇到了这个题目,表示不解,然后考完之后去查了一下百度,才发现自己选错.全局变量存放在静态存储区,位置是固定的. 局部变量在栈空间,栈地址是不固定的.栈:就是那些由编译器在需要的时候分配 ...

  5. PostgreSQL存储过程(3)-流程控制语句

    流程控制 讲解条件语句,循环语句. 本次环境会用到表emp:下面是emp执行语句. drop table emp; create table EMP( EMPNO numeric() not null ...

  6. Java 编写小程序,下载指定网页上的所有图片

    使用Java编写一个小程序,可以根据指定的网页地址,下载网页中的所有图片:使用到网络编程.线程池.IO和UUID的技术.具体代码如下: import java.io.File; import java ...

  7. koa-router源码分析

    koa-router源码地址是 koa-router 当前解读版本为7.2.1 关系图 代码结构图 执行流程图 关系对应图 Router方法和属性浅析 methods.forEach 注册注册路由的方 ...

  8. 每个Web开发人员应该知道的12个终端命令

    Tips 原文作者:Danny Markov 原文地址:12 Terminal Commands Every Web Developer Should Know About 终端是开发人员的武器库中最 ...

  9. TensorFlow学习笔记3——变量共享

    因为最近在研究生成对抗网络GAN,在读别人的代码时发现了 with tf.variable_scope(self.name_scope_conv, reuse = reuse): 这样一条语句,查阅官 ...

  10. sed 实践案例 (不定期更新)

    删除每行第一个字符 sed -r 's/^.//g' /etc/passwd 删掉每行第二个字符 sed -r 's/^(.)(.)/\1/g' /etc/passwd 删掉每行最后一个字符 sed ...