如何在Docker上安装Calicoctl

时间:2020-03-05 15:25:14  来源:igfitidea点击:

Calico是数据中心中的虚拟网络的免费和开源软件。
它是云虚拟网络高度可扩展数据中心的纯第3层方法。
它无缝集成与云编排系统,如OpenStack,Docker群集,以便在虚拟机和容器之间启用安全的IP通信。
它在每个节点中实现了一个高效的vrouter,该节点利用现有的Linux内核转发引擎。
Calico在这种令人敬畏的技术中工作,它能够直接与数据中心的物理面料同步,无论是否L2或者L3,没有NAT,ON/OFF坡道或者覆盖。
Calico充分利用Docker来运行其在节点中的Docker,使其成为多平台,非常容易发货,包装和部署。
Calico开箱即用以下突出功能。

  • 它可以扩展成千上万的服务器以及数百万个工作量。
  • Calico易于部署,操作和诊断。
  • 它是Apache许可证2下的开源软件,并使用开放标准。
  • 它支持容器,虚拟机和裸机工作负载。
  • 它支持IPv4和IPv6 Internet协议。
  • 它在内部设计,以支持丰富,灵活和安全的网络策略。

在本教程中,我们将在使用Docker技术中运行Calico的两个节点之间执行虚拟专用网络。
以下是我们如何做到这一点的简单步骤。

1.安装ettd.

要开始使用Calico虚拟私有网络,我们需要使用Linux机器运行。
随着CoreOS预装并预先配置ETCD,我们可以使用CoreOS,但如果我们想在其他Linux发行版中配置Calico,那么我们需要在我们的机器中设置它。
正如我们正在运行Ubuntu 14.04 LTS,我们需要在我们的机器中首先安装和配置etcd。
要在我们的Ubuntu框中安装ettd,我们需要通过在我们想要运行etcd服务器的计算机中运行以下命令来添加Calico的官方PPA存储库。
其中我们将在第一个节点中安装etcd。

# apt-add-repository ppa:project-calico/icehouse
The primary source of Ubuntu packages for Project Calico based on OpenStack Icehouse, an open source solution for virtual networking in cloud data centers. Find out more at https://www.projectcalico.org/
More info: https://launchpad.net/~project-calico/+archive/ubuntu/icehouse
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmpi9zcmls1/secring.gpg' created
gpg: keyring `/tmp/tmpi9zcmls1/pubring.gpg' created
gpg: requesting key 3D40A6A7 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpi9zcmls1/trustdb.gpg: trustdb created
gpg: key 3D40A6A7: public key "Launchpad PPA for Project Calico" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

然后,我们需要编辑/etc/apt /首选项,并更改更改为新星和中子提供的Calico提供的软件包。

# nano /etc/apt/preferences

我们需要将以下行添加到其中。

Package: *
Pin: release o=LP-PPA-project-calico-*
Pin-Priority: 100

接下来,我们还需要为Ubuntu 14.04 LT添加官方鸟PPA,以便在Ubuntu Repo上可用之前安装错误修复。

# add-apt-repository ppa:cz.nic-labs/bird
The BIRD Internet Routing Daemon PPA (by upstream & .deb maintainer)
More info: https://launchpad.net/~cz.nic-labs/+archive/ubuntu/bird
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmphxqr5hjf/secring.gpg' created
gpg: keyring `/tmp/tmphxqr5hjf/pubring.gpg' created
gpg: requesting key F9C59A45 from hkp server keyserver.ubuntu.com
apt-ggpg: /tmp/tmphxqr5hjf/trustdb.gpg: trustdb created
gpg: key F9C59A45: public key "Launchpad Datov� schr�nky" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

现在,在PPA作业完成之后,我们现在将更新本地存储库索引,然后在我们的机器中安装etcd。

# apt-get update

要在Ubuntu机器中安装ettd,我们将运行以下APT命令。

# apt-get install etcd python-etcd

2.开始ettd.

安装完成后,我们现在将配置etcd配置文件。
其中我们将使用文本编辑器编辑/etc/init/etcd.conf并将行exec/usr/bin/etcd添加并使其如下配置。

注意:在上面的配置中,我们需要用etcd服务器框的私有IP地址和主机名替换10.130.65.71和Node-1.
完成编辑后,我们需要保存并退出该文件。

我们可以通过运行以下命令获取我们etcd服务器的私有IP地址。

# ifconfig

随着我们的ETCD配置完成,我们现在将在Ubuntu节点中启动我们的etcd服务。
要启动ettd守护程序,我们将运行以下命令。

# service etcd start

完成后,我们会检查ETCD是否真正运行。
要确保,我们需要运行以下命令。

# service etcd status

3.安装Docker.

接下来,我们将在运行Ubuntu的两个节点中安装Docker。
要安装Docker的最新版本,我们只需运行以下命令。

# curl -sSL https://get.docker.com/| sh

安装完成后,我们将按顺序启动Docker守护程序以确保在我们走向Calico之前运行。

# service docker restart
docker stop/waiting
docker start/running, process 3056

3.安装Calico(Calicoctl)

我们现在将在Linux机器中安装Calico以便运行Calico容器。
我们需要在我们想要连接到Calico网络的每个节点中安装Calico。
要安装Calico,我们需要在root或者sudo权限下运行以下命令。

在第1节

# wget https://github.com/projectcalico/calico-docker/releases/download/v0.6.0/calicoctl
--2014-09-28 12:08:59-- https://github.com/projectcalico/calico-docker/releases/download/v0.6.0/calicoctl
Resolving github.com (github.com)... 192.30.252.129
Connecting to github.com (github.com)|192.30.252.129|:443... connected.
...
Resolving github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)... 54.231.9.9
Connecting to github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)|54.231.9.9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6166661 (5.9M) [application/octet-stream]
Saving to: 'calicoctl'
100%[=========================================>] 6,166,661 1.47MB/s in 6.7s
2014-09-28 12:09:08 (898 KB/s) - 'calicoctl' saved [6166661/6166661]
# chmod +x calicoctl

完成后执行可执行文件后,我们将使二进制粉底电路作为任何目录中的命令进行。
为此,我们需要运行以下命令。

# mv calicoctl /usr/bin/

在第二节节点上

# wget https://github.com/projectcalico/calico-docker/releases/download/v0.6.0/calicoctl
--2014-09-28 12:09:03-- https://github.com/projectcalico/calico-docker/releases/download/v0.6.0/calicoctl
Resolving github.com (github.com)... 192.30.252.131
Connecting to github.com (github.com)|192.30.252.131|:443... connected.
...
Resolving github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)... 54.231.8.113
Connecting to github-cloud.s3.amazonaws.com (github-cloud.s3.amazonaws.com)|54.231.8.113|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6166661 (5.9M) [application/octet-stream]
Saving to: 'calicoctl'
100%[=========================================>] 6,166,661 1.47MB/s in 5.9s
2014-09-28 12:09:11 (1022 KB/s) - 'calicoctl' saved [6166661/6166661]
# chmod +x calicoctl

完成后执行可执行文件后,我们将使二进制粉底电路作为任何目录中的命令进行。
为此,我们需要运行以下命令。

# mv calicoctl /usr/bin/

同样,我们需要执行上面的命令来在每个其他节点中安装。

4.开始卡里科服务

在我们在我们每个节点上安装了Calico后,我们将开始Calico服务。
要启动Calico服务,我们需要运行以下命令。

在第1节

# calicoctl node
WARNING: Unable to detect the xt_set module. Load with `modprobe xt_set`
WARNING: Unable to detect the ipip module. Load with `modprobe ipip`
No IP provided. Using detected IP: 10.130.61.244
Pulling Docker image calico/node:v0.6.0
Calico node is running with id: fa0ca1f26683563fa71d2ccc81d62706e02fac4bbb08f562d45009c720c24a43

在第二节节点上

接下来,我们将导出全局变量,以便将我们的Calico节点连接到在我们的情况下在Node1中托管的同一ETCD服务器。
为此,我们需要在每个节点中运行以下命令。

# export ETCD_AUTHORITY=10.130.61.244:2379

然后,我们将在我们的每个第二节点中运行Calicoctl容器。

# calicoctl node
WARNING: Unable to detect the xt_set module. Load with `modprobe xt_set`
WARNING: Unable to detect the ipip module. Load with `modprobe ipip`
No IP provided. Using detected IP: 10.130.61.245
Pulling Docker image calico/node:v0.6.0
Calico node is running with id: 70f79c746b28491277e28a8d002db4ab49f76a3e7d42e0aca8287a7178668de4

应在我们想要启动Calico服务的每个节点中执行此命令。
上面的命令在相应节点中启动一个容器。
要检查容器是否正在运行,我们将运行以下Docker命令。

# docker ps

如果我们看到类似于下面所示的输出的输出,那么我们可以确认Calico容器已启动并运行。

5.启动容器

接下来,我们需要在运行Calico Services的每个节点中开始少量容器。
我们将为运行Ubuntu运行的每个容器分配不同的名称。
其中工作负载-A,Workload-B等已被分配为每个容器的唯一名称。
为此,我们需要运行以下命令。

在第1节

# docker run --net=none --name workload-A -tid ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
...
91e54dfb1179: Already exists
library/ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:73fbe2308f5f5cb6e343425831b8ab44f10bbd77070ecdfbe4081daa4dbe3ed1
Status: Downloaded newer image for ubuntu:latest
a1ba9105955e9f5b32cbdad531cf6ecd9cab0647d5d3d8b33eca0093605b7a18
# docker run --net=none --name workload-B -tid ubuntu
89dd3d00f72ac681bddee4b31835c395f14eeb1467300f2b1b9fd3e704c28b7d

在第二节节点上

# docker run --net=none --name workload-C -tid ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
...
91e54dfb1179: Already exists
library/ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:73fbe2308f5f5cb6e343425831b8ab44f10bbd77070ecdfbe4081daa4dbe3ed1
Status: Downloaded newer image for ubuntu:latest
24e2d5d7d6f3990b534b5643c0e483da5b4620a1ac2a5b921b2ba08ebf754746
# docker run --net=none --name workload-D -tid ubuntu
c6f28d1ab8f7ac1d9ccc48e6e4234972ed790205c9ca4538b506bec4dc533555

同样,如果我们有更多节点,我们可以通过使用分配不同的容器名称来运行上面的命令来运行Ubuntu Docker容器。

6.分配IP地址

在我们在每个主机中运行的Docker容器后,我们将为容器添加网络支持。
现在,我们将使用Calicoctl为每个容器分配新的IP地址。
这将使用分配的IP地址向容器添加新的网络接口。
为此,我们需要在运行容器的主机中运行以下命令。

在第1节

# calicoctl container add workload-A 192.168.0.1
# calicoctl container add workload-B 192.168.0.2

在第二节节点上

# calicoctl container add workload-C 192.168.0.3
# calicoctl container add workload-D 192.168.0.4

7.添加策略配置文件

在我们的容器有网络接口和分配的IP地址之后,我们现在需要添加策略配置文件以在容器之间启用网络之间的网络。
在添加配置文件后,仅当它们具有分配的公共配置文件时,容器就能够彼此通信。
这意味着,如果分配了不同的配置文件,他们将无法与彼此通信。
所以,在能够分配之前。
我们需要首先创建一些新的配置文件。
这可以在任何一个主机中完成。
其中我们将在第1节点中运行以下命令。

# calicoctl profile add A_C
Created profile A_C
# calicoctl profile add B_D
Created profile B_D

创建配置文件后,我们只需将工作负载添加到所需的配置文件。
其中在本教程中,我们将在公共轮廓B_D中将工作负载A和工作负载C和工作负载B和D.为此,我们将在主机中运行以下命令。

在第1节

# calicoctl container workload-A profile append A_C
# calicoctl container workload-B profile append B_D

在第二节节点上

# calicoctl container workload-C profile append A_C
# calicoctl container workload-D profile append B_D

8.测试网络

在我们使用Calicoctl添加了每个容器的策略配置文件之后,我们现在将测试我们的网络是否正常工作。
我们将拍摄节点和工作负载,并尝试与在相同或者不同节点中运行的其他容器进行通信。
由于个人资料,我们应该能够仅与具有共同轮廓的容器通信。
因此,在这种情况下,工作负载A应该只能与C进行通信,反之亦然,而工作负载A不应该能够与B或者D通信。
要测试网络,我们将为从中具有共同简档的容器第一个主机运行工作负载A和B.

我们将首先使用Workload-A具有IP 192.168.0.3的Ping Workload-C。

# docker exec workload-A ping -c 4 192.168.0.3

然后,我们将使用Workload-B使用IP 192.168.0.4的Workload-D如下所示。

# docker exec workload-B ping -c 4 192.168.0.4

现在,我们将检查我们是否能够ping具有不同配置文件的容器。
我们现在将使用Workload-A具有IP地址192.168.0.4的Workload-D。

# docker exec workload-A ping -c 4 192.168.0.4

完成后,我们将尝试使用Workload-B使用IP地址192.168.0.3的工作负载-c。

# docker exec workload-B ping -c 4 192.168.0.3

因此,具有相同轮廓的工作负载可以彼此平衡而具有不同的轮廓不能彼此ping。