䞀元化されたファむアりォヌルランブラヌグルヌプ

なぜそれを䜜成したのですか



長い間、ランブラヌグルヌプでは、3局のデヌタセンタヌネットワヌクアヌキテクチャを䜿甚しおいたした。このアヌキテクチャでは、各プロゞェクトたたはむンフラストラクチャコンポヌネントが専甚のvlanに存圚しおいたした。すべおのトラフィックvlan間およびデヌタセンタヌ間の䞡方は、゚ッゞレベルの機噚を通過したした。



゚ッゞ機噚は、さたざたな機胜を実行できる高䟡なルヌタヌであるため、その䞊のポヌトも高䟡です。時間の経過ずずもに、氎平方向のトラフィックが増加したずえば、デヌタベヌスレプリケヌション、さたざたなサヌビスぞの芁求などのマシン間、ある時点で境界ルヌタヌのポヌト䜿甚率の問題が発生したした。



このようなデバむスの䞻な機胜の1぀は、トラフィックフィルタリングです。その結果、ACLの管理も難しくなりたした。すべおを手動で行う必芁があり、隣接する郚門によるタスクの実行にも時間がかかりたした。アクセスレベルでのポヌトの構成に远加の時間が費やされたした。同じNOCの手動アクションを実行するだけでなく、朜圚的なセキュリティ問題を特定する必芁がありたした。ホストはそれぞれ堎所を倉曎するため、他の人のvlanに䞍正にアクセスする可胜性があるためです。







䜕かを倉える時が来たした、そしお、Closネットワヌクたたは圌らがたた呌ばれるように、IP工堎は救助に来たした。







倖郚の類䌌性にもかかわらず、このアヌキテクチャず以前のアヌキテクチャの根本的な違いは、リヌフレむダヌを含む各デバむスがルヌタヌずしお機胜し、サヌバヌのデフォルトのゲヌトりェむがトップオブラックであるずいうこずです。したがっお、異なるプロゞェクトのホスト間の氎平方向のトラフィックは、゚ッゞではなく、スパむンレむダヌを通過できるようになりたした。



さらに、同じスパむンレベルで、デヌタセンタヌを盞互に接続でき、2぀のサヌバヌ間のパス䞊に存圚するネットワヌクデバむスは4぀たでです。このアヌキテクチャの゚ッゞ機噚は、通信事業者を接続するためにのみ必芁であり、むンタヌネットずの間の垂盎トラフィックのみを蚱可したす。



Closネットワヌクの䞻な機胜は、ホスト間のトラフィックをフィルタリングできる堎所がないこずです。したがっお、この機胜はサヌバヌ䞊で盎接実行する必芁がありたす。集䞭型ファむアりォヌルは、トラフィックを受信するホスト自䜓のトラフィックをフィルタリングするプログラムです。



芁件



集䞭型ファむアりォヌルを実装する必芁性は、䞀床にいく぀かの芁因によっお決定されたした。



  • ゚ンドナヌザヌず
  • 既存のむンフラストラクチャ。


したがっお、アプリケヌションの芁件は次のずおりです。



  1. ファむアりォヌルは、ホストおよび仮想マシン䞊で機胜し、ルヌルを䜜成できる必芁がありたす。さらに、ルヌルのリストは、ファむアりォヌルが実行されおいる環境ず異なっおはなりたせん。぀たり、ルヌルは同じです。
  2. . , – ssh, ( Prometheus), .
  3. , -.
  4. , – .
  5. .
  6. : « , ».


Rambler Groupクラりドは非垞に動的です。仮想マシンの䜜成ず削陀、サヌバヌのむンストヌルず解䜓が行われたす。したがっお、ポむントツヌポむントアクセスは䜿甚したせん。むンフラストラクチャには「ホストグルヌプ」の抂念がありたす。



ホストグルヌプは、サヌバヌの圹割を䞀意に説明するサヌバヌのグルヌプのマヌクアップです。たずえば、news-prod-coolstream-blueです。



これにより、別の芁件が発生したす。ナヌザヌは、ホストグルヌプ、プロゞェクトなどの高レベルの゚ンティティを操䜜する必芁がありたす。



アむデアず実装



タリング



集䞭型ファむアりォヌルは、゚ヌゞェントの構成を必芁ずする倧きくお耇雑なものです。問題の発芋には5分以䞊かかるこずがあるため、゚ヌゞェントずサヌバヌずずもにツヌルが衚瀺され、゚ヌゞェントが正しく構成されおいるかどうか、および䜕を修正する必芁があるかがナヌザヌに通知されたす。たずえば、ホストの重芁な芁件は、ホストグルヌプたたはPTRにDNSレコヌドが存圚するこずです。このツヌルは、これらすべおずはるかに倚くのこずを教えおくれたすその機胜に぀いおは以䞋で説明したす。



統合ファむアりォヌル



次の原則に埓うようにしおいたす。「点滅ルヌル」を取埗しないようにするには、ホスト䞊でファむアりォヌルを構成するアプリケヌションのみを䜿甚する必芁がありたす。぀たり、サヌバヌに独自のカスタマむズツヌルが既にある堎合たずえば、ルヌルが別の゚ヌゞェントによっお構成されおいる堎合、アプリケヌションはそこに属しおいたせん。逆の条件も機胜したす。ファむアりォヌル゚ヌゞェントが存圚する堎合、ルヌルを蚭定するのは圌だけです。これが完党な制埡の原則です。



ファむアりォヌルはiptablesではありたせ



んご存知のように、iptablesはnetfilterを操䜜するための単なるコマンドラむンナヌティリティです。ファむアりォヌルを異なるプラットフォヌムWindows、BSDシステムに移怍するために、゚ヌゞェントずサヌバヌは独自のモデルで動䜜したす。これに぀いおは、以䞋の「アヌキテクチャ」セクションで詳しく説明したす。



゚ヌゞェントは論理゚ラヌを解決しようずしたせん



䞊蚘のように、゚ヌゞェントは決定を行いたせん。HTTPサヌバヌがすでに実行されおいるポヌト443を閉じたい堎合は、問題ありたせん。閉じおください。



建築



そのようなアプリケヌションのアヌキテクチャで䜕か新しいものを思い付くのは困難です。



  • ゚ヌゞェントがあり、ホスト䞊でルヌルを構成したす。
  • サヌバヌがあり、ナヌザヌ定矩のルヌルを提䟛したす。
  • ラむブラリずツヌルがありたす。
  • 高レベルのリゟルバヌがありたす。ip-addressをホストグルヌプ/プロゞェクトに倉曎し、その逆も同様です。以䞋のすべおに぀いお詳しく説明したす。


Rambler Groupには倚くのホストずさらに倚くの仮想マシンがあり、それらはすべお、䜕らかの圢で、䜕らかの゚ンティティに属しおいたす。



  • VLAN
  • 通信網
  • 事業
  • ホストグルヌプ。


埌者は、ホストのプロゞェクトぞの垰属ずその圹割に぀いお説明しおいたす。たずえば、news-prod-backend-api、ここでnews --project; prod-そのenv、この堎合は本番です。バック゚ンド-圹割; apiは任意のカスタムタグです。



Resolver



Firewallはネットワヌクレベルやトランスポヌトレベルで機胜し、ホストグルヌプずプロゞェクトは高レベルの゚ンティティです。したがっお、「友達を䜜る」ために、ホストたたは仮想マシンの所有者を理解するには、アドレスのリストを取埗する必芁がありたす。このコンポヌネントを「高レベルリゟルバヌ」ず名付けたした。高レベルの名前を䞀連のアドレスに倉曎しリゟルバヌに関しおは「含たれおいる」、逆に、アドレスを゚ンティティの名前に倉曎したす「含む」。



ラむブラリ-コア



䞀郚のコンポヌネントの統合ず統合のために、ラむブラリが登堎したした。これはコアずも呌ばれたす。これは、独自のコントロヌラヌずビュヌを備えたデヌタモデルであり、入力しお読み取るこずができたす。このアプロヌチは、サヌバヌ偎ず゚ヌゞェントコヌドを倧幅に簡玠化し、ホスト䞊の珟圚のルヌルをサヌバヌから受信したルヌルず比范するのにも圹立ちたす。



モデルを埋めるためのいく぀かの゜ヌスがありたす。



  • ルヌルファむル2぀の異なるタむプ簡略化され、ルヌルを完党に蚘述しおいたす
  • サヌバヌから受信したルヌル
  • ホスト自䜓から受け取ったルヌル。


゚ヌゞェント



゚ヌゞェントはiptablesに察するバむンディングではなく、Cラむブラリlibiptc、libxtables䞊のラッパヌを䜿甚しお動䜜するスタンドアロンアプリケヌションです。゚ヌゞェント自䜓は決定を䞋さず、ホスト䞊のルヌルを構成するだけです。



゚ヌゞェントの圹割は最小限です。ルヌルファむルデフォルトのものを含むを読み取り、サヌバヌからデヌタを取埗しリモヌト操䜜甚に構成されおいる堎合、ルヌルを1぀のセットにマヌゞし、前の状態ず異なるかどうかを確認し、異なる堎合は適甚したす。



゚ヌゞェントのもう1぀の重芁な圹割は、初期むンストヌル䞭、たたはサヌバヌから無効な応答を受信したずきに、ホストをカボチャに倉えないこずです。これを回避するために、ssh、監芖アクセスなどの䞀連のルヌルをデフォルトでパッケヌゞに提䟛したす。ファむアりォヌル゚ヌゞェントが200番目の応答コヌド以倖の応答コヌドを受信した堎合、゚ヌゞェントはアクションを実行しようずせず、前の状態を終了したす。ただし、論理゚ラヌからは保護されたせん。ポヌト80、443でのアクセスを拒吊するず、Webサヌビスがホストで実行されおいる堎合でも、゚ヌゞェントは匕き続きそのゞョブを実行したす。



Tulza



Tulzaは、プロゞェクトを管理するシステム管理者および開発者を察象ずしおいたす。目暙は非垞にシンプルです。ワンクリックで、゚ヌゞェントの䜜業に関するすべおのデヌタを取埗できたす。ナヌティリティは次のこずを教えおくれたす。



  • 実行䞭の゚ヌゞェントデヌモンです
  • ホストのPTRレコヌドはありたすか
  • .


この情報は、問題を早期に蚺断するのに十分です。



サヌバヌ



サヌバヌはアプリケヌション+デヌタベヌスです。仕事のすべおの論理は圌によっお実行されたす。サヌバヌの重芁な機胜は、IPアドレスを保存しないこずです。サヌバヌは、ホストグルヌプ、プロゞェクトなどの名前のトップレベルオブゞェクトでのみ機胜したす。



ベヌスのルヌルは次のずおりです。アクションAccept Srcproject-B、project-C DstProject-B Prototcpポヌト80、443。



サヌバヌは、どのルヌルを誰に䞎えるかをどのように理解したすか芁件から、゚ヌゞェントが実行されおいる堎所ホストたたは仮想マシンに関係なく、ルヌルは同䞀である必芁がありたす。



゚ヌゞェントからの芁求は、垞に1぀の倀IPアドレスでサヌバヌに送信されたす。各゚ヌゞェントが自分自身のルヌルを芁求するこず、぀たり、圌が目的地であるこずを芚えおおくこずが重芁です。



サヌバヌの動䜜を理解しやすくするために、プロゞェクトに属するホストルヌルを取埗するプロセスを怜蚎しおください。



リゟルバヌが最初に機胜したす。そのタスクは、IPアドレスをホスト名に倉曎しおから、このホストが含たれおいる゚ンティティを芋぀けるこずです。 HL-Resolverは、ホストがプロゞェクトAに含たれおいるこずをサヌバヌに応答したす。HL-Resolverはデヌタ゜ヌスを参照したすこれに぀いおは前に説明しおいたせん。デヌタ゜ヌスは、サヌバヌ、プロゞェクト、ホストグルヌプなどに関する䞀皮の䌁業ナレッゞベヌスです。



次に、サヌバヌは、destination = projectnameを持぀プロゞェクトのすべおのルヌルを探したす。デヌタベヌスにアドレスが含たれおいないため、プロゞェクト名の名前をhostenymsに倉曎しおからアドレスに倉曎する必芁がありたす。これにより、芁求はリゟルバヌを介しおデヌタ゜ヌスに再床送信されたす。 HL-Resolerはアドレスのリストを返し、その埌゚ヌゞェントはルヌルの準備ができたリストを受け取りたす。



宛先が仮想マシンを備えたホストである堎合、同じスクリプトがホストだけでなく、その䞊の各仮想マシンに察しおも実行されたす。



以䞋は、単玔なケヌスを瀺す図です。ホストハヌドりェアたたは仮想マシンがProject-Aでホストのルヌルを受け取りたす。







リリヌス



䞀元化されたファむアりォヌル管理があれば、すべおを䞀元的に砎壊するこずもできるず掚枬するのは難しいこずではありたせん。したがっお、゚ヌゞェントずサヌバヌのリリヌスは段階的に実行されたす。



サヌバヌの堎合-Blue-Green + A / Bテスト

Blue-Greenは、2぀のホストグルヌプが関䞎する展開戊略です。そしお、切り替えは郚分1、3、5、10 ... 100で行われたす。したがっお、新しいリリヌスで問題が発生した堎合、サヌビスのごく䞀郚のみが圱響を受けたす。



゚ヌゞェントの堎合、カナリア

カナリアたたはカナリア展開はA / Bテストにいくぶん䌌おいたす。䞀郚の゚ヌゞェントのみを曎新し、メトリックを確認したす。すべおが順調である堎合、100たで別の倧きなピヌスなどを取りたす。



結論



その結果、システム゚ンゞニア向けのセルフサヌビスを䜜成し、ネットワヌクアクセスを1か所から管理できるようにしたした。したがっお、私たちは



  • HTTP-API
  • .



All Articles