はじめに
業務としてデータセンターと拠点(オフィス)間を結ぶときにBGP(Border Gateway Protocol)という単語は聞くのですが、よくわからないまま6年ほどインフラエンジニアをしており、ようやく重い腰をあげてBGPについて調べることにしました。
BGPとは
BGPとはインターネットを構成する1つの重要なプロトコルになります。
インターネットの世界には複数のルーターが繋がっており、そのルーターがPCやスマートフォン、サーバに繋がって通信ができるようになっています。
ルーターは来たデータを正しい宛先に案内をする役目を持っています。
例えば、スマートフォンからyahoo.co.jpのトップ画面に行こうとすると、DNSで名前解決をして、IPアドレスを知ります。そのIPアドレスをセットしたパケットをルーターに投げつけると正しい宛先に案内をしてくれるので、yahoo.co.jpをホスティングしているサーバに行きつき、yahooのトップページが見ることができます。
サーバまでの通信経路上に複数のルータがいると思いますが、ルーター同士で自分たちのネットワークに存在するIPアドレスの情報交換をするときに使う通信の約束事(プロトコル)をルーティングプロトコルと言って、BGPはルーティングプロコトルの一種です。
インターネットはあまりに大きすぎるので、1つの組織で管理できるものでは無いです。そのため、各組織で自分たちで管理できる規模のネットワークを管理しています。例えば、各組織で言うと、NTTドコモやKDDIなどがイメージしやすいと思います。各組織は自分たちが管理しているネットワークと他の会社が管理しているネットワークを繋げて1つのインターネットを構成しています。
KDDI、NTTドコモがそれぞれで管理しているネットワークのことを「自律システム(AS)」と呼びます。
組織が管理しているネットワークが同じ(ASが同じ)場合に使うルーティングプロトコルのことをIGPsと呼び、
組織が管理しているネットワークが違う(ASが違う)場合に使うルーティングプロトコルのことをEGPsと呼びます。
IGPs、EGPsは色々なプロトコルがあります。以下に一例をあげます。
- IGPs
- RIP
- OSPF
- IGRP
- EGPs
- EGP
- BGP
BGPはEGPsにカテゴライズされているルーティングプロトコルになります。
BGPの歴史
BGPはインターネットを構成するために重要なことは前述しましたが、
BGPの使われ方は歴史とともに変化をしていきました。
初期は外部ネットワークと接続するために使われていましたが、徐々にデータセンター内部でも使われるようになり、最近ではサーバ同士の通信でも使われるようになっています。
データセンター内部のアーキテクチャ
従来のネットワークトポロジー
昔はサーバとクライアントが通信するモデル (North-South traffic) が一般的でした。ネットワーク帯域を拡張する際は、より大きくて高価な機器に交換します。冗長性の確保のために、ネットワーク機器は二重化してます。ただし、大きな機器ほど多くの機器と接続するため故障の時の影響度は高いです。
引用: https://www.slideshare.net/MasayukiKobayashi/dc-66865243#4
従来のネットワークトポロジの問題点
昔はサーバとクライアントが通信するモデル (North-South traffic) が一般的でしたが、 現在はクラウド上のVM間通信やマイクロサービスアーキテクチャ等によって、サーバ間通信(East-West traffic))が増加しました。
例えば、現在は単純なWeb三層のシステムではなく、RedisやmemcachedなどのインメモリデータストアやElasticsearch、Solr等の全文検索エンジンを使ったシステムの増加に伴って、サーバ間通信が増えています。
また従来のネットワークトポロジだとスケールアウトがしにくいため、サーバの台数が増えていくとネットワークの負荷に耐えきれなくなる可能性が出てきました。
このような問題に対応するためにClosネットワークトポロジをデータセンターのネットワークアーキテクチャに採用する動きが出てきました。
Closネットワークトポロジ
全leafが全spineに接続されます。そして、サーバは各leafに接続されます。
spine同士、leaf同士は接続することはありません。ネットワーク帯域を増やしたいときはspineノードを追加します。そうすることで、leafノードのリンクが増えてネットワーク帯域幅が大きくなります。従来のネットワークでは可用性の確保のため二重化していますが、障害時には帯域幅が半分になってしまいますが、Closネットワークでは、ノード数が多いほど、障害発生時の帯域幅の減少は少なくなります。
引用: https://www.slideshare.net/MasayukiKobayashi/dc-66865243#10
IGPを採用するかBGPを採用するか
これはネットワーク環境によって採用するものが異なると思います。
ただ、参考資料にしているLINE社やMicroSoft社はeBGPをデータセンター内部のルーティングプロトコルとして採用しています。
OSPFとIS-IS等のIGPsはリンクステートプロトコルなので、リンクの状態が変化した場合に各ルータに状態を伝播する特性があり、リンクを増やすと経路計算が走りネットワークダウンが起こる可能性がありますが、BGPはそのようなことがなく、Pv4, IPv6, MPLS, VPNといったマルチプロトコルをネイティブでサポートもしています(OSPFはマルチプロトコルはサポートしてない)。
そういう制約も含めてデータセンター内部のBGP導入を進めているのではないでしょうか。
参考資料:
- https://www.janog.gr.jp/meeting/janog33/program/bgp.html
- https://archive.nanog.org/meetings/nanog55/presentations/Monday/Lapukhov.pdf
- https://www.slideshare.net/linecorp/ss-116867631
Nodeの通信でBGPを使う
最近では、KubernetesのロードバランサーであるMetalLBでトラフィックを流したいIPアドレスの経路情報をBGPルーターに伝播して負荷分散させているらしいです。ここら辺はあまり調べられていないので、次はここについて調べてみたいと思います
参考資料: