目的
IBM CloudのIaaSは旧SoftLayerをベースにしていましたが、新たなアーキテクチャに刷新した新サービスVPC Gen2が東京でも利用できるようになりました。
VPC Gen2がどういうものかは他の方の記事におまかせするとして、旧SoftLayer、いわゆるClassic Infrastructureをすでに利用している場合は、当面はVPC Gen2と共存していくことになると思います。このとき1つ注意点があります。Classic InfrastructureとVPC Gen2は、デフォルトではプライベートアドレス同士で直接通信することができません。もちろんパブリック同士では可能ですが、通信量の増大や遅延を避けるため、あるいは通信の保護のため、プライベートネットワークで通信したいケースが多いはずです。今回はそれを可能にするTransit Gatewayを検証してみます。
現在とりうる方法
そもそも両者をプライベートで通信可能にする方法ですが、現在は2つの方法があるようです。
クラシック・アクセス
VPC作成時に、クラシック・リソースへのアクセスを有効にしますをチェックします。
簡単ですが制約があり、1つのリージョンに1つのVPCだけがこの機能を使うことができます。つまりリージョン内に複数のVPCがある場合は他のVPCはこの機能を使うことができないことに注意が要ります。
https://cloud.ibm.com/docs/vpc?topic=vpc-setting-up-access-to-classic-infrastructure
Transit Gateway
Transit Gatewayは異なるリージョン間またはリージョン内の異なるのVPCを接続するためのサービスです。さらに、Classic Infrastructureとも接続することができます。ただしこちらも制約があり、Classic Infrastructureと接続できるTransit Gatewayはアカウントで1つしか設定できないようです。その点は注意です。
検証
次のような構成とします。
設定前の確認
当然ですが、お互いのIPでは通信できません。
# Classic to VPC tok1
$ ping 10.244.0.4
PING 10.244.0.4 (10.244.0.4) 56(84) bytes of data.
# Classic to VPC tok2
$ ping 10.244.64.4
PING 10.244.64.4 (10.244.64.4) 56(84) bytes of data.
# VPC tok1 to Classic
$ ping 10.193.17.194
PING 10.193.17.194 (10.193.17.194) 56(84) bytes of data.
# VPC tok2 to Classic
$ ping 10.193.17.194
PING 10.193.17.194 (10.193.17.194) 56(84) bytes of data.
Transit Gatewayのオーダー
カタログからTransit Gatewayを選択します。
ローカル・ルーティングまたはグローバル・ルーティングを選びます。今回は東京内での通信ですのでローカル・ルーティングとし、ロケーションは東京とします。ちなみにグローバル・ルーティングにすると、異なるリージョン間のVPCを接続することができますが、通信量が月1TBを超えると有料になるようです。
次に接続でクラシック・インフラストラクチャーをプルダウンから選択します。さらに追加でVPCを選択し、地域やVPC名を選択します。
これでオーダーします。
設定後の確認
オーダー後しばらく待つと(1~2分程度)、お互いに通信が可能になります。
# Classic to tok1
$ ping 10.244.0.4
PING 10.244.0.4 (10.244.0.4) 56(84) bytes of data.
64 bytes from 10.244.0.4: icmp_seq=1538 ttl=51 time=1.99 ms
64 bytes from 10.244.0.4: icmp_seq=1539 ttl=51 time=2.00 ms
64 bytes from 10.244.0.4: icmp_seq=1540 ttl=55 time=1.38 ms
# Classic to tok2
$ ping 10.244.64.4
PING 10.244.64.4 (10.244.64.4) 56(84) bytes of data.
64 bytes from 10.244.64.4: icmp_seq=1517 ttl=55 time=1.75 ms
64 bytes from 10.244.64.4: icmp_seq=1518 ttl=55 time=1.77 ms
64 bytes from 10.244.64.4: icmp_seq=1519 ttl=55 time=1.70 ms
# VPC tok1 to Classic
$ ping 10.193.17.194
PING 10.193.17.194 (10.193.17.194) 56(84) bytes of data.
64 bytes from 10.193.17.194: icmp_seq=1586 ttl=55 time=2.12 ms
64 bytes from 10.193.17.194: icmp_seq=1587 ttl=55 time=2.07 ms
64 bytes from 10.193.17.194: icmp_seq=1588 ttl=55 time=1.50 ms
# VPC tok1 to Classic
$ ping 10.193.17.194
PING 10.193.17.194 (10.193.17.194) 56(84) bytes of data.
64 bytes from 10.193.17.194: icmp_seq=1104 ttl=55 time=1.72 ms
64 bytes from 10.193.17.194: icmp_seq=1105 ttl=55 time=1.72 ms
64 bytes from 10.193.17.194: icmp_seq=1106 ttl=55 time=1.75 ms
はい、とても簡単でした。
注意点
Classic Infrastructureと接続できるTransit Gatewayがアカウント内で1つしか作れないため、Classic Infrastructureの仮想サーバをグローバルにデプロイしているケースでは、通信経路が最適にはならない場合があります。例えばVPCが東京とダラスにあり、Classic Infrastructureの仮想サーバがダラスにある場合、東京にTransit Gatewayを置くと、ダラスのVPCとClassic Infrastructure間の通信はわざわざ東京を経由することになってしまいます。
また、Transit Gatewayを通る通信のアクセス制御はTransit Gatewayではできません。ACLやSecurity Groupで個別設定をする必要があります。



