Segítségével konzul szolgáltatás felderítési és egyéb alkalmazások, programozó jegyzetek

Sokan hallottak már, hogy van egy ilyen dolog, úgynevezett konzul alapított HashiCorp, a cég adta a világnak Csavargó. Csomagoló és sok más csodálatos dolgot. Valaki még tudja Consul szolgáltatás felderítési, valamint például etcd vagy állatgondozó. De nem mindenki tudja, hogy amellett, hogy szolgáltatási felfedezés konzul is rengeteg egyéb funkciók, mint például a beépített ellenőrzési szolgáltatások, elosztott Loki, és mások. Ebben a cikkben megnézzük konzul, valamint megtanulják, hogyan kell használni, de nem az összes, hanem egy jelentős részét annak működését.

A legfontosabb jellemzői

Amikor azt mondják, «szolgáltatás felfedezés», tartsd észben, hogy van egy bizonyos rendszer, amely tudja, hogy hol a szolgáltatás. Például, ha használ PostgreSQL. Van több adatbázis szilánkok, mindegyik darabját a mester és sok replikák. Amikor a mester esik, akár kézzel, akár automatikusan végrehajtja feylover, ami az egyik korábbi válik a mester replikák. Más szóval, a szerepe a mester halad. Ezen túlmenően, a több replikák nem feltétlenül végleges. Tehát, a szolgáltatás felfedezés - ez a fajta dolog, hogy nem tud válaszolni a kérdésre alkalmazás „, és aki most a mester darabján N?» Vagy «adj egy listát az összes replika szilánk N».

Persze, te hülye mindezt az információt a konfigurációval. De amikor a szerverek és alkalmazások sok olyan változatát, a szolgáltatás felfedezés kényelmesebbé válik. Legalább mivel minden adat egy helyen, és ezért nem hagyja el, és mert a konfiguráció frissítik sokkal gyorsabb, mint szakadó minden configs SCP szerver. Így, amikor klaszter platformokon, mint Kubernetes, Mesos Nomad vagy nem tudja előre, hogy melyik speciális gépek, amelyek szolgáltatásokat emelt, és hogyan vannak most, plusz azok gyakran mozog az egyik gépről a másikra. Ez azt jelenti, hogy soha nem fogja megtalálni őket anélkül, hogy a kezét a megoldás, mint a konzul.

Különösen Consul megoldására szolgáltatás felfedezés kínál REST API-t. Ez is egy beépített DNS szerver, akkor lehet használni, még olyan alkalmazások, amelyek nem tudok semmilyen konzul. Konzul ugyanakkor képes bővíteni, hogy több adatközpont, és ezzel szemben, mondjuk, etcd fut nemcsak Linux és MacOS, hanem a FreeBSD, és még a Windows. Még bizalommal, hogy HashiCorp konzul teszteket Jepsen.

A konzul információ a meglévő szolgáltatások nevezzük könyvtárba. Directory tárolja több szerveren konzul, aki kommunikálni egymással protokoll használatával Raft. Amellett, hogy a szerverek is vannak szerek. Minőségben vannak felszerelve az összes gép, amelynél a hűvös szolgáltatás és jelentés szerverek Consul'a a jelenlegi állapotában a gépek és a szolgáltatás rajta, egy pletyka protokollt. Így, ha a gép alá, vagy az egyik szolgáltatást kap rossz, Consul'a szerver tud róla, és az érintett szolgáltatások felvilágosítás adni az ügyfeleknek. Szerver maguk is használható szerek.

Amellett, hogy a szolgáltatás felfedezés és monitoring konzul is sok más hasznos funkciókat. Néhány, még mindig van idő, hogy megismerjék az.

Telepítése és konfigurálása a konzul

Mindezek a lépések már tesztelt engem az Ubuntu 14.04 LTS, futó három LXC konténerek. Valószínűleg más Linux és változatai Ubuntu helyzet nem sokban különbözik. Az is elképzelhető, hogy az összes gép a hálózatban 10.0.3 / 24.

Consul írt Go és a megosztott egyetlen bináris (és a forrást. Mondanom sem kell). Sajnos HashiCorp cég nem rendelkezik kész csomagokat Debian / Ubuntu vagy CentOS / RHEL. Itt a jó ember létrehozott egy adattár, mely segítségével önmaguktól összeállnak deb-csomag. Is sikerült megtalálni a PPA. bár nem a legújabb verzióját a konzul. Azonban semmi sem akadályozza meg, hogy konzul a PPA, majd cserélje ki a bináris, ha szükséges.

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository ppa: bcandrea / konzul
sudo apt-get update
sudo apt-get install konzul konzul-web-ui dnsutils curl JQ

Ha szeretné, hogy a legtöbb svezhak is futtatni parancsokat, mint ezek:

sudo apt-get install kicsomagoló
wget https: // releases.hashicorp.com / path / to / consul.zip
kicsomagolás consul_VER_linux_amd64.zip
sudo service konzul megálló
sudo mv / usr / bin / konzul / usr / bin / consul.backup
sudo mv konzul / usr / bin / konzul

/etc/consul.d/20-agent.json jogot, hogy a fájl valahogy így:

"Szerver": true,
"Datacenter": "dc1"
"Bootstrap_expect": 3
"Data_dir": "/ opt / konzul"
"Log_level": "INFO"
>

... hogy a lehető legtöbbet Consul szerver helyett egy ügynök.

sudo service konzul restart

Másrészt nodah nem ugyanaz. Aztán össze őket vlaster:

konzul csatlakozzon 10.0.3.223 10.0.3.224

curl -s http: // 10.0.3.224: 8500 / v1 / katalógus / szolgáltatás / postgresql-replika \
| JQ.

[
"ModifyIndex": 804,
"CreateIndex": 802,
"Node": "postgresql-slave",
„Cím”: „10.0.3.223”
"ServiceID": "postgresql-replica-1"
"ServiceName": "postgresql-replica"
"ServiceTags": [
"Postgresql"
]
"ServiceAddress": "10.0.3.223"
"ServicePort": 5432,
"ServiceEnableTagOverride": false
>
"ModifyIndex": 842,
"CreateIndex": 841,
"Node": "postgresql-szolga-2"
„Cím”: „10.0.3.224”
"ServiceID": "postgresql-replika-2"
"ServiceName": "postgresql-replica"
"ServiceTags": [
"Postgresql"
]
"ServiceAddress": "10.0.3.224"
"ServicePort": 5432,
"ServiceEnableTagOverride": false
>
]

Az igazat megvallva, nem teljesen értem, hogy miért kell két területen - cím és ServiceAddress. Azt gondolja, hogy ez a helyzet, ha azt akarjuk, hogy figyelemmel kíséri a szerek, harmadik féltől származó szolgáltatásokra.

A szolgáltatások listája a megadott gép:

curl -s http: // 10.0.3.224: 8500 / v1 / katalógus / node / postgresql-slave | JQ.

"Szolgáltatás": "postgresql-replica-1": "ModifyIndex": 804,
"CreateIndex": 802,
"EnableTagOverride": hamis,
"Port": 5432,
„Cím”: „10.0.3.223”
"Címkék": [
"Postgresql"
]
"Szolgáltatás": "postgresql-replica"
"ID": "postgresql-replica-1"
>
"Consul": "ModifyIndex": 72,
"CreateIndex": 4
"EnableTagOverride": hamis,
"Port": 8300,
"Cím": "",
"Címkék": [],
„Szolgáltatás”: „konzul”
"ID": "Consul"
>
>
"Node": "ModifyIndex": 804,
"CreateIndex": 4
„Cím”: „10.0.3.223”
"Node": "postgresql-slave"
>
>

Eltávolítása a szolgáltatás ügynök:

curl a http: // localhost: 8500 / v1 / ügynök / szolgáltatás / Deregister / postgresql-master

Ellenőrizze, hogy a szolgáltatás él, akkor:

curl -s http: // localhost: 8500 / v1 / egészség / szolgáltatás / postgresql-replika | JQ.

A válasz ebben az esetben jön elég nagy, ezért itt nem szerepel.

Szolgáltatás felfedezés a DNS-

dig @ 127.0.0.1 -p 8600 postgresql-replica.service.consul

;; KÉRDÉS SZAKASZ:
; Postgresql-replica.service.consul. EGY

;; VÁLASZ SZAKASZ:
postgresql-replica.service.consul. 0 A 10.0.3.223
postgresql-replica.service.consul. 0 A 10.0.3.224

Lekérdezheti a SRV rekordot, hogy a válasz is a port számot:

dig srv @ 127.0.0.1 -p 8600 postgresql-replica.service.consul

A válasz ebben az esetben:

;; KÉRDÉS SZAKASZ:
; Postgresql-replica.service.consul. IN SRV

;; VÁLASZ SZAKASZ:
postgresql-replica.service.consul. IN SRV 0 január 1 5432
postgresql-slave-2.node.dc1.consul.
postgresql-replica.service.consul. IN SRV 0 január 1 5432
postgresql-slave.node.dc1.consul.
;; További rész:
postgresql-slave-2.node.dc1.consul. 0 A 10.0.3.224
postgresql-slave.node.dc1.consul. 0 A 10.0.3.223

Zero mindkét otvetah- TTL, azaz a DNS-válasz nem tárolásra kerülnek.

Lehet, hogy észrevette, hogy a fenti információ érkezett mintegy szolgáltatások konzul nem mondja ezeket a szolgáltatásokat, vagy hogy nincs munka egyáltalán ma.

Kérjen információt az állapota a szolgáltatás és a fogadó révén lehetséges toll:

curl -s http: // 10.0.3.224: 8500 / v1 / egészség / szolgáltatás / postgresql-master | JQ.

[
"Ellenőrzések": [
"ModifyIndex": 13148,
"CreateIndex": 13148,
"Node": "postgresql-mester",
"CheckID": "serfHealth"
"Név": "jobbágy Health Status",
„Állapot”: „halad”,
"Notes": "",
„Output”: „ügynök életben és elérhető”,
"ServiceID": "",
"ServiceName": ""
>
"ModifyIndex": 13155,
"CreateIndex": 13150,
"Node": "postgresql-mester",
"CheckID": "szolgáltatás: postgresql-mester",
„Név”: „Szolgáltatás»postgresql-mester«ellenőrzés”,
„Állapot”: „kritikus”,
"Notes": "",
"Output": "9.5 / fő (port 5432): le \ n",
"ServiceID": "postgresql-mester",
"ServiceName": "postgresql-mester"
>
]
"Szolgáltatás": "ModifyIndex": 13155,
"CreateIndex": 13150,
"EnableTagOverride": hamis,
"Port": 5432,
„Cím”: „10.0.3.245”
"Címkék": [
"Postgresql"
]
"Szolgáltatás": "postgresql-mester",
"ID": "postgresql-mester"
>
"Node": "ModifyIndex": 13155,
"CreateIndex": 13148,
„Cím”: „10.0.3.245”
"Node": "postgresql-mester"
>
>
]

Ebben a példában a szolgáltatás.

És így tudja a helyzetét házigazdák és szolgáltatások rajta:

curl -s http: // 10.0.3.224: 8500 / v1 / egészség / node / postgresql-slave- 2 | JQ.

[
"ModifyIndex": 12827,
"CreateIndex": 12827,
"Node": "postgresql-szolga-2"
"CheckID": "serfHealth"
"Név": "jobbágy Health Status",
„Állapot”: „halad”,
"Notes": "",
„Output”: „ügynök életben és elérhető”,
"ServiceID": "",
"ServiceName": ""
>
"ModifyIndex": 13147,
"CreateIndex": 12832,
"Node": "postgresql-szolga-2"
"CheckID": "szolgáltatás: postgresql-replica-2"
"Név": "Szolgáltatás 'postgresql-replica' ellenőrzés",
„Állapot”: „halad”,
"Notes": "",
"Output": "9.5 / fő (port 5432): online, helyreállítási \ n",
"ServiceID": "postgresql-replika-2"
"ServiceName": "postgresql-replica"
>
]

Próbálja poronyat host vagy szolgáltatást, és látni, hogy a megfelelő helscheki változtatják állapotukat elhaladó kritikus. A web-foglalatot a házigazdák és szolgáltatások változtatni a színét zöldről narancsra. Érdekes, hogy amikor a szolgáltatás, akkor még továbbra is meg kell adni kérésre a katalógusban a REST API, de a DNS-válasz szolgáltatás átvágják. Ez a viselkedés lehet korrigálni hozzátéve, hogy a lekérdezés érv? Elhaladva.

Információk a klaszter és vezető megválasztása

Consul lássuk, aki most a klaszter:

curl -s http: // localhost: 8500 / v1 / állapot / társaik | JQ.

És lehet kapni nagyon virágozni tájékoztatás a szer, amely többek között az IP az aktuális gép:

göndör -s http: // localhost: 8500 / v1 / ügynök / self | JQ '.Member.Addr'

Van egy természetes vágy, hogy próbálja meg a vezető megválasztása segítségével az API az alkalmazás 20 sornyi Python kódot. De ez aligha jó ötlet. Egyrészt azért, mert könnyű megszerezni, és kapsz verseny egy időben a két vezető. Ahhoz, hogy megoldja ezt a problémát meg kell, hogy megvár egy ACK mazhoriti klaszter, sőt, az ACK be kell vonni a számát a jelenlegi term'a Raft'e egy számláló. Másodszor, a jó ebben az esetben van szükség, amikor semmiféle intézkedés annak ellenőrzésére, hogy még mindig a vezető.

Amint helyesen közölte velem @ sum3rman. sokkal könnyebb használni, más megközelítést, feltehetően az úgynevezett vezető lízing. Mivel már van egy KV-tároló támogatja a CAS, akkor egyszerűen írja be, hogy a gép ilyen vezető lejártáig egy bizonyos ideig. Mindaddig, amíg a vezető él és jól van, akkor rendszeresen megújítani ebben az időben. Ha a vezető meghal, gyorsan valaki almenüt. Egy ilyen megoldás megfelelő szinkronizálni az időt használó gépeken ntpd és ellenőrizze, ha a vezető minden olyan intézkedés, amely elhagyta elég idő, hogy végre ezt a műveletet.

Egy másik érdekes lehetőség az első helyen a vezető megválasztása Consul leírt legtöbb dokumentum Consul'a. Támaszkodik a már ismert mechanizmus helschekov és a munkamenet. Sessions lényegében elosztott Loka által automatikusan mentesített TTL vagy szolgáltatás az ősszel. Ennek részeként a cikk nem tartjuk az ülésen. De ennek a lehetőségét is nagyon érdekes, és én nagyon ajánlom, hogy megismerjék azt.

Megjegyzés a biztonság

Felhívjuk figyelmét, hogy alapértelmezés szerint konzul nem használják forgalmi titkosítást. Is, amelynek számára csak egyetlen gépet a klaszter, akkor egészen egyszerűen, hogy egy DoS egész alkalmazást.

Itt azonban erősen megkérdőjelezhető. Először is, minden attól függ, hogyan használja a konzul. Például, ha azt csak akkor kell használni, mint egy KV boltban, hozzáférés nagyon könnyű, hogy korlátozza a nginx és iptables. Másodszor, a jogot, hogy az élet egy véleményen van, hogy bejutott az egyik kezelőfelületek, a támadó valószínűleg hozzáférni az adatbázishoz, és így képes arra, hogy a DoS, egyszerűen írásban az adatbázisban képtelenség. Ezért ebben a szakaszban már túl késő, hogy megvédje, miért szükségtelen kényelmetlenséget magukat?

Mindenesetre, ezek a kérdések kívül esnek ezen a poszton, de a börtönben talál egy pár hivatkozások a témában.

következtetés

Használnak konzul, és ha igen, hogyan benyomások?

Kiegészítés: Egy igazi példa a konzul megtalálható megjegyzés sztóló: létre PostgreSQL klaszter avtofeyloverom.