OCIでネットワークを構築する

目次

はじめに

はじめまして、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のインストールと設定

id:a-oono の以下記事を参照ください。

cloudii.atomitech.jp

cloudii.atomitech.jp

構築

コンパートメントの作成

コンパートメントを作成します。既存のコンパートメントを使用する場合は作成する必要はありません。

$ 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でネットワークを構築してみました。いかがだったでしょうか。今後もネットワーク絡みのネタをご紹介できればと思います。よろしくお願いします。

Copyright (c) Atomitech Inc. All rights reserved.