{"id":41051,"date":"2020-02-05T21:28:58","date_gmt":"2020-02-05T18:28:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/consul-iptables-3"},"modified":"2020-02-05T21:28:58","modified_gmt":"2020-02-05T18:28:58","slug":"consul-iptables-3","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/consul-iptables-3","title":{"rendered":"Consul + iptables = :3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00c5r 2010 hade f\u00f6retaget <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/wargaming\/\">Wargaming<\/a><\/noindex> 50 servrar och en enkel n\u00e4tverksmodell: backend, frontend och brandv\u00e4gg. Antalet servrar \u00f6kade, modellen blev mer komplex: stagingar, isolerade VLAN med ACL, sedan VPN med VRF, VLAN med ACL p\u00e5 L2, VRF med ACL p\u00e5 L3. Snurrar det i huvudet? Det blir roligare l\u00e4ngre fram.<\/p>\n<p>N\u00e4r antalet servrar n\u00e5dde 16 000 blev det om\u00f6jligt att arbeta utan problem med s\u00e5 m\u00e5nga olika segment. S\u00e5 vi kom p\u00e5 en annan l\u00f6sning. Vi anv\u00e4nde Netfilter-stacken och lade till Consul som datak\u00e4lla, vilket resulterade i en snabb distribuerad brandv\u00e4gg. Vi ersatte ACL p\u00e5 routrarna och anv\u00e4nde den som extern och intern brandv\u00e4gg. F\u00f6r dynamisk hantering av verktyget utvecklade vi BEFW-systemet, som till\u00e4mpades \u00f6verallt: fr\u00e5n hantering av anv\u00e4ndartillg\u00e5ng i det produktiva n\u00e4tverket till isolering av n\u00e4tverkssegment fr\u00e5n varandra.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/246e74278f413749a676599b5ce986a5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHur detta fungerar och varf\u00f6r du b\u00f6r titta n\u00e4rmare p\u00e5 detta system kommer att ber\u00e4tta <strong>Ivan Agarov<\/strong> (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annmuor\/\" class=\"user_link\">annmuor<\/a><\/noindex>) \u2014 chef f\u00f6r infrastrukturs\u00e4kerhetsgruppen inom underh\u00e5llsdivisionen vid Wargaming i Minsk. Ivan \u00e4r en fan av SELinux, \u00e4lskar Perl och skriver kod. Som chef f\u00f6r informationss\u00e4kerhetsgruppen arbetar han regelbundet med loggar, s\u00e4kerhetskopior och R&amp;D f\u00f6r att skydda Wargaming fr\u00e5n hackare och s\u00e4kerst\u00e4lla driften av alla f\u00f6retagets spelservrar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"4zP67uYnsR4\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/4zP67uYnsR4\/hqdefault.jpg\" alt=\"Spela video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h2>Historisk \u00f6versikt<\/h2>\n<p>\nInnan jag ber\u00e4ttar hur vi gjorde detta, ska jag f\u00f6rklara hur vi kom hit och varf\u00f6r det beh\u00f6vdes. F\u00f6r detta, l\u00e5t oss resa nio \u00e5r tillbaka: \u00e5r 2010, n\u00e4r World of Tanks precis hade lanserats. Wargaming hade ungef\u00e4r 50 servrar.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/64e1c2839363dbdf59ba5f11bb13530e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Graf \u00f6ver f\u00f6retagets servertillv\u00e4xt.<\/em><\/p>\n<p>Vi hade en n\u00e4tverksmodell. F\u00f6r den tiden var den optimal.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/c0509324e2a83882a9792ba75612ceea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>N\u00e4tverksmodellen 2010.<\/em><\/p>\n<p>I frontenden finns de d\u00e5liga killarna som vill krossa oss, men det finns en brandv\u00e4gg. I backend finns det ingen brandv\u00e4gg, men d\u00e4r finns 50 servrar, och vi k\u00e4nner till dem alla. Allt fungerar bra.<\/p>\n<p>Under fyra \u00e5r vuxit serverparken hundrafaldigt, till 5000. De f\u00f6rsta isolerade n\u00e4tverken \u2014 stagingar \u2014 d\u00f6k upp: de kan inte g\u00e5 i produktion, och d\u00e4r fanns ofta s\u00e5dant som kunde vara farligt.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/08e1d7670ce1a1346e49d87c67c4be1b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>N\u00e4tverksmodellen 2014.<\/em><\/p>\n<p>Av ren vana anv\u00e4nde vi fortfarande samma h\u00e5rdvara, och allt arbete utf\u00f6rdes p\u00e5 isolerade VLAN: ACL skrivs till VLAN som till\u00e5ter eller blockerar vissa anslutningar.<\/p>\n<p>\u00c5r 2016 n\u00e5dde antalet servrar 8000. Wargaming f\u00f6rv\u00e4rvade andra studior, och ytterligare partnern\u00e4tverk tillkom. De verkar vara v\u00e5ra, men \u00e4r inte helt s\u00e5: f\u00f6r partner fungerade VLAN ofta inte, man beh\u00f6vde anv\u00e4nda VPN med VRF, och isoleringarna blev sv\u00e5rare. Blandningen av ACL-isoleringar v\u00e4xte.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/a6580c9551730447e16d7881eb102275.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>N\u00e4tverksmodellen \u00e5r 2016.<\/em><\/p>\n<p>I b\u00f6rjan av 2018 hade maskinparken vuxit till 16 000. Det fanns 6 segment, och de andra r\u00e4knade vi inte, inklusive de som var st\u00e4ngda, d\u00e4r finansiella data f\u00f6rvarades. Det d\u00f6k upp containern\u00e4tverk (Kubernetes), DevOps, molnn\u00e4tverk som ansl\u00f6ts via VPN, till exempel fr\u00e5n IWS. Det fanns v\u00e4ldigt m\u00e5nga regler \u2013 det var sm\u00e4rtsamt.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ec44e6a60da98daa4bbf2bca2e3b2e1a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>N\u00e4tverksmodellen och isoleringss\u00e4tten \u00e5r 2018.<\/em><\/p>\n<p>F\u00f6r isolering anv\u00e4nde vi: VLAN med ACL p\u00e5 L2, VRF med ACL p\u00e5 L3, VPN och mycket annat. F\u00f6r m\u00e5nga.<\/p>\n<h2>Problem<\/h2>\n<p>\nAlla lever med ACL och VLAN. Vad \u00e4r egentligen problemet? Den fr\u00e5gan kommer Harold att svara p\u00e5, som d\u00f6ljer sin sm\u00e4rta.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4df5105af3bce515d80e8e5f3e14c027.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet fanns m\u00e5nga problem, men f\u00e5 av dem var massiva.<\/p>\n<ul>\n<li><strong>Geometrisk prish\u00f6jning f\u00f6r nya regler<\/strong>. Varje ny regel tog l\u00e4ngre tid att l\u00e4gga till \u00e4n den f\u00f6reg\u00e5ende, eftersom man f\u00f6rst var tvungen att kolla om det redan fanns en s\u00e5dan regel.<\/li>\n<li><strong>Ingen brandv\u00e4gg inom segmenten<\/strong>. Segmenten var p\u00e5 n\u00e5got s\u00e4tt \u00e5tskilda, men innanf\u00f6r fanns det inte tillr\u00e4ckligt med resurser.<\/li>\n<li><strong>Reglerna till\u00e4mpades l\u00e5ngsamt. <\/strong>Med manuellt skrivna lokala regler kunde operat\u00f6rerna skriva en p\u00e5 en timme. Globala tog flera dagar.<\/li>\n<li><strong>Sv\u00e5righeter med reglernas granskning<\/strong>. Eller snarare, det var om\u00f6jligt. De f\u00f6rsta reglerna skrevs redan 2010, och de flesta av deras f\u00f6rfattare arbetade inte l\u00e4ngre i f\u00f6retaget.<\/li>\n<li><strong>L\u00e5g kontrollniv\u00e5 \u00f6ver infrastrukturen<\/strong>. Det \u00e4r det st\u00f6rsta problemet - vi visste d\u00e5ligt vad som egentligen h\u00e4nde.<\/li>\n<\/ul>\n<p>\nS\u00e5 h\u00e4r s\u00e5g en n\u00e4tverksingenj\u00f6r ut \u00e5r 2018 n\u00e4r han h\u00f6rde: \"Vi beh\u00f6ver lite mer ACL\".<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/8366d3092558ebb15a4ba6d8e5702032.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>L\u00f6sningar<\/h2>\n<p>\nI b\u00f6rjan av 2018 beslutades det att g\u00f6ra n\u00e5got \u00e5t detta.<\/p>\n<p><strong>Kostnaden f\u00f6r integrationer v\u00e4xer konstant. <\/strong>Utg\u00e5ngspunkten var att stora datacenter slutade st\u00f6dja isolerade VLAN och ACL, eftersom minnet p\u00e5 enheterna tog slut.<\/p>\n<p>L\u00f6sningen: att ta bort den m\u00e4nskliga faktorn och automatisera \u00e5tkomsten i st\u00f6rsta m\u00f6jliga utstr\u00e4ckning.<\/p>\n<p><strong>Nya regler till\u00e4mpas l\u00e5ngsamt. <\/strong>L\u00f6sningen: snabba upp till\u00e4mpningen av regler, g\u00f6ra den distribuerad och parallell. F\u00f6r detta beh\u00f6vs ett distribuerat system s\u00e5 att regler levereras automatiskt, utan rsync eller SFTP till tusen system.<\/p>\n<p><strong>Avsaknad av brandv\u00e4gg inom segmenten. <\/strong>Brandv\u00e4ggar inom segmenten b\u00f6rjade p\u00e5verka oss n\u00e4r olika tj\u00e4nster upptr\u00e4dde inom samma n\u00e4tverk. L\u00f6sningen: anv\u00e4nd brandv\u00e4gg p\u00e5 v\u00e4rdniv\u00e5 \u2014 host-baserade brandv\u00e4ggar. Praktiskt taget \u00f6verallt anv\u00e4nder vi Linux, och \u00f6verallt har vi iptables, det \u00e4r inget problem.<\/p>\n<p><strong>Sv\u00e5righeter med granskning av regler.<\/strong> L\u00f6sningen: lagra alla regler p\u00e5 ett och samma st\u00e4lle f\u00f6r \u00f6versikt och hantering, s\u00e5 att vi kan granska allt.<\/p>\n<p><strong>L\u00e5g kontrollniv\u00e5 \u00f6ver infrastrukturen. <\/strong>L\u00f6sningen: genomf\u00f6r en inventering av alla tj\u00e4nster och \u00e5tkomster mellan dem.<\/p>\n<p>Detta \u00e4r mer en administrativ process \u00e4n en teknisk. Ibland har vi 200-300 nya releaser per vecka, s\u00e4rskilt under kampanjer och helgdagar. Detta g\u00e4ller bara f\u00f6r ett team av v\u00e5ra DevOps. Med s\u00e5 m\u00e5nga releaser \u00e4r det om\u00f6jligt att se och f\u00f6rst\u00e5 vilka portar, IP-adresser och integrationer som beh\u00f6vs. D\u00e4rf\u00f6r beh\u00f6vde vi s\u00e4rskilt utbildade servicechefer som intervjuade teamen: \"Vad finns \u00f6verhuvudtaget och varf\u00f6r har ni startat detta?\"<\/p>\n<p>Efter allt vi har lanserat ser n\u00e4tverksingenj\u00f6ren redan ut s\u00e5 h\u00e4r \u00e5r 2019.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ccca25d7f7bb7f70638725addc6d99ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Consul<\/h2>\n<p>\nVi beslutade att allt vi hittade med hj\u00e4lp av servicecheferna skulle placeras i Consul och d\u00e4rifr\u00e5n skulle vi skriva iptables-regler.<\/p>\n<p>Hur beslutade vi att g\u00f6ra detta?<\/p>\n<ul>\n<li>Vi samlar alla tj\u00e4nster, n\u00e4tverk och anv\u00e4ndare.<\/li>\n<li>Vi skapar iptables-regler baserade p\u00e5 dem.<\/li>\n<li>Vi automatiserar kontrollen.<\/li>\n<li>\u2026.<\/li>\n<li>VINST.<\/li>\n<\/ul>\n<p>\nConsul \u00e4r ingen fj\u00e4rr-API, den kan fungera p\u00e5 varje nod och skriva till iptables. \u00c5terst\u00e5r att komma p\u00e5 automatiska kontrollverktyg som rensar bort det \u00f6verfl\u00f6diga, och en stor del av problemen kommer att l\u00f6sas! Det \u00f6vriga f\u00f6rb\u00e4ttrar vi under processen.<\/p>\n<h3>Varf\u00f6r Consul?<\/h3>\n<p>\n<strong>Har visat sig vara tillf\u00f6rlitlig. <\/strong>Vi anv\u00e4nde den som backend f\u00f6r Vault mellan 2014 och 2015, d\u00e4r vi lagrar l\u00f6senord.<\/p>\n<p><strong>F\u00f6rlorar inte data.<\/strong>. Under hela tiden vi anv\u00e4nde Consul har den inte f\u00f6rlorat data vid en enda incident. Detta \u00e4r en stor f\u00f6rdel f\u00f6r systemet f\u00f6r brandv\u00e4ggshantering.<\/p>\n<p><strong>P2P-kopplingar p\u00e5skyndar spridningen av f\u00f6r\u00e4ndringar.<\/strong>. Med P2P kommer alla f\u00f6r\u00e4ndringar snabbt, man beh\u00f6ver inte v\u00e4nta i timmar.<\/p>\n<p><strong>Bekv\u00e4m REST API.<\/strong> Vi \u00f6verv\u00e4gde \u00e4ven Apache ZooKeeper, men den har ingen REST API, man f\u00e5r anv\u00e4nda knep.<\/p>\n<p><strong>Fungerar b\u00e5de som nyckelf\u00f6rvaring (KV) och som katalog (Service Discovery).<\/strong>. Man kan lagra tj\u00e4nster, kataloger och datacenter p\u00e5 en g\u00e5ng. Detta \u00e4r bekv\u00e4mt inte bara f\u00f6r oss utan \u00e4ven f\u00f6r angr\u00e4nsande team, eftersom vi t\u00e4nker globalt n\u00e4r vi bygger en stor tj\u00e4nst.<\/p>\n<p><strong>Skriven i Go, vilket ing\u00e5r i Wargaming-teknologin. <\/strong>Vi \u00e4lskar detta spr\u00e5k, vi har m\u00e5nga Go-utvecklare.<\/p>\n<p><strong>Ett kraftfullt ACL-system. <\/strong>Med hj\u00e4lp av ACL i Consul kan vi styra vem som f\u00e5r skriva och vad. Vi garanterar att brandv\u00e4ggsreglerna inte kommer att krocka med n\u00e5got annat och att vi inte kommer att ha problem med detta.<\/p>\n<p>Men Consul har ocks\u00e5 nackdelar.<\/p>\n<ul>\n<li><strong>Det skalar inte inom datacenter om du inte har aff\u00e4rsversionen. <\/strong>Det skalar endast genom federation.<\/li>\n<li><strong>Mycket beroende av n\u00e4tverkskvalitet och serverbelastning. <\/strong>Consul fungerar inte korrekt som server p\u00e5 en \u00f6verbelastad server om det finns n\u00e5gra laggar i n\u00e4tverket, till exempel oj\u00e4mn hastighet. Det beror p\u00e5 P2P-anslutningar och modeller f\u00f6r uppdateringsf\u00f6rdelning.<\/li>\n<li><strong>Sv\u00e5righeter med att \u00f6vervaka tillg\u00e4nglighet<\/strong>. I Consuls status kan det st\u00e5 att allt \u00e4r bra, men den har redan d\u00f6tt f\u00f6r l\u00e4nge sedan.<\/li>\n<\/ul>\n<p>\nDe flesta av dessa problem l\u00f6ste vi under driften av Consul, och d\u00e4rf\u00f6r valde vi det. F\u00f6retaget har planer p\u00e5 en alternativ backend, men vi har l\u00e4rt oss att hantera problem och lever f\u00f6r tillf\u00e4llet med Consul.<\/p>\n<h3>Hur Consul fungerar<\/h3>\n<p>\nI det hypotetiska datacentret installerar vi servrar - fr\u00e5n tre till fem. En eller tv\u00e5 servrar fungerar inte: de kan inte organisera quorum och avg\u00f6ra vem som har r\u00e4tt n\u00e4r data inte st\u00e4mmer. Fler \u00e4n fem \u00e4r meningsl\u00f6st, prestandan kommer att minska.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/96153c4e9075b067b34a63ceba5b80f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKunder kopplar upp sig till servrarna i valfri ordning: samma agenter, men med flaggan <code>server = false<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/0854d1286c18bb5e7c1130c6734154a9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEfter detta f\u00e5r kunderna en lista med P2P-anslutningar och bygger relationer sinsemellan.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/2457cb7707c27cc23f6e13415119b91d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e5 global niv\u00e5 kopplar vi samman flera datacenter. De kopplas ocks\u00e5 samman P2P och kommunicerar.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/3b4ae922eb8d2a6a9a79425e769505d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4r vi vill h\u00e4mta data fr\u00e5n ett annat datacenter g\u00e5r f\u00f6rfr\u00e5gan fr\u00e5n server till server. Denna struktur kallas <strong>Serf-protokollet<\/strong>. Serf-protokollet, liksom Consul, \u00e4r utvecklat av HashiCorp.<\/p>\n<h3>N\u00e5gra viktiga fakta om Consul<\/h3>\n<p>\nConsul har dokumentation som beskriver dess funktion. Jag ger endast utvalda fakta som \u00e4r v\u00e4rda att veta.<\/p>\n<p><strong>Consul-servrar v\u00e4ljer en master bland de r\u00f6stber\u00e4ttigade<\/strong>. Consul v\u00e4ljer en master fr\u00e5n listan \u00f6ver servrar f\u00f6r varje datacenter, och alla f\u00f6rfr\u00e5gningar g\u00e5r endast till denne, oavsett antalet servrar. Om mastern h\u00e4nger f\u00f6ljs inga omr\u00f6stningar. Om ingen master \u00e4r vald \u2013 hanteras inga f\u00f6rfr\u00e5gningar.<\/p>\n<blockquote><p>Ville du ha horisontell skalning? Tyv\u00e4rr, nej.<\/p><\/blockquote>\n<p> F\u00f6rfr\u00e5gan till ett annat datacenter g\u00e5r fr\u00e5n master till master, oavsett vilken server den kom till. Den valda mastern f\u00e5r 100% av belastningen, f\u00f6rutom lasten f\u00f6r att vidarebefordra f\u00f6rfr\u00e5gningar. En aktuell kopia av data finns p\u00e5 alla servrar i datacentret, men bara en svarar.<\/p>\n<blockquote><p>Det enda s\u00e4ttet att skala \u00e4r att aktivera stale-l\u00e4get p\u00e5 klienten.<\/p><\/blockquote>\n<p>I stale-l\u00e4get kan man svara utan kvorum. Detta \u00e4r ett l\u00e4ge d\u00e4r vi avst\u00e5r fr\u00e5n datakonsistens, men l\u00e4ser n\u00e5got snabbare \u00e4n normalt, och vilken server som helst kan svara. Naturligtvis, skrivning g\u00f6rs endast via master.<\/p>\n<p><strong>Consul kopierar inte data mellan datacenter<\/strong>. Vid federationsuppbyggnad kommer varje server endast att ha sina egna data. F\u00f6r andra h\u00e4nvisar den alltid till n\u00e5gon annan.<\/p>\n<p><strong>Atomaritet av operationer garanteras inte utanf\u00f6r en transaktion<\/strong>. Kom ih\u00e5g att du inte bara kan \u00e4ndra n\u00e5got. Om du vill g\u00f6ra det p\u00e5 ett annat s\u00e4tt, genomf\u00f6r en transaktion med l\u00e5s.<\/p>\n<p><strong>Blockerande operationer garanterar inte l\u00e5sning<\/strong>. F\u00f6rfr\u00e5gan g\u00e5r fr\u00e5n master till master, inte direkt, s\u00e5 det finns inga garantier f\u00f6r att l\u00e5sningen fungerar n\u00e4r du g\u00f6r l\u00e5sning, till exempel, i ett annat datacenter.<\/p>\n<p><strong>ACL garanterar inte heller \u00e5tkomst (i m\u00e5nga fall)<\/strong>. ACL kan misslyckas, eftersom den lagras i ett datacenter i federation \u2014 i ACL datacenter (Prim\u00e4rt DC). Om DC inte svarar, kommer ACL inte att fungera.<\/p>\n<p><strong>En h\u00e4ngande master kommer att leda till att hela federationen h\u00e4nger<\/strong>. Till exempel, i federationen finns 10 datacenter, och i ett finns ett d\u00e5ligt n\u00e4tverk, vilket leder till att en master g\u00e5r ner. Alla som kommunicerar med den kommer att h\u00e4nga i en loop: det kommer en f\u00f6rfr\u00e5gan, men inget svar, tr\u00e5den h\u00e4nger. Det g\u00e5r inte att veta n\u00e4r detta kommer att h\u00e4nda, bara efter en timme eller tv\u00e5 kommer hela federationen att g\u00e5 ner. Du kommer inte kunna g\u00f6ra n\u00e5got \u00e5t det.<\/p>\n<p>Status, kvorum och val hanteras av en separat tr\u00e5d. Omskolning kommer inte att ske, status visar inget. Du tror att du har en levande Consul, g\u00f6r en f\u00f6rfr\u00e5gan och inget h\u00e4nder \u2014 inget svar. Samtidigt visar status att allt \u00e4r bra.<\/p>\n<p>Vi har st\u00f6tt p\u00e5 det h\u00e4r problemet, vi har beh\u00f6vt omstrukturera specifika delar av datacenter f\u00f6r att undvika det.<\/p>\n<p><strong>I aff\u00e4rsversionen av Consul Enterprise finns vissa av bristerna ovan inte.<\/strong>. Det finns m\u00e5nga anv\u00e4ndbara funktioner: r\u00f6stningsval, f\u00f6rdelning, skalning. Det finns bara en nackdel \u2013 licenssystemet f\u00f6r det distribuerade systemet \u00e4r mycket dyrt.<\/p>\n<p>Livhack: <code>rm -rf \/var\/lib\/consul<\/code> \u2013 panacea f\u00f6r alla problem med agenten. Om n\u00e5got inte fungerar, tar du bara bort dina data och laddar ned data fr\u00e5n en kopia. F\u00f6rmodligen kommer Consul att fungera igen.<\/p>\n<h2>BEFW<\/h2>\n<p>\nNu ska vi prata om vad vi har lagt till i Consul.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">BEFW<\/a><\/noindex> \u2013 \u00e4r en akronym f\u00f6r <strong>B<\/strong>ack<strong>E<\/strong>nd<strong>F<\/strong>ire<strong>W<\/strong>all. Vi var tvungna att ge produkten ett namn n\u00e4r jag skapade repositoryt f\u00f6r att placera de f\u00f6rsta testcommits. Det namnet \u00e4r kvar.<\/p>\n<h3>Regelmallar<\/h3>\n<p>\nReglerna skrivs i iptables-syntax.<\/p>\n<ul>\n<li>-N BEFW<\/li>\n<li>-P INPUT DROP<\/li>\n<li>-A INPUT -m state&mdash;state RELATED,ESTABLISHED -j ACCEPT<\/li>\n<li>-A INPUT -i lo -j ACCEPT<\/li>\n<li>-A INPUT -j BEFW<\/li>\n<\/ul>\n<p>\nAll v\u00e5r trafik g\u00e5r till BEFW-kedjan, f\u00f6rutom <code>ESTABLISHED.<\/code>, <code>RELATED<\/code> och localhost. Mallen kan vara vad som helst, det h\u00e4r \u00e4r bara ett exempel.<\/p>\n<p>Vad \u00e4r BEFW bra f\u00f6r?<\/p>\n<h3>Tj\u00e4nster<\/h3>\n<p>\nVi har en tj\u00e4nst, den har alltid en port, en nod d\u00e4r den k\u00f6rs. Fr\u00e5n v\u00e5r nod kan vi lokalt fr\u00e5ga agenten och ta reda p\u00e5 att vi har en viss tj\u00e4nst. Det g\u00e5r ocks\u00e5 att s\u00e4tta taggar.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/6d8c74db37e2e1eed971cfa6947cc5c8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVarje tj\u00e4nst som k\u00f6rs och registreras i Consul blir en iptables-regel. Vi har SSH \u2013 vi \u00f6ppnar port 22. Bash-scriptet \u00e4r enkelt: curl och iptables, inget mer som beh\u00f6vs.<\/p>\n<h3>Kunder<\/h3>\n<p>\nHur \u00f6ppnar man \u00e5tkomst inte f\u00f6r alla, utan selektivt? Genom att l\u00e4gga IP-listor i KV-lagringen baserat p\u00e5 tj\u00e4nstens namn.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/11a5af5aad9e848565458f168a1eee64.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTill exempel vill vi att alla fr\u00e5n det tionde n\u00e4tverket ska kunna komma \u00e5t tj\u00e4nsten SSH_TCP_22. Vi l\u00e4gger till ett litet f\u00e4lt TTL? och nu har vi tidsbegr\u00e4nsade tillst\u00e5nd, till exempel i ett dygn.<\/p>\n<h3>\u00c5tkomster<\/h3>\n<p>\nVi kopplar samman tj\u00e4nster och kunder: vi har en tj\u00e4nst d\u00e4r vi alltid har ett KV-lager redo. Nu ger vi \u00e5tkomst inte till alla, utan selektivt.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/d1119fbb226595184cac8d9ce7a924e3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Grupper<\/h3>\n<p>\nOm vi varje g\u00e5ng ska skriva tusentals IP f\u00f6r \u00e5tkomster s\u00e5 kommer vi bli tr\u00f6tta. Vi hittar p\u00e5 grupper \u2013 en enskild subset i KV. Vi d\u00f6per den till Alias (eller grupper) och lagrar grupper d\u00e4r p\u00e5 samma princip.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/67c6ab76cc25a3973739bdd44b69cef9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKopplar samman: nu kan vi \u00f6ppna SSH inte specifikt f\u00f6r P2P, utan f\u00f6r en hel grupp eller flera grupper. Precis som med TTL \u2013 vi kan tempor\u00e4rt l\u00e4gga till eller ta bort fr\u00e5n gruppen.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/a00b7db5087a96730c2725090f33e2b0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Integration<\/h3>\n<p>\n\u041d\u0430\u0448\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &mdash;&nbsp;\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0430\u043a\u0442\u043e\u0440 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f. \u041f\u043e\u043a\u0430 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0435\u0435 \u0442\u0430\u043a.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ce7a0c16543d0624453e6bdada3b8f03.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi arbetar med Puppet och \u00f6verf\u00f6r allt relaterat till systemet (applikationskod) dit. I puppetdb (vanlig PostgreSQL) lagras en lista \u00f6ver tj\u00e4nster som k\u00f6rs d\u00e4r, och de kan hittas efter resurstyp. D\u00e4r kan man ocks\u00e5 se vem som kommunicerar med vad. Dessutom har vi ett system f\u00f6r pull requests och merge requests f\u00f6r detta.<\/p>\n<p>Vi har skrivit befw-sync \u2014 en enkel l\u00f6sning som hj\u00e4lper till att \u00f6verf\u00f6ra data. F\u00f6rst kontaktar sync cookies puppetdb. D\u00e4r \u00e4r en HTTP-API inst\u00e4lld: vi beg\u00e4r vilka tj\u00e4nster vi har och vad som m\u00e5ste g\u00f6ras. Sedan g\u00f6rs en f\u00f6rfr\u00e5gan till Consul.<\/p>\n<p>Finns det en integration? Ja: vi har skrivit regler och till\u00e5tit att ta emot Pull Requests. Beh\u00f6ver n\u00e5gon port eller l\u00e4gga till en v\u00e4rd i n\u00e5gon grupp? Pull Request, granskning \u2014 inga fler \u00bbHitta 200 andra ACL och f\u00f6rs\u00f6k g\u00f6ra n\u00e5got med dem\u00ab.<\/p>\n<h3>Optimering<\/h3>\n<p>\nPing localhost med en tom regelkedja tar 0,075 ms.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/39263844f79c4795af05dc3ecb734394.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi l\u00e4gger till 10 000 adresser till iptables. Som ett resultat \u00f6kar pingtiden femfaldigt: iptables \u00e4r helt linj\u00e4r, bearbetningen av varje adress tar tid.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/e6c314155c3a34fdf61e40479ecb26c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f6r brandv\u00e4ggen dit vi migrerar tusentals ACL har vi m\u00e5nga regler, och det medf\u00f6r f\u00f6rdr\u00f6jning. F\u00f6r spelprotokoll \u00e4r detta d\u00e5ligt.<\/p>\n<p>Men om vi placerar <strong>10 000 adresser i ipset<\/strong> minskar pingtiden till och med.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/2dd844d9324d057ba9ab098e501a1e51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo\u00e4ngen \u00e4r att \"O\" (algoritmkomplexitet) f\u00f6r ipset alltid \u00e4r 1, oavsett hur m\u00e5nga regler det finns. Visserligen finns det en begr\u00e4nsning \u2014 antalet regler f\u00e5r inte \u00f6verstiga 65535. Tills vidare lever vi med det: vi kan kombinera dem, ut\u00f6ka, g\u00f6ra tv\u00e5 ipset i en.<\/p>\n<h3>Lagring<\/h3>\n<p>\nEn logisk forts\u00e4ttning p\u00e5 iterationsprocessen \u00e4r att lagra information om kunder f\u00f6r tj\u00e4nsten i ipset.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/126069799d95594be8611237e935189d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu har vi samma SSH, och vi skriver inte omedelbart 100 IP, utan anger namnet p\u00e5 ipset som vi beh\u00f6ver kommunicera med, och f\u00f6ljande regel <code>DROP<\/code>. Det g\u00e5r att omformulera till en regel \"Den som inte \u00e4r h\u00e4r, \u00e4r DROP\", men det \u00e4r tydligare s\u00e5 h\u00e4r.<\/p>\n<p>Nu har vi regler och set. Huvuduppgiften \u00e4r att skapa setet innan vi skriver regeln, f\u00f6r annars registrerar inte iptables regeln.<\/p>\n<h3>\u00d6versiktsdiagram<\/h3>\n<p>\nSom en schematisk bild ser allt jag har ber\u00e4ttat ut s\u00e5 h\u00e4r.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4046e921cb5f466f8af5a6af1fcd151c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi commit:ar till Puppet, allt skickas till v\u00e4rden, tj\u00e4nster h\u00e4r, ipset d\u00e4r, och den som inte \u00e4r registrerad d\u00e4r f\u00e5r inte komma in.<\/p>\n<h3>Till\u00e5ta &amp; avvisa<\/h3>\n<p>\nF\u00f6r att snabbt r\u00e4dda v\u00e4rlden eller snabbt st\u00e4nga av n\u00e5gon, skapade vi i b\u00f6rjan av alla kedjor tv\u00e5 ipset: <code>rules_allow<\/code> och <code>rules_deny<\/code>. Hur fungerar det?<\/p>\n<p>Till exempel, n\u00e5gon skapar belastning p\u00e5 v\u00e5r webbplats med hj\u00e4lp av bottar. Tidigare var vi tvungna att hitta IP-adressen via loggarna, ge den till n\u00e4tverksingenj\u00f6rer s\u00e5 att de kunde hitta k\u00e4llan till trafiken och blockera den. Nu ser det annorlunda ut.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/6e7f906919536cab2c283ba6ceb0472d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi skickar till Consul, v\u00e4ntar 2,5 sekunder, och \u00e4r klara. Eftersom Consul snabbt distribuerar via P2P fungerar det \u00f6verallt i v\u00e4rlden.<\/p>\n<p>En g\u00e5ng lyckades jag helt stoppa WOT genom att g\u00f6ra ett misstag med brandv\u00e4ggen. <code>rules_allow<\/code> \u2014 det \u00e4r v\u00e5r f\u00f6rs\u00e4kring mot s\u00e5dana fall. Om vi g\u00f6r n\u00e5got fel med brandv\u00e4ggen, d\u00e4r n\u00e5got blockeras, kan vi alltid skicka en villkorlig <code>0.0\/0<\/code>, f\u00f6r att snabbt \u00e5terst\u00e4lla allt. Sen kan vi fixa allt manuellt.<\/p>\n<h3>Andra set<\/h3>\n<p>\nVi kan l\u00e4gga till vilka andra set som helst i utrymmet <code>$IPSETS$<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4e1e337b35da81cd7324b2adc106b085.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVarf\u00f6r? Ibland beh\u00f6ver n\u00e5gon ipset, till exempel f\u00f6r att emulera avst\u00e4ngningen av en del av klustret. Alla kan ta med sig vilka set som helst, namnge dem och de kommer att h\u00e4mtas fr\u00e5n Consul. Dessa set kan ocks\u00e5 delta i iptables-regler, eller fungera som en slags <code>NOOP<\/code>: konsistensen kommer att uppr\u00e4tth\u00e5llas av en demon.<\/p>\n<h3>Anv\u00e4ndare<\/h3>\n<p>\nTidigare var det s\u00e5 h\u00e4r: anv\u00e4ndaren kopplade upp sig mot n\u00e4tverket och fick parametrarna via dom\u00e4nen. Innan n\u00e4sta generations brandv\u00e4ggar f\u00f6rstod Cisco inte skillnaden mellan anv\u00e4ndaren och IP-adressen. D\u00e4rf\u00f6r gavs \u00e5tkomst endast via maskinens v\u00e4rdnamn.<\/p>\n<p>Vad gjorde vi? Vi ins\u00e5g oss i \u00f6gonblicket av adressmottagningen. Ofta g\u00e5r detta via dot1x, Wi-Fi eller VPN \u2014 allt g\u00e5r genom RADIUS. Vi skapar en grupp f\u00f6r varje anv\u00e4ndare med anv\u00e4ndarnamnet och placerar IP-adressen i den med en TTL som \u00e4r lika med hans dhcp.lease \u2014 s\u00e5 snart den l\u00f6per ut, f\u00f6rsvinner regeln.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/04550475c6af49d094c18b1d5b89123a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNu kan vi ge \u00e5tkomst till tj\u00e4nster, precis som i andra grupper, baserat p\u00e5 anv\u00e4ndarnamn. Vi har blivit av med besv\u00e4ret med v\u00e4rdnamn som \u00e4ndras, och avlastat n\u00e4tverksingenj\u00f6rerna, eftersom de inte l\u00e4ngre beh\u00f6ver Cisco. Nu skriver ingenj\u00f6rerna sj\u00e4lva \u00e5tkomster p\u00e5 sina servrar.<\/p>\n<h3>Isolering<\/h3>\n<p>\nParallellt b\u00f6rjade vi undanr\u00f6ja isoleringen. Tj\u00e4nstecheferna gjorde en inventering och vi analyserade alla v\u00e5ra n\u00e4tverk. Vi kommer att dela upp dem i liknande grupper, och p\u00e5 de n\u00f6dv\u00e4ndiga servrarna lade vi till grupper i till exempel deny. Nu hamnar samma isolering f\u00f6r staging i rules_deny f\u00f6r produktionen, men inte i sj\u00e4lva produktionen.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/60fe7407013aa64b853791f8def627cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSchemat fungerar snabbt och enkelt: vi tar bort alla ACL fr\u00e5n servrarna, avlastar h\u00e5rdvaran, och minskar antalet isolerade VLAN.<\/p>\n<h3>Integritetskontroll<\/h3>\n<p>\nTidigare hade vi en speciell trigger som meddelade n\u00e4r n\u00e5gon manuellt \u00e4ndrade brandv\u00e4gtsreglerna. Jag skrev en stor linter f\u00f6r att kontrollera brandv\u00e4gtsregler, det var utmanande. Nu \u00f6vervakas integriteten av BEFW. Den ser noga till att de regler den skapar inte \u00e4ndras. Om n\u00e5gon \u00e4ndrar brandv\u00e4gtsreglerna \u00e5terst\u00e4ller den allt. \"Jag satte snabbt upp en proxy f\u00f6r att arbeta hemifr\u00e5n\" \u2014 s\u00e5dana alternativ finns inte l\u00e4ngre.<\/p>\n<p>BEFW kontrollerar ipset fr\u00e5n tj\u00e4nster och listan i befw.conf, tj\u00e4nsternas regler i BEFW-kedjan. Men den \u00f6vervakar inte andra kedjor och regler samt andra ipset.<\/p>\n<h3>Skydd mot krascher<\/h3>\n<p>\nBEFW sparar alltid det senaste lyckade tillst\u00e5ndet direkt i den bin\u00e4ra strukturen state.bin. Om n\u00e5got g\u00e5r fel, \u00e5terg\u00e5r den alltid till detta state.bin.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/724f3537c06a7135fa6397f9ddd5630f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDetta \u00e4r en f\u00f6rs\u00e4kring mot instabil drift av Consul, n\u00e4r den inte skickar data eller n\u00e5gon g\u00f6r ett misstag och anv\u00e4nder regler som inte kan till\u00e4mpas. F\u00f6r att vi inte ska bli utan brandv\u00e4gg kommer BEFW att \u00e5terg\u00e5 till det senaste tillst\u00e5ndet om det uppst\u00e5r ett fel i n\u00e5got steg.<\/p>\n<p>I kritiska situationer \u00e4r detta en garanti f\u00f6r att vi f\u00f6rblir med en fungerande brandv\u00e4gg. Vi \u00f6ppnar alla gr\u00e5 n\u00e4tverk i hopp om att administrat\u00f6ren kommer och fixar det. En dag ska jag ta med det i konfigarna, men just nu har vi bara tre gr\u00e5 n\u00e4tverk: 10\/8, 172\/12 och 192.168\/16. Inom v\u00e5r Consul \u00e4r detta en viktig funktion som hj\u00e4lper oss att utvecklas vidare.<\/p>\n<p><em>Demo: under presentationen visar Ivan BEFW:s demol\u00e4ge. Det \u00e4r l\u00e4ttare att f\u00f6lja demon p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/4zP67uYnsR4?t=1663\">video<\/a><\/noindex>. K\u00e4llkoden f\u00f6r demon finns tillg\u00e4nglig <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\/tree\/master\/demo\">p\u00e5 GitHub<\/a><\/noindex>.<\/em><\/p>\n<h2>F\u00e4llor<\/h2>\n<p>\nJag kommer att ber\u00e4tta om buggarna vi st\u00f6tte p\u00e5.<\/p>\n<p><strong>ipset add set 0.0.0.0\/0. <\/strong>Vad h\u00e4nder om man l\u00e4gger till 0.0.0.0\/0 i ipset? Kommer alla IP-adresser att l\u00e4ggas till? Kommer internet\u00e5tkomsten att \u00f6ppnas? <\/p>\n<p>Nej, vi f\u00e5r en bugg som kostade oss tv\u00e5 timmars driftstopp. Och buggen har inte fungerat sedan 2016, den ligger i RedHat Bugzilla under nummer #1297092, och vi hittade den av en slump \u2014 fr\u00e5n utvecklarens rapport.<\/p>\n<p>Nu g\u00e4ller det strikta regeln i BEFW att <code>0.0.0.0\/0<\/code> omvandlas till tv\u00e5 adresser: <code>0.0.0.0\/1<\/code> och <code>128.0.0.0\/1<\/code>.<\/p>\n<p><strong>ipset restore set &lt; file. <\/strong>Vad g\u00f6r ipset n\u00e4r du s\u00e4ger till den att <code>\u00e5terst\u00e4lla<\/code>? \u0412\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a iptables? \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435?<\/p>\n<p>Ingenting s\u00e5dant \u2014 den g\u00f6r en sammanslagning, och de gamla adresserna f\u00f6rsvinner inte, du st\u00e4nger inte \u00e5tkomsten.<\/p>\n<p>Vi hittade buggen n\u00e4r vi testade isoleringen. Nu finns det ett ganska komplext system \u2014 ist\u00e4llet f\u00f6r <code>\u00e5terst\u00e4lla<\/code> genomf\u00f6rs <code>create temp<\/code>, sedan <code>restore flush temp<\/code> och <code>restore temp<\/code>. I slutet swap: f\u00f6r atomaritet, f\u00f6r om man f\u00f6rst genomf\u00f6r <code>flush<\/code> Och i det \u00f6gonblicket kommer n\u00e5gon paketering att intr\u00e4ffa, d\u00e5 kommer den att avvisas och n\u00e5got kommer att g\u00e5 fel. D\u00e4rf\u00f6r finns det lite svart magi.<\/p>\n<p><strong>consul kv get -datacenter=other. <\/strong>Som jag redan har n\u00e4mnt, vi tror att vi beg\u00e4r vissa data, men vi kommer att f\u00e5 antingen data eller ett fel. Vi kan g\u00f6ra detta via Consul lokalt, men \u00e4ven d\u00e5 kommer b\u00e5de detta och det andra att h\u00e4nga sig.<\/p>\n<p>Den lokala Consul-klienten \u00e4r ett wrapper \u00f6ver HTTP API. Men den h\u00e4nger bara och svarar inte p\u00e5 Ctrl+C, Ctrl+Z eller n\u00e5got annat, bara p\u00e5 <code>, mjukt avsluta processen och stoppa servern (<\/code> i den intilliggande konsolen. Vi st\u00f6tte p\u00e5 detta n\u00e4r vi byggde en stor kluster. Men vi har fortfarande ingen l\u00f6sning, vi f\u00f6rbereder oss f\u00f6r att \u00e5tg\u00e4rda detta fel i Consul.<\/p>\n<p><strong>Consul-leder svarar inte. <\/strong>V\u00e5r m\u00e4ster har inte svarat i datacentret, vi t\u00e4nker: \"Kanske aktiveras omvalsalgoritmen nu?\" <\/p>\n<p>Nej, det kommer inte att h\u00e4nda, och \u00f6vervakningen visar ingenting: Consul kommer att s\u00e4ga att det finns ett commitment index, ledaren har hittats, allt \u00e4r bra.<\/p>\n<p>Hur hanterar vi detta? <code>service consul restart<\/code> i cron varje timme. Om du har 50 servrar - det \u00e4r inte s\u00e5 farligt. N\u00e4r de blir 16 000, kommer du att f\u00f6rst\u00e5 hur det fungerar.<\/p>\n<h2>Slutsats<\/h2>\n<p>\nTill slut fick vi f\u00f6ljande f\u00f6rdelar:<\/p>\n<ul>\n<li>100% t\u00e4ckning av alla Linux-maskiner.<\/li>\n<li>Hastighet.<\/li>\n<li>Automatisering.<\/li>\n<li>Vi befriade h\u00e5rdvaran och n\u00e4tverksingenj\u00f6rerna fr\u00e5n slaveri.<\/li>\n<li>M\u00f6jligheterna f\u00f6r integration har blivit n\u00e4stan obegr\u00e4nsade: antingen med Kubernetes, Ansible eller Python.<\/li>\n<\/ul>\n<p>\n<strong>Nackdelar<\/strong>: Consul, som vi nu m\u00e5ste leva med, och en mycket h\u00f6g kostnad f\u00f6r fel. Som exempel, en g\u00e5ng vid 18-tiden (prime time i Ryssland) \u00e4ndrade jag n\u00e5got i n\u00e4tverkslistorna. Vi h\u00f6ll p\u00e5 att bygga isolering p\u00e5 BEFW. Jag gjorde n\u00e5gon form av fel, verkade som jag angav en felaktig mask, men allt kraschade p\u00e5 tv\u00e5 sekunder. \u00d6vervakningen t\u00e4nds, supportassistenten kommer springande: \"Vi ligger alla ner!\". Chefens h\u00e5r blev gr\u00e5tt n\u00e4r han f\u00f6rklarade f\u00f6r f\u00f6retaget varf\u00f6r detta h\u00e4nde.<\/p>\n<p>Kostnaden f\u00f6r fel \u00e4r s\u00e5 h\u00f6g att vi har kommit p\u00e5 en egen komplicerad f\u00f6rebyggande \u00e5tg\u00e4rd. Om du ska implementera detta i en stor produktion, ge inte m\u00e4stertoken \u00f6ver Consul till alla. Det kommer att sluta d\u00e5ligt.<\/p>\n<p><strong>Kostnad. <\/strong>Jag skrev kod i 400 timmar p\u00e5 egen hand. F\u00f6r underh\u00e5ll l\u00e4gger mitt team p\u00e5 4 personer 10 timmar i m\u00e5naden p\u00e5 alla. J\u00e4mf\u00f6rt med kostnaden f\u00f6r n\u00e5gon ny generation brandv\u00e4gg, \u00e4r detta gratis.<\/p>\n<p><strong>Planer. <\/strong>Den l\u00e5ngsiktiga planen \u00e4r att s\u00f6ka efter alternativ transport ist\u00e4llet f\u00f6r eller som komplement till Consul. Kanske blir det Kafka eller n\u00e5got liknande. Men under de n\u00e4rmaste \u00e5ren kommer vi att leva med Consul.<\/p>\n<p>N\u00e4sta steg: integration med Fail2ban, \u00f6vervakning, nftables, eventuellt med andra distributioner, metriker, ut\u00f6kad \u00f6vervakning, optimering. St\u00f6d f\u00f6r Kubernetes \u00e4r ocks\u00e5 p\u00e5 g\u00e5ng, eftersom vi f\u00f6r n\u00e4rvarande har flera kluster och intresse.<\/p>\n<p>Andra planer:<\/p>\n<ul>\n<li>anomalidetektering i trafiken;<\/li>\n<li>hantering av n\u00e4tverkskartan;<\/li>\n<li>st\u00f6d f\u00f6r Kubernetes;<\/li>\n<li>paketkompilering f\u00f6r alla system;<\/li>\n<li>Webb-UI.<\/li>\n<\/ul>\n<p>\nVi arbetar kontinuerligt med att ut\u00f6ka konfigurationen, \u00f6ka metrikerna och optimera.<\/p>\n<p><i>G\u00e5 med i projektet. Projektet har blivit fantastiskt, men tyv\u00e4rr \u00e4r det f\u00f6r n\u00e4rvarande ett enmansprojekt. Kom till <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">GitHub <\/a><\/noindex>och f\u00f6rs\u00f6k g\u00f6ra n\u00e5got: kommitta, testa, f\u00f6resl\u00e5 n\u00e5got, ge din feedback.<\/i><\/p>\n<blockquote><p>Under tiden f\u00f6rbereder vi oss f\u00f6r <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\">Saint HighLoad++<\/a><\/noindex>, som \u00e4ger rum den 6 och 7 april i Sankt Petersburg, och vi bjuder in utvecklare av h\u00f6gbelastade system <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose?conference=hl2020-spb\">att ans\u00f6ka om att h\u00e5lla ett f\u00f6redrag<\/a><\/noindex>. Erfaren talare vet redan vad de ska g\u00f6ra, och vi rekommenderar att nyb\u00f6rjare i presentationer \u00e5tminstone <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\/speakers\">prova<\/a><\/noindex>. Deltagande i konferensen som talare har flera f\u00f6rdelar. Vilka, kan man l\u00e4sa om i slutet av <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/486142\/\">denna artikel<\/a><\/noindex>.<\/p><\/blockquote>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/486842\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0440\u043e\u0441\u043b\u043e, \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u0430\u0441\u044c: \u0441\u0442\u0435\u0439\u0434\u0436\u0438\u043d\u0433\u0438, \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 VLAN \u0441 ACL, \u043f\u043e\u0442\u043e\u043c VPN \u0441 VRF, VLAN c ACL \u043d\u0430 L2, VRF \u0441 ACL \u043d\u0430 L3. \u0417\u0430\u043a\u0440\u0443\u0436\u0438\u043b\u0430\u0441\u044c \u0433\u043e\u043b\u043e\u0432\u0430? \u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0435\u043b\u0435\u0435. \u041a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441\u0442\u0430\u043b\u043e 16 000 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0441\u043b\u0435\u0437 \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41052,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-41051","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/consul-iptables-3\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Consul + iptables = :3 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/consul-iptables-3\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-05T18:28:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T18:28:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Consul + iptables = :3 | ProHoster","description":"\u00c5r 2010 hade Wargaming 50 servrar och en enkel n\u00e4tverksmodell: backend, frontend och brandv\u00e4gg.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/consul-iptables-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Consul + iptables = :3 | ProHoster","og:description":"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.","og:url":"https:\/\/prohoster.info\/sv\/blog\/consul-iptables-3","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-05T18:28:58+00:00","article:modified_time":"2020-02-05T18:28:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41051","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:24:42","updated":"2022-10-01 10:00:06","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/41051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=41051"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/41051\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/41052"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=41051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=41051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=41051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}