跳到主要內容

GCE Create N-Tier Network Environment

傳統的實體資料中心中,一般會把網路切分成:DMZ層、AP層、DB層等等,目的是讓每一層區域之間,透過Firewall來保護不從曾主機的安全性,而Google Cloud Platform在Compute Engine的網路運作上,則是透過定義Network與Firewall及Router幾個元素來彈性定義網路架構,搭配TAG的應用切分不同的主機網路區段。之後主機只要使用不同的Tag設定,就可以快速定義可連線的區段。下面描述一下實際執行的做法...

N-Tier描述
此範例實做簡單的三個區段,如果需要再往下切分,可以延續此概念再往下切割...
  • admin: 建立允許外部SSH進入或建制VPN Gateway服務的網段,作為管理之用
  • frontend: 第一線服務伺服器,通常為DMZ區段,作為提供用戶服務的連線功能,一般為Web Server所在位置,在此我們建制Web Server,需要開放80 port
  • db: 後端資料儲存區,通常為資料庫或是檔案伺服器所在位置,在此我們建制couchdb,需要開放5984 port


Network Tier Setup


建立network:
首先我們先建立屬於這個服務的網段(my-network),給定一個C class(192.168.10.0/24),並指定192.168.10.1作為Gateway... 這裡的網段設定是屬於內部的私有網段,也就是會實際attach在主機之上的ip位置

$ gcutil --service_version="v1" --project="my-project" addnetwork "my-network" --range="192.168.10.0/24" --gateway="192.168.10.1"

建立admin zone:允許外部SSH連入+SSH連進內部frontend, db網段,作為管理之用

$ gcutil addfirewall --allowed_ip_sources=0.0.0.0/0 --target_tags=admin --network=my-network --allowed=tcp:22 myfw-admin-ssh
$ gcutil addfirewall --allowed_tag_sources=admin --target_tags=frontend,db --network=my-network --allowed=tcp:22 myfw-admin-rules

建立frontend zone:允許外部使用80, 443 port連入Web Server,以提供外部使用者連線

$ gcutil addfirewall --allowed_tag_sources=frontend --network=my-network --allowed=tcp:80,tcp:443 myfw-service-port

建立db zone:供建制Database Server,僅將資料連線port提供給frontend連線使用

$ gcutil addfirewall --allowed_tag_sources=frontend --target_tags=db --network=my-network --allowed=tcp:5984 myfw-couchdb-port  


建制服務主機

上面網路環境ready之後,就可以開始開立主機了,開立主機的部分,可以使用Web Console來開立主機(其中,Tags部分記得要指定主機所在區域的tag名稱,相關的網路設定才會直接套用)


除了Web Console界面之外,開主機也可透過下面的指令來開啟:

建立Admin Machine:設定tag為admin,讓該主機擁有連限至個網段的能力,方便開發與管理人員連線操作使用。

gcutil --service_version="v1" \
  --project="my-project" addinstance "my-gateway" \
  --tags="admin" --zone="us-central1-b" --machine_type="g1-small" \
  --network="my-network" --external_ip_address="ephemeral" \
  --service_account_scopes="https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/devstorage.full_control" \
  --can_ip_forward="true" \
  --image="https://www.googleapis.com/compute/v1/projects/foodsformulas-cloud-project/global/images/centos6-with-nodejs" \
  --persistent_boot_disk="true"

建立Web Server Machine:前端Web主機,可以視需求安裝相關的Web Server,需要的話,也可以套用Start Script做自動化部署。

$ gcutil --service_version="v1" \
  --project="my-project" addinstance "my-web-01" \
  --tags="frontend" --zone="us-central1-b" --machine_type="n1-standard-1" \
  --network="my-network" --external_ip_address="ephemeral" \
  --can_ip_forward="true" \
  --image="https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-6-v20131120" \
  --persistent_boot_disk="true"

建立Database Machine:後端DB server,在此使用Debian的CouchDB套件,並搭配Start Script做自動化安裝

$ cat -> install-couchdb.sh << EOF
sudo apt-get update -y 
sudo apt-get install gcc openssl couchdb -y
EOF
$ gcutil --service_version="v1" \
  --project="my-project" addinstance "my-couchdb-01" \
  --tags="db" --zone="us-central1-b" --machine_type="n1-highmem-2" \
  --network="my-network" --external_ip_address="ephemeral" \
  --can_ip_forward="true" \
  --image="https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-6-v20131120" \
  --persistent_boot_disk="true"
  --metadata_from_file=startup-script:install-couchdb.sh 

結論

上面操作可以建制一個基本的N-Tier架構,加上一個管理網段,當然,管理網段的主機並非一定要隨時存在,以安全性考量,該網段主機可以在需要的時候生成即可。除了Network與Firewall部分的設定,如果需要實作VPN區段供VPN連線,另外需要加設定Router來收容VPN服務所新增加的網段。

另外,以服務整體考量,可以加上GCE的Layer 4 Load Balancer作為前端服務的入口,讓服務更加完整!

留言

這個網誌中的熱門文章

透過Google Apps Script結合Google Form做即時郵件通知

體驗過Google Apps Script的功能後,也發現他結合GmailApps的模組 GmailApps的應用可以用在表單填寫完成後,做發信的通知 例如您開立了一個訂購的表單,為了要在第一時間通知商家有訂單進入 就可以直接呼叫Gmail做發信的通知,讓手持Smart Phone的我們可以很快的知道生意上門了! 下面規劃三個function,其中: onCommit():為form commit時候觸發的function,需要掛載於form commit trigger上 jsonArrToTable():目的將json array解析成為一個Table getLastRowTable():目的將整個table的回傳過濾為剩下第一筆(表頭,含有Form的欄位說明)與最後一筆(原則上就是剛剛送出的那一筆表單) 完整程式碼如下: function onCommit(){   var sheet = SpreadsheetApp.getActiveSheet();   var rows = sheet.getDataRange();   var numRows = rows.getNumRows();   var values = rows.getValues();   var content = getLastRowTable(values);   var htmlBody = "Hi Admin: <br/><br/>有訂單拉,檢查一下吧! <br/><br/>" + content + '<br/><br/>Send by Google Apps';   GmailApp.sendEmail(     " your-email-address@gmail.com ",      "Order Confirm Notice",      htmlBody,      {from: ' from-email-...

Share a chrome plugin for manage google cloud platform

好玩意兒報報.... 同事的新作,把Google Project List在Chrome Plugin中! 對一次管理多個專案的人來說,真得超方便的拉! 下載: https://chrome.google.com/webstore/detail/gdclauncher/bicgkglnnilldakpenngnblekooejnpg 使用說明: 1. Use browser url bar to quick search: Type "gdcl" in browser Press "TAB" to start search Type the project id key word then select the search result... 2. Using quick launch bar... You can search by keyword or click project name to go to the project or gae link to go to gae or go to billing page....

Cloud Monitor嚐鮮

GCP上,我們非常想要的一個功能,終於問世.... Cloud Monitor來了!