Virtual Private Cloud 中的公用前端及專用後端

本指導教學可能會產生成本。 使用「成本估算器」根據您的預計用量生成成本估算。

本指導教學將逐步引導您建立自己的 IBM Cloud® Virtual Private Cloud (VPC),其中包含多個子網路及每一個子網路中的虛擬伺服器實例 (VSI)。 VPC 是共用雲端基礎架構上與其他虛擬網路邏輯隔離的您自己的專用雲端。

子網路是 IP 位址範圍。 子網路必須連結至單一區域,不能跨多個區域或地區。 對於 VPC 的用途,子網路的重要性質是子網路可以彼此隔離,也可以按通常方式互連。 子網路隔離可以藉由安全群組來實現,安全群組充當防火牆,用於控制一個以上虛擬伺服器實例的入埠和出埠資料流量。

良好的作法是將子網路用於必須向外界公開的資源。 限制存取的資源,絕對不能直接從外界存取,這些資源會被放置在不同的子網路中。 這種子網路上的實例可以是後端資料庫或者您不希望可公開存取的一些密碼儲存庫。 您將定義安全群組,以允許或拒絕 VSI 的流量。

簡言之,使用 VPC,您可以:

  • 建立軟體定義的網路 (SDN),
  • 隔離工作負載,
  • 精細控制入埠和出埠資料流量。

目標

  • 瞭解虛擬專用雲端可用的基礎架構物件
  • 瞭解如何建立虛擬專用雲端、子網路和伺服器實例
  • 瞭解如何套用安全群組以保護對伺服器的存取

架構
教學的架構圖

  1. 管理者 (DevOps) 在雲端中設定所需的基礎架構(VPC、子網路、具有規則的安全群組、VSI)。
  2. 網際網路使用者向前端的 Web 伺服器發出 HTTP/HTTPS 要求。
  3. 前端從安全的後端要求專用資源,並將結果提供給使用者。

開始之前

  • 檢查使用者許可權。 您的使用者帳戶務必要有足夠的許可權以便建立及管理 VPC 資源。 請參閱 VPC 的 必要許可權 清單。
  • 您需要 SSH 金鑰才能連接至虛擬伺服器。 如果您沒有 SSH 金鑰,請參閱為 VPC 建立金鑰的 說明

建立 Virtual Private Cloud 和子網路

若要加強伺服器的安全,建議僅容許連線到伺服器上部署的應用程式所需的埠。 在本指導教學中,應用程式將是 Web 伺服器,因此只需要容許埠 80 上的入埠連線。

若要對這些伺服器執行維護作業,例如安裝軟體和執行作業系統升級,您將透過一個防禦主機來執行。 bastion 主機是以公用 IP 位址配置的實例,可透過 SSH 進行存取。 設定後,防禦主機充當跳躍伺服器,容許安全地連線到 VPC 中佈建的實例。

在此區段中,您將建立 VPC 和防禦主機。

本指導教學也隨附隨附的 Shell Script 和 Terraform 範本,可用來產生您將使用下面的使用者介面建立的資源。 它們 在此 Github 儲存庫中可用。

  1. 導覽至 Virtual Private Clouds 頁面,然後按一下 建立
  2. 新建 Virtual Private Cloud 區段下:
    1. 輸入 vpc-pubpriv 作為 VPC 的名稱。
    2. 選取資源群組
    3. 選擇性地新增標籤以組織您的資源。
  3. 取消勾選預設安全群組中的允許 SSH允許 ping。 稍後會將 SSH 存取新增至維護安全群組。 維護安全群組必須新增至實例,才能容許從防禦伺服器進行 SSH 存取。 本指導教學不需要連線測試存取權。
  4. 子網路 下,變更區域 1 子網路的名稱。 按一下鉛筆圖示:
    • 輸入 vpc-secure-bastion-subnet 作為子網路的唯一名稱。
    • 選取與 VPC 資源群組相同的 資源群組
    • 保留其他值中的預設值。
    • 按一下儲存
  5. 子網路 下變更區域 2 子網路的名稱。 按一下鉛筆圖示:
    • 輸入 vpc-pubpriv-backend-subnet 作為子網路的唯一名稱。
    • 選取與 VPC 資源群組相同的 資源群組
    • 保留其他值中的預設值。
    • 按一下儲存
  6. 子網路 下,變更區域 3 子網路的名稱。 按一下鉛筆圖示:
    • 輸入 vpc-pubpriv-frontend-subnet 作為子網路的唯一名稱。
    • 選取與 VPC 資源群組相同的 資源群組
    • 保留其他值中的預設值。
    • 按一下儲存
  7. 按一下建立虛擬專用雲端

若要確認子網路的建立,請前往 Subnets 頁面,並等待狀態變更為 Available

建立和配置防禦安全群組

執行防禦主機指導教學的此區段中說明的步驟來建立安全群組,並為防禦虛擬伺服器實例配置入埠規則。

建立防禦實例

執行防禦主機指導教學的此區段中說明的步驟來建立防禦虛擬伺服器實例。

使用維護存取規則配置安全群組

執行防禦主機指導教學的此區段中說明的步驟來建立安全群組 vpc-secure-maintenance-sg。 在對虛擬伺服器實例執行維護作業(例如,安裝軟體或更新作業系統)時,將使用此安全群組。

建立後端安全群組和 VSI

在本節中,您將為後端建立安全群組和虛擬伺服器實例。

建立後端安全群組

後端安全群組控制後端伺服器的入站和出站連線。

若要為後端建立新的安全群組,請執行下列動作:

  1. 網路下選取 安全群組,然後按一下 建立
  2. 輸入 vpc-pubpriv-backend-sg 作為名稱,然後選取先前建立的 VPC。
  3. 選取與 VPC 相同的資源群組。
  4. 按一下建立安全群組

您稍後將編輯安全群組以新增入埠和出埠規則。

建立後端虛擬伺服器實例

若要在新建立的子網路中建立虛擬伺服器實例,請執行下列動作:

  1. 按一下子 網路下的後端子網路。
  2. 按一下 連接資源,在 連接實例 下按一下 建立
  3. 若要配置實例,請執行下列動作:
    1. 選擇一個地點,並確保稍後會再次使用相同的地點。
    2. 名稱設定為 vpc-pubpriv-backend-vsi
    3. 選取先前的資源群組。
    4. 影像 下,按一下 變更影像。 使用搜尋欄位來選取 Ubuntu Linux 作為 作業系統。 您可以挑選任何版本的映像檔。
    5. 按一下 變更設定檔,選取 計算 作為種類,並挑選 cx2-2x4 (2 vCPUs 和 4 GB RAM) 作為設定檔。
    6. SSH 金鑰設定為之前建立的 SSH 金鑰。
    7. 進階選項 下,將 使用者資料 設為
      #!/bin/bash
      apt-get update
      apt-get install -y nginx
      echo "I'm the backend server" > /var/www/html/index.html
      service nginx start
      
      這會在實例安裝簡單的 Web 伺服器。
  4. 網路下,選取您建立的 VPC。
  5. 確定已選取 虛擬網路介面,並將 vpc-pubpriv-backend-subnet 列為子網路。 按一下該子網路的編輯圖示。
    1. 首先,在 網路連接及虛擬網路介面詳細資料下,驗證已選取 vpc-pubpriv-backend-subnet。 按下一步
    2. 取消勾選預設安全群組,並勾選 vpc-pubpriv-backend-sgvpc-secure-maintenance-sg
    3. 在「IP 配置」對話框中,一切維持現狀,然後按 下一步
    4. 最後,按一下 儲存來檢閱所有項目並完成。
  6. 按一下建立虛擬伺服器實例

建立前端安全群組和 VSI

類似於後端,您將建立一個前端虛擬伺服器實例和一個安全群組。

建立前端安全群組

為前端建立新的安全群組:

  1. 按一下「網路」下的 安全群組,然後按一下 建立
  2. 輸入 vpc-pubpriv-frontend-sg 作為名稱,並選取稍早之前建立的 VPC。
  3. 選取與 VPC 相同的資源群組。
  4. 按一下建立安全群組

建立前端虛擬伺服器實例

若要在新建立的子網路中建立虛擬伺服器實例,請執行下列動作:

  1. 按一下子 網路下的前端子網路。
  2. 按一下 連接資源,在 連接實例 下按一下 建立
  3. 若要配置實例,請執行下列動作:
    1. 選擇一個地點,並確保稍後會再次使用相同的地點。
    2. 名稱設定為 vpc-pubpriv-frontend-vsi
    3. 選取先前的資源群組。
    4. 影像 下,按一下 變更影像。 使用搜尋欄位來選取 Ubuntu Linux 作為 作業系統。 您可以挑選任何版本的映像檔。
    5. 按一下 變更設定檔,選取 計算 作為種類,並挑選 cx2-2x4 (2 vCPUs 和 4 GB RAM) 作為設定檔。
    6. SSH 金鑰設定為您先前建立的 SSH 金鑰。
    7. 進階選項 下,將 使用者資料 設為
      #!/bin/bash
      apt-get update
      apt-get install -y nginx
      echo "I'm the frontend server" > /var/www/html/index.html
      service nginx start
      
      這會在實例安裝簡單的 Web 伺服器。
  4. 網路下,選取您建立的 VPC。
  5. 確定已選取 虛擬網路介面,並將 vpc-pubpriv-frontend-subnet 列為子網路。 按一下該子網路的編輯圖示。
    1. 首先,在 網路連接及虛擬網路介面詳細資料下,確認已選取 vpc-pubpriv-frontend-subnet。 按下一步
    2. 取消勾選預設安全群組,並勾選 vpc-pubpriv-frontend-sgvpc-secure-maintenance-sg
    3. 在「IP 配置」對話框中,一切維持現狀,然後按 下一步
    4. 最後,按一下 儲存來檢閱所有項目並完成。
  6. 按一下建立虛擬伺服器實例

實例啟動並 執行之後,請選取前端 VSI vpc-pubpriv-frontend-vsi,捲動至 具有虛擬網路介面的網路連接,然後從 eth0 的三個點功能表中選取 編輯浮動 IP。 按一下 連接,然後 保留新的浮動 IP,並使用 vpc-pubpriv-frontend-vsi-ip 作為名稱。 使用 保留完成之後,您可能必須重新整理頁面以查看新連接的 IP。

設定前端與後端之間的連線功能

所有伺服器執行後,在本區段中,您將設定連線功能以容許前端和後端伺服器之間進行一般作業。

配置前端安全群組

前端實例已安裝其軟體,但由於配置而無法呼叫到它。

  1. 若要確認尚未能存取網路伺服器,請開啟指向 http://<floating-ip-address-of-the-frontend-vsi> 的網路瀏覽器或使用:

    curl -v -m 30 http://<floating-ip-address-of-the-frontend-vsi>
    

    此連線最終應該會逾時。

  2. 若要啟用與前端實例上安裝的 Web 伺服器的入埠連線,您需要開啟 Web 伺服器正在接聽的埠。

  3. 導覽至網路區段的安全群組,然後按一下 vpc-pubpriv-frontend-sg

  4. 按一下 規則 標籤,然後在 入埠規則 下按一下 建立。 新增下表中的規則,它們允許傳入 HTTP 請求和 Ping (ICMP)。.

    入埠規則
    通訊協定 來源類型 來源 說明
    TCP 全部 0.0.0.0/0 埠 80-80 此規則容許從任何 IP 位址到前端 Web 伺服器的連線。
    ICMP 全部 0.0.0.0/0 類型:8,Code:留空 此規則容許任何主機對前端伺服器執行 ping 作業。
  5. 接下來,新增出站規則。 後端的埠取決於要在虛擬伺服器上安裝的軟體。 本指導教學使用在埠 80 上接聽的 Web 伺服器。 如需值,請參閱下表 出埠規則

    出埠規則
    通訊協定 目的地類型 目的地 說明
    TCP 安全群組 vpc-pubpriv-backend-sg 埠 80-80 此規則容許前端伺服器與後端伺服器通訊。
  6. 再次存取前端實例 http://<floating-ip-address-of-the-frontend-vsi>,檢視網頁伺服器的歡迎頁面。

測試前端和後端之間的連線功能

後端伺服器執行的 Web 伺服器軟體與前端伺服器執行的相同。 可以將其視為是一個微服務,用於公開前端將呼叫的 HTTP 介面。 在此區段中,您將試圖從前端伺服器實例連接至後端。

  1. 虛擬伺服器實例 清單中,擷取 bastion 伺服器主機的浮動 IP 位址 ( vpc-secure-bastion ) 以及前端 ( vpc-pubpriv-frontend-vsi ) 和後端 ( vpc-pubpriv-backend-vsi ) 伺服器實體的私有 IP 位址。

  2. 使用 ssh 連接至前端虛擬伺服器:

    ssh -J root@<floating-ip-address-of-the-bastion-vsi> root@<private-ip-address-of-the-frontend-vsi>
    

    只有在 vpc-secure-maintenance-sg 已連接至前端實例時,才能透過 SSH 連接至前端系統。

  3. 呼叫後端 Web 伺服器:

    curl -v -m 30 http://<private-ip-address-of-the-backend-vsi>
    

    在 30 秒之後,通話應該會逾時。 實際上,後端伺服器的安全群組尚未配置,因此不容許任何入埠連線。

配置後端安全群組

若要容許與後端伺服器的入埠連線,您需要配置關聯的安全群組。

  1. 導覽至網路區段的安全群組,然後按一下 vpc-pubpriv-backend-sg

  2. 按一下 規則 標籤,然後在 入埠規則 下按一下 建立。 新增下列規則。

    入埠規則
    通訊協定 來源類型 來源 說明
    TCP 安全群組 vpc-pubpriv-frontend-sg 埠 80-80 此規則容許埠 80 上從前端伺服器到後端伺服器的送入連線。

確認連線功能

  1. 再次從前端伺服器呼叫後端 Web 伺服器:
    curl -v -m 30 http://<private-ip-address-of-the-backend-vsi>
    
  2. 要求會迅速從後端 Web 伺服器傳回並輸出訊息:I'm the backend server。 這將完成伺服器之間連線功能的配置。

完成維護

由於前端和後端伺服器軟體已正確安裝並執行,因此可以從維護安全群組移除這些伺服器。

  1. 導覽至網路區段的安全群組,然後按一下 vpc-secure-maintenance-sg
  2. 選取 連接的資源
  3. 按一下編輯介面,展開並取消勾選 vpc-pubpriv-frontend-vsivpc-pubpriv-backend-vsi 介面。
  4. 儲存配置。
  5. http://<floating-ip-address-of-the-frontend-vsi> 再次存取前端實例,以確認它仍能如預期般運作。

從維護群組移除伺服器後,就不能再使用 ssh 來存取這些伺服器。 這些伺服器只容許資料流量流至其 Web 伺服器。

在本指導教學中,您部署了兩個應用程式層級:一個前端伺服器(可藉由公用網際網路查看)和一個後端伺服器(只能由前端伺服器在 VPC 中進行存取)。 您配置了安全群組規則來確保只容許該應用程式所需的特定埠。

移除資源

  1. VPC Infrastructure 主控台中,按一下 Network(網路 )下的 Floating IPs(浮動 IP ),然後按一下 VSI 的 IP 位址,然後在動作功能表中選擇 Release(釋放)。 確認您想要釋放 IP 位址。
  2. 接下來,按一下個別動作功能表,以切換至 虛擬伺服器實例停止刪除 實例。
  3. VSI 消失之後,切換至子網路。 如果子網路有連接的公用閘道,則請按一下子網路名稱。 在子網路詳細資料中,分離公用閘道。 可以從概觀頁面刪除沒有公用閘道的子網路。 刪除您的子網路。
  4. 刪除子網路後,切換到 VPCs 索引標籤並刪除您的 VPC。

使用主控台時,您可能需要重新整理瀏覽器,才能在刪除資源之後看到更新的狀態資訊。