14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IBM Cloud Virtual Private Cloud (VPC) 構築実践チュートリアル

Last updated at Posted at 2022-07-11

はじめに

IBM Cloud には従来の Classic と仮想化環境の Virtual Private Cloud (VPC) の二つのプラットフォームが存在します。

Classic の場合はインスタンスのオーダーだけを行えば、 必要に応じて Classic インフラストラクチャーから VLAN が切り出されます。さらに、パブリック接続を指定しておけば、デプロイ後、すぐに外部からアクセスできます。
初期構築の体験が非常に容易です。
(もちろん、オンプレ接続やセキュリティなどには十分な設計が必要ですが)

一方、VPC の場合、仮想化環境を作るところ、つまり仮想化環境を理解するところから始めなければなりません。また、インスタンスがデプロイされてもすぐに外部からアクセスできるわけではありません。
今回 IBM Cloud の VPC 環境を紹介するセミナーを開催する機会があり、デモシナリオを考えました。
そして、ステップ・バイ・ステップチュートリアルとして公開することにしました。
IBM Cloud VPC の体験に役に立てていただければと思います。

全体イメージ

今回のチュートリアルで目指す全体のイメージは下記のとおりです。

image.png

作業内容は下記になります。

  • 特定のリージョンに VPC を作成します。
  • VPC を 3 つのゾーンに展開します。
  • 各ゾーンにはサブネットを一つ作成します。
  • 最初のサブネットにはふたつのVSIを配置します。
    そのうち、一つ目のVSIはフローティングIPを使って外部からのアクセスを可能にします。
    2つ目のVSIはパブリック・ゲートウェイを使って外部へのアクセスを可能にします。
  • 2つ目め、3つ目のサブネットには各々ひとつ、Web サーバーに利用する VSI を配置します。
    Web サーバーの構築はスクリプトを使って自動化します。
  • 別々のゾーンにある Web サーバーをアプリケーション・ロード・バランサーで外部公開します。
    稼働できるようにセキュリティー・グループの調整も行います。

クライアント側の準備

図の左上の「USER」が自分の作業用クライアントです。
今回の例では Windows 10 を利用していますが Mac や Linux でも大きな違いはないはずです。

sshキーの作成

今回構築する VSI は すべて CentOS 7 を利用します。
自動ログインを可能にするために作業用クライアントで ssh キーを生成します。

現在の Windows 10 では標準で OpenSSH が利用できます。
標準コマンドの ssh-keygen で鍵ペアを作成します。

ssh-keygen

image.png

2023/09/20 追記
Mac での作成方法はこちらなどを確認してください。

VPC、ゾーン、サブネットの作成

最初にリージョンを選び、VPC、ゾーン、サブネットを作成します。

VPC は「東京」や「大阪」といった特定のリージョンに構築する自分の仮想ネットワーク環境です。
VPC は特定のリージョン内の複数のデータセンター (DC) にまたがって構築できます。「東京」も「大阪」も 3つの DC から構築されます。各々の DC の資源のうち自分の VPC で利用する部分をゾーンと呼び、各ゾーンで利用するアドレス範囲を決定します。
サブネットは実際にインスタンスを配置する先です。各ゾーンで利用するアドレス範囲から一部を切り出して作成します。アドレス範囲であれば、複数のサブネットが作成できます。

image.png

VPC の作成

VPC 関連リソースにアクセスするアイコンは、こちらです。

image.png

VPC をクリックします。

image.png

リージョンを選びます。今回は「大阪」を選びました。

image.png

「作成」します。

image.png

作成先のロケーションを確認し、名前を設定します。
デフォルトで、ロケーション毎に設定されたサブネットが用意されますが、オンプレミス環境や他のVPCとの接続のために、単純に受け入れるのではなく、自分で設計したものに置き換えるべきでしょう。

image.png

「デフォルトのアドレスの接頭部」のチェックをはずし、VPC を作成します。

image.png

VPC が作成されました。

image.png

アドレス接頭部(ゾーン毎のIPの範囲)の指定

VPC で各ゾーンに割り当てる IP の範囲を指定します。
各ゾーンのサブネットは、このアドレス接頭部から切り出します。

今回は下記のように設定しましょう。

ロケーション IP範囲
大阪1 10.10.0.0/18
大阪2 10.20.0.0/18
大阪3 10.30.0.0/18

作成した PVC を開き「アドレス接頭部」のタブで「作成」します。

image.png

IP 範囲とロケーションを指定します。
まず、10.10.0.0/18 を大阪 1 に作成します。

image.png

同様に大阪 2、大阪 3のアドレス接頭部を作成します。

アドレス接頭部が作成されました。

image.png

サブネットの作成

下記のようにサブネットを作成しましょう。

ロケーション IP範囲 サブネット名 サブネットの範囲
大阪1 10.10.0.0/18 sn-osa-1 10.10.0.0/24
大阪2 10.20.0.0/18 sn-osa-2 10.20.0.0/24
大阪3 10.30.0.0/18 sn-osa-3 10.30.0.0/24

左メニューから「サブネット」を選び「作成」します。

image.png

ロケーションを選択します。
サブネットに名前を付けます。
接続先の VPC を選択します。
サブネットを設定します。
アドレス接頭部を選びアドレスの数を選べば、アドレス接頭部の範囲から、サブネットを切り出してくれます。
アドレス接頭部内の任意の場所にサブネットを作成したい場合はIP範囲にCIDR を直接指定します。
「サブネットの作成」を行います。

image.png

同様にsn-osa-2 sn-osa-3 も作成します。

サブネットが作成されました。

image.png

仮想インスタンスの作成とフローティング IP での公開

ここでは、仮想インスタンスを作成し、フローティング IPを割り振ります。
フローティング IPを利用すると、外部から直接、インスタンスにアクセスできるようになります。
このインスタンスは VPC への外部ネットワークからの踏み台サーバーに利用します

image.png

仮想インスタンスを sn-osa-1 に作成

仮想インスタンスをsn-osa-1 に作成します。

image.png

サーバータイプは Intel のパブリックを選択します。
ロケーションを指定し、名前を付けます。
利用する OS を選択します。今回は CentOS を選択しました。
プロファイルで仮想インスタンスの特性やサイズを選択します。
SSH 鍵は後ほど指定しましょう。
ネットワーキングで VPC を選択し、ネットワーク・インターフェースでサブネットを確認します。

image.png

チュートリアルの最初で作業用ワークステーションに ssh の鍵ペアを作成しました。
ユーザーのホームディレクトリの中の「.ssh」に「id_rsa.pub」の名前で公開鍵が作成されていますので、この内容で SSH 鍵を登録します。

notepad .ssh\id_rsa.pub

image.png

「鍵の作成」をクリックします。

image.png

リージョンを確認し、名前を付け、公開鍵に id_rsa.pubの内容を貼り付け「作成」します。

image.png

2023/09/02 追記
既存の公開キーの貼り付けだけではなく、キーの生成や公開鍵のアップロードが選択できるようになっていました。

作成した公開鍵を選択し「仮想サーバーの作成」をクリックします。

image.png

作成されました。

image.png

フローティング IP の割り当て

現在、このインスタンスには VPC 内のプライベートアドレスしか割り当てられていません。
そこで、パブリック IP を付けて外部よりアクセスできるようにしましょう。
「概要」タブでネットワーク・インターフェースの鉛筆アイコンをクリックします。

image.png

フローティング IP アドレスを選択するか新規に予約します。
選択後、保存します。

image.png

フローティング IP が割り振られました。

image.png

フローティング IP への ssh でのアクセス

フローティング IP に対して ssh でアクセスします。

ssh root@[浮動 IP]

鍵ペアで認証され、ssh で接続できました。

image.png

外部からの VPC 内のインスタンスへの接続が確認できました。

パブリック・ゲートウェイによる外部への接続

先ほどのインスタンスにはフローティング IP が直接、割り当てられているので、外部からの接続だけではなく外部へのアクセスも可能です。
しかし、外部へはアクセスしたいが外部からはアクセスさせたくない状況も存在します。
すべてのインスタンスに外部から直接接続できるフローティングIP を付けるわけにもいきません。

VPC では サブネットにパブリック・ゲートウェイを接続することで、この要件を実現します。
サブネット内のインスタンスは、パブリック・ゲートウェイ経由で外部にアクセス可能になります。
しかし、外部からは直接アクセスできません。

ここではフローティング IP を持たないインスタンスを作成し、サブネットにパブリック・ゲートウェイを接続することで外部への接続を確認します。

image.png

フローティング IP を持たないインスタンスの作成

サブネット sn-osa-1 に、同じ SSH 鍵でもう一つインスタンスを作成します。

image.png

先ほどの踏み台サーバーから、このインスタンスへアクセスできるように、作業用クライアントから踏み台サーバーに ssh の秘密鍵をコピーします。

scp .ssh\id_rsa root@[浮動 IP]:/root/.ssh

image.png

踏み台サーバーから新規に作成したインスタンスに ssh で接続します。

ssh root@10.x.x.x

新規に作成したインスタンス上で外部への接続を試みます。

ping www.ibm.com

ping に応答がありません。
フローティング IP を持っていないインスタンスから、現時点では外部へのアクセスができないことが確認できます。

image.png

パブリック・ゲートウェイの作成

パブリック・ゲートウェイを作成しましょう。

image.png

ロケーションを指定します。

image.png

名前と PVC を指定し「作成」します。

image.png

「切り離し済み」として作成されました。

image.png

接続したいサブネットを開きます。パブリックゲートウェイが「切り離し済み」になっているので、クリックします。

image.png

接続を選びます。

image.png

「接続済み」になりました。

image.png

動的に接続が行われました。先ほどの ping 画面に戻ると応答が確認できます。

image.png

パブリック・ゲートウェイによる外部への接続が確認できました。

スクリプトを利用したインスタンスの作成

同じ構成で複数のインスタンスを作成したい場合があります。
手動で構築し、次回用のテンプレートとして「カスタム・イメージ」を作成してもよいのですが、構築内容を Infrastructure as Code として再現可能なスクリプトにしておくのも有効です。
今回は Web サーバーを2台、別々のサブネットにスクリプトで構築しましょう。

image.png

インスタンスの作成時のユーザー・データの指定

下記は、自分の 10.x.x.x の IPアドレスの情報を index.html に設定した http サーバーを構築するスクリプトです。

#!/bin/sh
yum -y update
yum -y install httpd
ip a | grep '10\.' | echo `cat` | cut -f 2 -d ' ' > /var/www/html/index.html
chmod 644 /var/www/html/index.html
systemctl enable httpd
systemctl start httpd

インスタンスの構築時に、このスクリプトを自動実行させてみましょう。
sn-osa-2 と sn-osa-3 に一つずつ構築します。

下記は sn-osa-2 に作成したイメージです。

image.png

大事なのは、詳細オプションのユーザー・データに先ほどのスクリプトが入力されていることです。

image.png

同様に sn-osa-3 にも詳細オプションのユーザー・データに先ほどのスクリプトを指定したインスタンスを作成します。

作成されました。プライベート IP アドレスが確認できます。

image.png

踏み台サーバーから curl で Web サーバーの稼働を確認しましょう。

curl http://[プライベート IP アドレス]/

同じ VPC 内のため別のゾーン、サブネットであっても接続が可能になっています。
index.html に設定したプライベート IP アドレスが応答として返されます。

※ ポータル上インスタンスが利用可能になっていても、スクリプトの実行が完了しておらず、crul への応答が得られないことがあります。その場合、しばらく待って再度実行してください。

image.png

Web サーバーが正しく構築されたのが確認できました。
ただし、このままでは Web サーバーにアクセルできるのは VPC 内のインスタンスに限られます。

ロード・バランサーによる Web サーバーの外部公開

作成した 2 台の Web サーバーをロード・バランサーで外部公開します。

image.png

ロード・バランサーの作成

ロード・バランサーを作成します。

image.png

ロケーションを確認し、名前を付けます。
ロードバランサーには L7 のアプリケーション・ロード・バランサーと L3 のネットワーク・ロード・バランサーが用意されています。
今回は http に特化した機能を持つ L7 のアプリケーション・ロードバランサーを指定します。
外部公開するロード・バランサーなのでタイプは「パブリック」を選びます。
接続先サブネットは Web サーバーのある sn-osa-2 と sn-osa-3 を指定します。

image.png

サブネットの指定は、実際はチェックボックスです。

image.png

転送先を指定するバックエンド・プールを作成します。

image.png

名前を付け、プロトコルに HTTP を選択します。
セッションは維持せずに、ラウンドロビンでの割り振りとします。

image.png

ポート80の「/」へのアクセスをヘルス・チェックとして指定し「作成」します。

image.png

バックエンド・プールが作成されましたので、サーバーの接続を行います。

image.png

サブネットを選択するとインスタンスが表示されます。

image.png

サーバーを選択し、ポートの構成を行います。

image.png

サーバーで Listen しているポートである 80 を指定し「接続」します。

image.png

「v」をクリックして「^」にすると接続が確認できます。
作成します。

image.png

これで割り振り先が構成できました。

次に。フロントエンド・リスナーを作成します。
フロントエンド・リスナーではロードバランサーが接続要求を受け入れるために Listen するポートを指定します。

image.png

転送先であるバックエンド・プールを確認し、ロードバランサーが Listen するポートを指定して作成します。
今回は、通常の HTTP 接続を受け付けるためにポート 80 を指定し「作成」します。

image.png

「ロードバランサーの作成」を実行します。

image.png

作成されました。

image.png

アクセス出来ないことの確認

今回ホスト名に「d0d03595-jp-osa.lb.appdomain.cloud」がアサインされました。
http://d0d03595-jp-osa.lb.appdomain.cloud にアクセスしてみます。
しかし、まだアクセスできません。

image.png

バックエンド・プールは正常です。

image.png

実はこれは Web サーバーのインスタンスにデフォルトで接続されているセキュリティー・グループが原因です。

image.png

セキュリティー・グループのインバウンド・ルールを確認すると同じセキュリティー・グループは全ての接続を許可していますが、それ以外からの TCP 接続はポート 22 に対するものしか許可していません。

image.png

先ほど踏み台サーバーから Web サーバーに curl で Web サーバーの応答を確認したときは確かに応答がありました。
これが、踏み台サーバーと Web サーバー が同じセキュリティー・グループに所属していたのでポート 80 への接続も許可されていた結果です。

一方、ロードバランサーはデフォルトのセキュリティー・グループに所属していません。そのためデフォルトのセキュリティー・グループのままではアクセスできません。

セキュリティー・グループの設定

ロードバランサーからのアクセスを許可するためにセキュリティー・グループにルールを追加しましょう。

新しいルールを作成します。

image.png

すべてのソースからのポート 80 への接続を許可します。

image.png

ルールが追加されました。

image.png

ロードバランサーへアクセスするページに戻って、再表示します。
今度は Web サーバーにアクセスできました。

image.png

2023/09/02 追記
再表示してもアクセスできない場合、http://... でアクセスしてください。ブラウザーが http:// のアクセスを https:// に自動書き換えしている場合があります。
ブラウザーからではなく「curl -v http://...」でアクセスした方が混乱がないかもしれません。

もう一度、再表示します。
表示されるアドレスが変わりました。正しくラウンドロビンで割り振っているようです。

image.png

再表示する度に、表示アドレスが変わります。

まとめ

VPC は Classic 環境に比べ入門の敷居が少し高いかもしれません。
しかし、一度体験して理解してしまえば、モダンな今時の Cloud 環境を利用できるようになります。任意の IP アドレスを指定できますので、オンプレ環境との接続親和性も高くなっています。

ぜひ VPC 環境をお試しいただき。要件に合わせて Classic と使い分けていただければと思います。

14
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?