L3 a kontejnery bez overlay: Project Calico prakticky (2) – rozjezd

Dnes si Project Calico nainstalujeme ve variantě pro Docker a uvidíme, jak se nám šíří informace o použitých IP adresách.

Project Calico a Docker v základním režimu

Vždy je dobré začínat z nejjednoduších scénářů. Dnes tedy použijeme Docker a hostitele budeme zakládat přes docker-machine (víc o něm v článku na cloudsvet.cz), což je opravdu snadné. Dnes budeme používat „ruční“ režim, tedy bez napojení na orchestrátor (v případě Dockeru tedy dnes nepoužijeme libnetwork driver, to až později).

Project Calico potřebuje distribuovaný Key-Value store Etcd. V praxi to bude celý cluster, pro naše účely postačí jediná instance. Abychom ho nemuseli instalovat, použijeme hotový Docker image a je to.

Budeme používat docker-machine ve variantě pro Windows s driverem na VirtualBox (víc informací v článku na cloudsvet.cz). Založte nového Docker hostitele .

docker-machine create -d virtualbox etcd

Načtěte si komunikační parametry, abychom mohli pohodlně spustit kontejner ve VM s naším novým Docker hostitelem.

docker-machine env etcd

SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\kubicat\.docker\machine\machines\etcd
SET DOCKER_MACHINE_NAME=etcd
REM Run this command to configure your shell:
REM     FOR /f "tokens=*" %i IN ('docker-machine env etcd') DO %i

FOR /f "tokens=*" %i IN ('docker-machine env etcd') DO %i

Spusťte hotový Etcd kontejner a předejte mu parametry (jen upravte IP adresy, pokud jsou ve vaší instalaci jiné).

docker run -d -p 2379:2379 quay.io/coreos/etcd -advertise-client-urls http://192.168.99.100:2379 -listen-client-urls http://0.0.0.0:2379

Tím máme Etcd připraveno (zapamatujme si jeho adresu). Vytvořme teď další dva Docker hostitele.

docker-machine create -d virtualbox node1
docker-machine create -d virtualbox node2

Připojíme se teď do node1 a rozjedeme Calico. Přes environmentální proměnnou mu řekneme, kde běží Etcd, stáhneme si calicoctl (Calico CLI) a nastartujeme ho. CLI si samo stáhne potřebné Docker image a spustí Calico kontejner (nemusíme nic instalovat, Calico má hotový image na Docker Hub).

docker-machine ssh node1
docker@node1:~$ export ETCD_AUTHORITY=192.168.99.100:2379
docker@node1:~$ sudo wget -qO /usr/local/bin/calicoctl http://www.projectcalico.org/builds/calicoctl
docker@node1:~$ sudo chmod +x /usr/local/bin/calicoctl
docker@node1:~$ sudo -E calicoctl node
Pulling Docker image calico/node:latest

Running Docker container with the following command:

docker run -d --restart=always --net=host --privileged --name=calico-node -e HOSTNAME=node1 -e IP= -e IP6= -e CALICO_NETWORKING=true -e AS= -e NO_DEFAULT_POOLS= -e ETCD_AUTHORITY=192.168.99.100:2379 -e ETCD_SCHEME=http -v /var/log/calico:/var/log/calico -v /var/run/calico:/var/run/calico calico/node:latest

Calico node is running with id: d8fccfa61cc29c77d840197784c23105c9d871778afdb31bc1d14bfdc1137060
Waiting for successful startup
No IP provided. Using detected IP: 192.168.99.101
Calico node started successfully

Perfektní, funguje. Teď si spustíme dva jednoduché kontejnery s našimi „servery“ (to jsou workloady a aplikace, které chceme spustit). Protože nemáme v dnešní části integraci Calico přímo s orchestrátorem (v tomto případě by to byl Docker libnetwork), vytvoříme kontejnery zatím bez sítě. Až nastartují, vypište si běžící kontejnery – uvidíte tam naše dva „servery“ a také kontejner calico (v něm běží potřebné procesy jako je Fenix či BGP client).

docker@node1:~$ docker run --net=none --name srv1 -tid busybox
docker@node1:~$ docker run --net=none --name srv2 -tid busybox
docker@node1:~$ docker ps
CONTAINER ID        IMAGE                COMMAND               CREATED              STATUS              PORTS               NAMES
db5536d0b43f        busybox              "sh"                  6 seconds ago        Up 5 seconds                            srv2
bad367ed8840        busybox              "sh"                  10 seconds ago       Up 9 seconds                            srv1
8e312106cdbc        calico/node:latest   "/sbin/start_runit"   About a minute ago   Up About a minute                       calico-node

Vytvořme teď pool adres v Calico a přes Calico CLI napojíme naše kontejnery do sítě a přiřadíme jim IP adresu (zatím ručně – v příštích částech uvidíte, že Calico driver pro Docker libnetwork má i svůj IPAM a adresy umí dávat sám).

docker@node1:~$ sudo -E calicoctl pool add 10.111.0.0/16

docker@node1:~$ sudo -E calicoctl container add srv1 10.111.0.1
docker@node1:~$ sudo -E calicoctl container add srv2 10.111.0.2

Na prvním hostiteli máme hotovo! Otevřete si v druhém okně session do druhého hostitele a udělejte tam totéž (kromě vytváření poolu, ten už máme hotový – je uložen v Etcd databázi).

docker-machine ssh node2
docker@node2:~$ export ETCD_AUTHORITY=192.168.99.100:2379
docker@node2:~$ sudo wget -qO /usr/local/bin/calicoctl http://www.projectcalico.org/builds/calicoctl
docker@node2:~$ sudo chmod +x /usr/local/bin/calicoctl
docker@node2:~$ sudo -E calicoctl node
Pulling Docker image calico/node:latest

Running Docker container with the following command:

docker run -d --restart=always --net=host --privileged --name=calico-node -e HOSTNAME=node1 -e IP= -e IP6= -e CALICO_NETWORKING=true -e AS= -e NO_DEFAULT_POOLS= -e ETCD_AUTHORITY=192.168.99.100:2379 -e ETCD_SCHEME=http -v /var/log/calico:/var/log/calico -v /var/run/calico:/var/run/calico calico/node:latest

Calico node is running with id: d8fccfa61cc29c77d840197784c23105c9d871778afdb31bc1d14bfdc1137060
Waiting for successful startup
No IP provided. Using detected IP: 192.168.99.101
Calico node started successfully

docker@node2:~$ docker run --net=none --name srv3 -tid busybox
docker@node2:~$ docker run --net=none --name srv4 -tid busybox
docker@node2:~$ docker ps
CONTAINER ID        IMAGE                COMMAND               CREATED              STATUS              PORTS               NAMES
db5536d0b43f        busybox              "sh"                  6 seconds ago        Up 5 seconds                            srv2
bad367ed8840        busybox              "sh"                  10 seconds ago       Up 9 seconds                            srv1
8e312106cdbc        calico/node:latest   "/sbin/start_runit"   About a minute ago   Up About a minute                       calico-node

docker@node2:~$ sudo -E calicoctl pool add 10.111.0.0/16

docker@node2:~$ sudo -E calicoctl container add srv3 10.111.0.3
docker@node2:~$ sudo -E calicoctl container add srv4 10.111.0.4

Vraťme se do prvního uzlu a prozkoumejme stav Calico. Nejen, že běží, ale má funkční BGP peering do prvního nodu!

docker@node1:~$ sudo -E calicoctl status
calico-node container is running. Status: Up About an hour
Running felix version 1.4.0rc1

IPv4 BGP status
IP: 192.168.99.101    AS Number: 64511 (inherited)
+----------------+-------------------+-------+----------+-------------+
|  Peer address  |     Peer type     | State |  Since   |     Info    |
+----------------+-------------------+-------+----------+-------------+
| 192.168.99.102 | node-to-node mesh |   up  | 17:12:00 | Established |
+----------------+-------------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 address configured.

Směrovací tabulky

Co nám říká pohled do směrovací tabulky na node1? Vidíme IP adresy přímo připojených kontejnerů a také cestu do kontejnerů na druhém nodu.

docker@node1:~$ ip r
default via 10.0.2.2 dev eth0  metric 1
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15
blackhole 10.111.0.0/26  proto bird
10.111.0.1 dev cali696be34ff1e  scope link
10.111.0.2 dev cali769dd09cf1e  scope link
10.111.0.3 via 192.168.99.102 dev eth1  proto bird
10.111.0.4 via 192.168.99.102 dev eth1  proto bird
127.0.0.1 dev lo  scope link
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1
192.168.99.0/24 dev eth1  proto kernel  scope link  src 192.168.99.101

V node2 je to pochopitelně obráceně.

docker@node2:~$ ip r
default via 10.0.2.2 dev eth0  metric 1
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15
10.111.0.0/26 via 192.168.99.101 dev eth1  proto bird
10.111.0.3 dev cali96fdd530f1e  scope link
10.111.0.4 dev cali99a85c7df1e  scope link
127.0.0.1 dev lo  scope link
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1
192.168.99.0/24 dev eth1  proto kernel  scope link  src 192.168.99.102

Všimněte si také, že se Calico pokusilo o sumarizaci některých adres. Můžeme přidat další kontejner a dát mu nějakou vyšší adresu.

docker@node1:~$ docker run --net=none --name srv5 -tid busybox
docker@node1:~$ sudo -E calicoctl container add srv5 10.111.0.150

Jak vypadá směrovací tabulka teď? Vy jako síťaři jistě snadno rozklíčujete, co se stalo 🙂

docker@node1:~$ ip r
default via 10.0.2.2 dev eth0  metric 1
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15
blackhole 10.111.0.0/26  proto bird
10.111.0.1 dev cali696be34ff1e  scope link
10.111.0.2 dev cali769dd09cf1e  scope link
10.111.0.3 via 192.168.99.102 dev eth1  proto bird
10.111.0.4 via 192.168.99.102 dev eth1  proto bird
blackhole 10.111.0.128/26  proto bird
10.111.0.150 dev cali6d865923f1e  scope link
127.0.0.1 dev lo  scope link
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1
192.168.99.0/24 dev eth1  proto kernel  scope link  src 192.168.99.101

docker@node2:~$ ip r
default via 10.0.2.2 dev eth0  metric 1
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15
10.111.0.0/26 via 192.168.99.101 dev eth1  proto bird
10.111.0.3 dev cali96fdd530f1e  scope link
10.111.0.4 dev cali99a85c7df1e  scope link
10.111.0.128/26 via 192.168.99.101 dev eth1  proto bird
127.0.0.1 dev lo  scope link
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1
192.168.99.0/24 dev eth1  proto kernel  scope link  src 192.168.99.102

Pingat z vnitřku kontejnerů na jejich kolegy zatím nezkoušejte – nemáme nastavena komunikační pravidla (mikrosegmentaci) a výchozí stav je nepouštět nic. V příštích dílech to napravíme a pravidla založíme (v případě nasazení Calico s libnetwork driverem pro Docker, což je určitě v praxi využívanější možnost, driver sám základní pravidla založí, ale o tom později).

Tak to vidíte – nic složitého (porovnejte s rozchozením komplexnějšího overlay řešení). Máme dva hostitele a informaci o IP adresách kontejnerů si vyměňujeme BGP protokolem. Snadné. Příště se na to BGP podíváme detailněji a napojíme ho na fyzickou síť, konkrétně do prvku s HPE Comware coby BGP routeru.

Series Navigation<< L3 a kontejnery bez overlay: Project Calico prakticky (1) – architekturaL3 a kontejnery bez overlay: Project Calico prakticky (3) – BGP >>
Similar posts
  • Moderní 10G v datovém centru s novou ... HPE tento týden oznámilo evoluční vývoj portfolia v oblasti data center 1U prvků s 10G/40G/100G technologií, konkrétně novou řadu 5940. Co je nového? Hardwarové vlastnosti Prvky přichází s novou generací 10/40/100 čipů, které umožnily mít nově prvky se 100G uplinky (a to hned šesti) a také přináší podporou nových vlastností jako je směrování VXLAN (předchozí [...]
  • ArubaOS-Switch 16.02: IP SLA i pro Ar... IP SLA Ve světě směrovačů už poměrně dlouho existuje možnost monitorovat dostupnost a kvalitu spojení s využitím L3 protokolů. Můžete například z pobočky v pravidelných intervalech testovat dostupnost brány datového centra nebo klíčového serveru včetně měření doby jeho reakce (round-trip-time). Dá se také namířit dva routery proti sobě tak, že jeden se ptá a druhý [...]
  • OpenSwitch a Ansible automatizace pra... Posledně jsme si nastavili naší virtuální OpenSwitch leaf-spine topologii a vybudovali jsme BGP L3 fabric. Dnes si ukážeme více z životního cyklu s použitím Ansible – otestování sítě, vrácení odchylek do požadovaného stavu sítě a rolování změn. Jste líní číst? Mrkněte na video: Playbook pro testování sítě Ansible můžete použít i pro testování, že síť [...]
  • OpenSwitch a Ansible automatizace pra... Minule jsme napojili naši virtuální topologii na Ansible a spustili náš první testovací Playbook. Dnes provodeme automatizovanou konfiguraci L3 fabric a otestujeme síť. Příprava konfiguračních podkladů Pro zprovoznění L3 fabric potřebujeme Loopback adresu, IP adresy na jednotlivých spojeních mezi prvky a nastavení BGP (autonomní systémy, peering). V našem Ansible prostředí si vytvoříme jeden YAML soubor, [...]
  • OpenSwitch a Ansible automatizace pra... V minulém díle jsme si rozjeli Lead-Spine OpenSwitch topologii s využitím Dockeru a skript nám vygeneroval také hosts file pro Ansible. Dnes se vyzkoušíme napojení na Ansible 2.1. Příprava Ansible a vašeho VM První co potřebujeme udělat je nainstalovat Ansible minimálně ve verzi 2.1. Postup najdete zde: http://docs.ansible.com/ansible/intro_installation.html Dále vyřešíme nastavení SSH klienta v naší [...]

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *