こんばんは。七色メガネです。
今日は、GCPにおけるVPCというネットワークについてお勉強して行きたいと思います。
GCP ってなに?
過去記事で説明を行なっていますので、よろしければご覧ください。
VPC ってなに?
VPCとは、GCPにおける仮想化ネットワークのことです。VPCを使用して、同一プロジェクト内のVMインスタンス、Appエンジン・インスタンス、Kubernetesクラスタ、その他リソースなどを接続することができます。
VPCのサンプル・イメージ
公式ドキュメントにVPCを使用した構成サンプルがありますので、まずはそちらで全体のイメージを掴みましょう。
ではこの図を見ながら、特徴について勉強していきます。
VPCの特徴
VPCは同一プロジェクト内におけるリソースの接続を可能にする
サンプルの一番外側の囲みには「Project」の表記があります。ここからわかるように、VPCは同じプロジェクト内のリソースの接続を可能にします。
他のプロジェクトとの接続を果たす方法もありますが、VPC単体の機能ではありません。
VPC自体はグローバルなリソースであり、特定のリージョンやゾーンには関連づけられない
サンプルでは us-west リージョンと us-east リージョンがVPCによって接続されています。この時、VPC自体には IPアドレスが振られていないことがわかります。
ここからわかるように、VPCは特定のリージョンなどに属する限定的なオブジェクトではありません。
VPCネットワークは「サブネット」と呼ばれる一つまたは複数のIP範囲で構成される
VPCネットワークでは「サブネット」という概念があります。サブネットはリージョンに紐づくオブジェクトであり、このサブネットがIPアドレスの範囲を持ちます。
サブネットには「プライマリアドレス範囲」と「セカンダリアドレス範囲」があります。
「プライマリアドレス範囲」とは、CIDR記法を用いて定義されるIPアドレスの範囲です。
「セカンダリアドレス範囲」とは、プライマリアドレス範囲の中で作成できるIPの範囲です。
サンプルのVPCネットワークで言えば、 us-west というリージョンに subnet1 というサブネットが定義されていて、プライマリ範囲である 10.240.0.0/24 という範囲の中で、 10.240.0.2 と 10.240.0.3 というIPアドレスが発行されています。
VPCネットワークは各リージョンに作成されているサブネットに接続するので、サブネットで定義されたIPアドレス範囲を以って構成されると言えます。
デフォルト設定のVPCネットワークを使用する(自動モード)と、全リージョンに接続された状態となる。
自動モードでVPCネットワークが作成されると、各リージョンに1つのサブネットが自動的に作成された状態でネットワークが構成されます。全てのリージョンにサブネットが要求される場合、この自動モードを使用することが推奨されます。
自動モードとは異なるネットワークの作成方法として、カスタムモードによるネットワークの構成があります。
カスタムモードでは、サブネットは自動的に作成されません。ユーザが個々のサブネットを作成し、ネットワークに設定する必要があります。
カスタムモードの方が柔軟性が高く、一般的な本番環境ではカスタムモードを使用することが推奨されます。
ネットワークは自動モードからカスタムモードへと変更することができますが、その逆はできません。
ネットワーク内のファイアウォールは、送信(下り)と受信(上り)に対して設定できる。
VPCネットワーク内のファイアウォールはネットワーク内の送信と受信に対して設定することができます。
ここでは暗黙ルールとして、次のような設定がされています。
・全ての送信(下り)トラフィックを許可する。
・全ての受信(上り)トラフィックを許可する。
この設定は基本的なもので変更することはできません。ただしオーバーライドすることは可能であるので、この設定を上書きしながら実運用に合わせることになります。
これらファイアウォールの設定は、VPCネットワーク中のインスタンス間における通信についても適用することができます。
実際にネットワークを確認・設定してみる
なんとなくネットワークの雰囲気が掴めたので、実際にインスタンスを作成してネットワークを確認したり作成したりしてみましょう。
自動モードでインスタンスを作成した時のVPCネットワーク
まずは自動モードでインスタンスを作成して、ネットワーク状況をみてみましょう。
・GCEメニューからインスタンスを作成。
・インスタンス情報を設定。このあたりはネットワークとは特に関係ないですね。
・下の方にファイアウォールの設定がありました。先ほど確認したように、デフォルトでは受信(上り)トラフィックが全て拒絶されているようですね。許可する場合はここにチェックを入れましょう。
・「管理、セキュリティ、ディスク、ネットワーク、単一テナンシー」の折り畳みを開いた先の「ネットワーキング」タブに、ネットワークの設定画面がありました。ネットワークインターフェースが default になっていますね。これがいわゆる「自動モード」で、この defalut は全リージョンにサブネットを持つ設定になっています。
・作成ボタンを押して、インスタンスを作成します。
・作成されたインスタンスを開いて、ネットワークをみてみます。自動モードなので、 default が適用されていることがわかります。
・ネットワークインターフェースの「ネットワーク default 」を選択して中身をみてみます。ここまで表記がなかったので不安だったのですが、確かに「自動サブネット」の表記がありますね。サブネットもずらずら並んでいるので、おそらく正常に全リージョンにまたがってサブネットが作成されているのでしょう。
・
・ファイアウォールの設定をみてみると、上りが許可されていることがわかります。
暗黙ルールでは「上りは不許可」ですが、default の固有設定でそれを限定的に上書きしているようです。
なお暗黙ルールは、暗黙なのでこのコンソールからは確認できません。
カスタムモードでインスタンスを作成した時のVPCネットワーク
次はサブネットを自分で定義する、カスタムモードでのVPCネットワークを作成してみましょう。
・まずは新規にVPCネットワークを定義しましょう。VPCネットワークメニューから「VPCネットワークを作成」を押下します。
・ネットワークの作成画面に飛ぶので、サブネットの作成モードを「カスタム」にして、サブネットを一つだけ追加してみます。今回はプライマリアドレスのみ指定して、セカンダリは指定しません。
・作成します。
・できました。ファイアウォールの設定をするところはなかったと思うのですが、デフォルトで0になっていますね。この画面から編集をかけることで設定をすることができるようです。が今回はこのまま進めます。
・VPCネットワークを作成できたので、インスタンスを作成していきます。
・ネットワークインターフェースの設定で、default ではなく、先ほど作成したVPCネットワークを洗濯します。なお、インスタンスを作成するリージョンにサブネットが存在しない場合はエラーが出るようです。間違ってサブネットを asia-east(台湾)に作ってしまっていたので、インスタンスも東京ではなく台湾に作っています。
・作成します。
・作成できました。
・ネットワークを見てみると、定義した通りカスタムしたネットワークが選択されていることがわかります。
・custom-network の中身を見てみると、先ほどとは異なり「カスタムサブネット」モードでネットワークが定義されていること、そしてサブネットが定義通り単一であることが確認できます。default では「自動モード」でサブネットが全リージョン分ありましたね。
・ファイアウォールの設定を見てみると、何も設定していないので何もルールが表示されません。
ただ何も設定がないわけではなく、”暗黙ルールを上書きする設定が無い”ということにすぎません。
つまりここでは、「上りは不許可」「下りは許可」という暗黙ルールが適用されているということになります。
まとめ
- VPCを使用することで、プロジェクト内のリソースを接続することができる。
- VPCはサブネットで以って構成される。
- VPCネットワークの作成方法には 自動モード と カスタムモード がある。
- 自動モードで作成されたVPCネットワークは、全てのリージョンにサブネットが用意されている。この構成のネットワークはは default という名前で定義済みで、誰でも使用することができる。
- カスタムモードで作成されたVPCネットワークは、サブネットの情報が無いためユーザがサブネットを定義する必要がある。
- VPCネットワークにはファイアウォールを設定できる。設定は、ネットワークからの送信(下り)と受信(上り)に対して行える。
- ファイアウォールには「下りは全て許可」「上りは全て不許可」という暗黙ルールがある。これは変更できないが、優先度が最低レベルで設定されているため、ユーザが新しいルールを設定することでオーバーライドすることができる。
以上です。ここまでご覧いただき、ありがとうございました!