目次
はじめに
はじめまして、id:yokoyama-mといいます。簡単な3層構成のネットワークをOCI上に構築したので紹介します。 OCIはWebコンソール上からも操作できますが、今回は勉強も兼ねてOCI Command Line Interface(以下CLI)を使用して構築を行いました。
仕様
構築するネットワークの仕様は以下の通りです。
アドレス範囲:
No | 対象 | AD1 CIDR | AD2 CIDR |
---|---|---|---|
1 | (全体) | 192.168.0.0/16 | 〃 |
2 | web | 192.168.64.0/24 | 192.168.80.0/24 |
3 | app | 192.168.128.0/24 | 192.168.144.0/24 |
4 | db | 192.168.192.0/24 | 192.168.208.0/24 |
アクセス制御:
No | 送信元 | 送信先 | 許可ポート | 備考 |
---|---|---|---|---|
1 | (外部) | web | 80,443 | 外部からのHTTP/HTTPS通信 |
2 | web | app | 8080 | REST APIサーバ |
3 | app | app | (すべて) | 内部用 |
4 | (外部) | app | 22 | 管理者用ssh |
5 | app | db | 3306,6379 | MySQL/Redis |
6 | db | db | (すべて) | 内部用 |
事前準備
CLIのインストールと設定
構築
コンパートメントの作成
コンパートメントを作成します。既存のコンパートメントを使用する場合は作成する必要はありません。
$ oci iam compartment create \ --compartment-id "ocid1.tenancy.oc1..abcdefghijklmnopqrstuvwxyz" \ --name mycomp \ --description "my compartment"
ネットワークの作成
ネットワークを作成します。
$ oci network vcn create \ --cidr-block 192.168.0.0/16 \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --display-name "vcn-main"
インターネットゲートウェイの作成
外部へアクセスするためのインターネットゲートウェイを作成します。
$ oci network internet-gateway create \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --is-enabled true \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "igw-main"
ルートテーブルの作成
ルートテーブルを作成します。インターネットアクセス用のルールのみ定義しています。
$ oci network route-table create \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --route-rules '[{"cidrBlock":"0.0.0.0/0","networkEntityId":"ocid1.internetgateway.oc1.iad.abcdefghijklmnopqrstuvwxyz"}]' \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "rt-main"
セキュリティリストの作成
Web層のセキュリティリストを作成します。
$ oci network security-list create \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --egress-security-rules '[{"destination": "0.0.0.0/0", "is-stateless": false, "protocol": "6"}]' \ --ingress-security-rules \ '[ {"is-stateless": false,"protocol": "6","source": "0.0.0.0/0","tcp-options": {"destination-port-range": {"max": 80,"min": 80}}}, {"is-stateless": false,"protocol": "6","source": "0.0.0.0/0","tcp-options": {"destination-port-range": {"max": 443,"min": 443}}} ]' \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "sl-web"
App層のセキュリティリストを作成します。
$ oci network security-list create \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --egress-security-rules '[{"destination": "0.0.0.0/0", "is-stateless": false, "protocol": "6"}]' \ --ingress-security-rules \ '[ {"is-stateless": false,"protocol": "6","source": "192.168.64.0/18","tcp-options": {"destination-port-range": {"max": 8080,"min": 8080}}}, {"is-stateless": false,"protocol": "6","source": "0.0.0.0/0","tcp-options": {"destination-port-range": {"max": 22,"min": 22}}}, {"is-stateless": false,"protocol": "6","source": "192.168.128.0/18"} ]' \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "sl-app"
DB層のセキュリティリストを作成します。
$ oci network security-list create \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --egress-security-rules '[{"destination": "0.0.0.0/0", "is-stateless": false, "protocol": "6"}]' \ --ingress-security-rules \ '[ {"is-stateless": false,"protocol": "6","source": "192.168.128.0/18","tcp-options": {"destination-port-range": {"max": 3306,"min": 3306}}}, {"is-stateless": false,"protocol": "6","source": "192.168.128.0/18","tcp-options": {"destination-port-range": {"max": 6379,"min": 6379}}}, {"is-stateless": false,"protocol": "6","source": "192.168.192.0/18"} ]' \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "sl-db"
サブネットの作成
Web層のサブネットを作成します。
$ oci network subnet create \ --availability-domain "dArW:US-ASHBURN-AD-1" \ --cidr-block 192.168.64.0/24 \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "subnet-web-1" \ --route-table-id "ocid1.routetable.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --security-list-ids '["ocid1.securitylist.oc1.iad.abcdefghijklmnopqrstuvwxyz"]' $ oci network subnet create \ --availability-domain "dArW:US-ASHBURN-AD-2" \ --cidr-block 192.168.80.0/24 \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "subnet-web-2" \ --route-table-id "ocid1.routetable.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --security-list-ids '["ocid1.securitylist.oc1.iad.abcdefghijklmnopqrstuvwxyz"]'
App層のサブネットを作成します。
$ oci network subnet create \ --availability-domain "dArW:US-ASHBURN-AD-1" \ --cidr-block 192.168.128.0/24 \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "subnet-app-1" \ --route-table-id "ocid1.routetable.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --security-list-ids '["ocid1.securitylist.oc1.iad.abcdefghijklmnopqrstuvwxyz"]' $ oci network subnet create \ --availability-domain "dArW:US-ASHBURN-AD-2" \ --cidr-block 192.168.144.0/24 \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "subnet-app-2" \ --route-table-id "ocid1.routetable.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --security-list-ids '["ocid1.securitylist.oc1.iad.abcdefghijklmnopqrstuvwxyz"]'
DB層のサブネットを作成します。
$ oci network subnet create \ --availability-domain "dArW:US-ASHBURN-AD-1" \ --cidr-block 192.168.192.0/24 \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "subnet-db-1" \ --route-table-id "ocid1.routetable.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --security-list-ids '["ocid1.securitylist.oc1.iad.abcdefghijklmnopqrstuvwxyz"]' $ oci network subnet create \ --availability-domain "dArW:US-ASHBURN-AD-2" \ --cidr-block 192.168.208.0/24 \ --compartment-id "ocid1.compartment.oc1..abcdefghijklmnopqrstuvwxyz" \ --vcn-id "ocid1.vcn.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --display-name "subnet-db-2" \ --route-table-id "ocid1.routetable.oc1.iad.abcdefghijklmnopqrstuvwxyz" \ --security-list-ids '["ocid1.securitylist.oc1.iad.abcdefghijklmnopqrstuvwxyz"]'
さいごに
OCIでネットワークを構築してみました。いかがだったでしょうか。今後もネットワーク絡みのネタをご紹介できればと思います。よろしくお願いします。