GCP – Server無外部IP服務架構

這個架構其實是當初在AWS上實做出來的

我早期的部落格文章有提到,這邊就不多描述了

 

主要是現在GCP新增加了一個Cloud NAT的功能

可以讓理想中,不需要有對外IP的Server可以連接網際網路進行必要更新或版更

大致流程如下

如果沒有VPN tunnel 由辦公室建立內部網路連線

則多建立一台jumper server

建立兩台web server

由jumper server 走內部IP ssh 至兩台web (ssh go key 我就不多說了)

通了之後,建立一個 Cloud NAT

這時候沒有外部IP的兩台web server即可安裝nginx等套件

接著建立個負載平衡

掛上這兩台web

然後記得開個防火牆 80 port

收工

應用面上來說,只會暴露出負載平衡的IP

其餘全部的server沒有所謂的外部IP,沒有IP就沒有資安疑慮,完美!

 

GCP可以玩的花樣又更進一步了!

GCP – AI自動學習的後果可以多嚴重?

2018/07/4 更新

Google已道歉,並承諾改進

https://www.ithome.com.tw/news/124304

 

2018/07/3 更新

已上 ITHome 新聞

https://www.ithome.com.tw/news/124255

 

今天在GCP社群上看到轉貼一篇國外的文章

從後端社群上轉來的,關於Google AI判斷GCP用戶行為的後果

先不管消息目前的可信度,因為Reddit上連造假論都出來了…

這個事件先不管最後如何?實際可信度如何?

如果這個事件是真的

那GCP真的是給我三觀帶來無限的驚喜

相關圖片

「師爺給我翻譯翻譯」的圖片搜尋結果

「師爺給我翻譯翻譯」的圖片搜尋結果

你的專案會被關掉

只要Google的AI認為你的專案活動有異常

「大哥 這個是驚喜阿」的圖片搜尋結果

而且這個驚喜,Goolge不會通知你

社群上的文章如下

犯罪都還需要通知你出庭,讓法官判

 

沒通知就直接關

苦主的公司賠慘了

不多說了,原文連結在此

請各位看官自己評斷

畢竟我們不是當事者

中間過程發生甚麼我也不清楚

但沒有通知真的是有點….

也許AI不會通知吧XD

 

我真心希望GCP改掉任何以”技術主導“為主的服務核心

希望回到以”使用者需求“為主的服務價值

雖然AWS在很多時候也好不到哪

但是在對客戶的服務上,我是認為沒有話說

老是請使用者改掉,配合GCP的架構實作?真的沒人可以接受啦

 

看看對岸的討論文章 點我

如果一個人評論這個平台服務不好,應該是偏見

如果幾個人評論這個平台服務不好,也許是意見

如果多數人評論這個平台服務不好,那還需要說?

我相信一個有野心的雲平台是可以被質疑的,否則哪來的成長?

 

還是希望GCP可以越來越好,畢竟使用者不希望自己的平台

三天兩頭出狀況,誰都不想看到XD

 

慎選雲端平台的重要性-GCP Cloud SQL

最近用了GCP也十個月了

一位AWS SA跟我說,希望我再分享一些經驗讓他笑笑

其實對我來說,還真的是哭笑不得

之前曾抱怨過GCP Cloud SQL在HA與MA的不良設計

現在再來說說其他的

正常在使用MySQL的時候,大多數時候都會依照一些經驗去調整參數

而之前在使用AWS RDS的時候也是如此

那問題來了

在Cloud SQL 上,能讓您調整的只有這些

https://cloud.google.com/sql/docs/mysql/flags

那我們來看看AWS RDS有哪些?

網址太長我縮掉了

經歷了十個月多來的使用

以及與偉大的GCP業務端或SA端討論的結果

Cloud SQL 的開發團隊,不認為這有問題

(之前在HA與MA的狀況上,也是給我這一句話)

然後接下來的情況是

我們在不調效參數的情況下

Cloud SQL 會頻繁發生重啟

試問哪個公司的產品可以容許“資料庫不定時重啟“?

如果有,Cloud SQL絕對很適合你們,包你重開到high起來

我們正在嘗試解決的方式,自己使用GCE建置MySQL

原因很簡單,沒有其他解法了

GCP並不像RDS那樣還有其他MySQL資料庫選擇(MariaDB,Aurora)

所以嚴格來說,Cloud SQL是一個非常不成熟的資料庫產品

我們目前驗證到現在

Cloud SQL的預設參數調效,除了連線數設置為4000以外

其餘設定皆與在Linux Server 上安裝MySQL 預設設定一模一樣

講白話一點就是,他說有幫你做最佳調校,但實際上沒有

我們是撈資料庫參數出來看的,一比對就知道

這時候想起業務講過的話

Cloud SQL 就好像一台傻瓜相機,不適合你們進階玩家使用

那各位進階玩家們,這牌子的相機不好用,那下一步各位自己評估吧

 

另外我想澄清一點,Cloud SQL不是不能用

普通用途可以,重要性很高的話,還是不要考慮

請參考我前面跟Cloud SQL相關的文章再自行評估

不能調效、HA與MA不適用,我想不出他剩下的優點在哪了?

可能只有代管、備份這件事了…

GCP – 防火牆規則設定

剛好有朋友問了這個問題

所以就寫一篇文章簡單講一下

GCP的防火牆設定與AWS的 Security Group 類似,但又有些不同

首先你先開一個你需要的規則

設定名稱,給一個標記,這裡取名tmp

給要允許的iP,port

如下圖

然後去GCE,編輯你需要給這個規則的機器

貼上剛剛設定的標記

如下圖

這樣子就生效了

不過我還是覺得AWS的比較好用,因為GCP的話 SQL還要另外設定

AWS是全部都可以吃同一組規則,不論內外網,與全部的Service

GCP都要分開設,標記對標記的話,也只吃內網規則,不好用就是了

GCP – Cloud SQL 所謂的HA&MA

2018/06  更新

GCP修改了 Cloud SQL的HA機制說明

連結點我

主要就是多了一項

Master 60秒沒有回應時,將會啟動 Failover

總算是有達到基本的要求了,期待可以越來越完善

 

—————————–以下為原文—————————–

其實這篇算是發牢騷,一個簡單的抱怨

希望GCP能快點修改這種不成熟的HA

以往在AWS RDS上的HA機制是

當Master fail,背後的HA Server 會Switch上去

而GCP SQL 上的HA機制是

當Master fail,另一台HA Server 會跟你講

不會觸發,是的你沒看錯,HA Server不會甩你

然後官方文件跟你說觸發條件是

Failover is triggered when the zone where the master is located experiences an outage. If your master instance is experiencing issues not caused by a zone outage, a failover is not initiated.

不想貼google翻譯的話,小弟幫各位翻譯

如果你的Master在A區,Failover在B區,要A區掰掰了才會觸發

如果是A區你的Master掛了,請自求多福,看著B區那台Failover在笑你…

 

好吧,這就是問題,目前GCP給的回覆是無解,但會排入更新時程

請有使用SQL的朋友多保重…

 

另一個MA問題是,如果你的Master設定為 假設週一07:00-08:00 維護

你開了Failover與readonly的時候,你會發現這三台的MA Time

全部被鎖定跟Master相同

翻成白話文的意思,就是MA Time一到,你的DB全部會被重啟

搭配上述的HA機制….你應該保佑你公司的服務不是7*24小時…

或是程式端最好寫好一點…

三經半夜設定MA Time的,自求多福吧

 

 

GCP – Stackdriver Logging 解決無法收集log問題

這兩天卡了一個問題

Stackdriver Logging的功能在Basic版本上也是可以使用的

但因為後來發現舊LOG檔案太大

中間停止收集

然後清空,再重新啟動時發現

LOG的收集停止了

 

這時去確認agent的設定檔

找 pos_file的路徑

vi 這個設定檔,會看到目前取得的資料值

把這一行清空,再將agent重啟

LOG的收集就恢復正常了

本來以為是直接爬LOG連續的爬

沒想到還有存進度的值….

 



 

GCP – 費用計算機

在AWS上有很方便的計算成本工具

相對的在GCP也有這樣子的工具

https://cloud.google.com/products/calculator/

使用方式有點與AWS不同

但還是大同小異,有需要的可以使用一下計算成本

再評估是否要使用GCP喔

GCP – 使用Image開機自動替換Hostname

這個問題在AWS上遇過,但是AWS即使使用AMI啟動

也是會替換成IP開頭的hostname

而在GCP上則是會沿用上一次壓成的Image

例如我原本使用 web-01的hostname 壓成Image

在使用這個Image啟動後的server還會是web-01

造成做一個就要連線修改一次

 

這時拿出AWS的經驗,先找出如何呼叫instance的metadata

 

再使用腳本替換掉,寫了一隻shell
#!/bin/bash

name=`curl “http://metadata.google.internal/computeMetadata/v1/instance/name” -H “Metadata-Flavor: Google”`

hostnamectl set-hostname $name

systemctl restart rsyslog.service

再啟動instance時,在開機啟動碼中填入即可

如果有其他的指令需要開機啟動,可以寫成一隻boot.sh

在壓成image時放入,然後再啟動instance時

一樣使用開機啟動碼去執行

例如,開機替換hostname並拉取web 的設定檔等指令

 

我寫完shell之後搭配變數使用,可以下 web 就拉取web設定檔

設定 ap 就拉取 ap設定檔等

減少手動部署時間

 

GCP – Server 加入HTTP 負載平衡

前陣子在修改架構時,要將目前的架構加入HA的概念

所以負載平衡是少不了的,但看了一下教學

都是從頭開始做的,現有的Server要加入有點麻煩

所以自己嘗試了一下,順手就寫一下文章

 

首先在需要加入的Server中,點選新建個體群組

修改名稱,其餘設定不變,在port的命名跟port號填上需要設定的

注意,如果server有分兩個az,則兩台的個體群組需要分開設定

如asia-a有web-01 但 asia-b 有web-02 ,則要設定兩組

預設的個體就會直接被套用進去,之後按建立即可

兩個個體群組都建立完成後

選擇網路服務->負載平衡

選擇HTTP(S)負載平衡,這裡有地方需要注意,如果對外服務port不是80、8080的話,只能使用TCP負載平衡,如8443這種port

名稱設定打上自己需要設定的,之後設定後端server群組,建立後端服務

如果是靜態服務的項目,如圖片檔,可以直接指向Bucket(Cloud Storage)

port不用設定,如果在設定個體群組有設定的時候,選擇個體群組就會跳出顯示

可以直接套用進去

設定可以使用CPU負載或是連線的要求數量去決定,這裡先用預設

之後新增健康檢查

這裡需要注意FW規則需要加入google檢查的IP網段

130.211.0.0/22,35.191.0.0/16 否則會永遠偵測不到存活,因為連不到

預設先用http 80 去get /

這裡有一個問題,如果你的地區有3個az,連續檢查兩次存活的話

那每次監測就是3*2=6次get,如果有一些防禦機制的話要留意

接著主機與路徑規劃不需特別設定,除非有不同的PATH要導向不同的個體群組

如 /web 給後端web群組  /member 給後端會員群組 這樣

 

接著設定前端,IP通常是設定一組,不是設定臨時

PORT只有80、8080可以選

完成後點選建立

就創建好了 

 

GCP – FW規則CLI指令

最近新工作都是使用GCP在環境的建置上

由於摸熟了AWS的規則,切換過來發現GCP的不同

為了快速的新增這些設定,CLI的指令就比較好用

然後一行一行塞又覺得很慢,所以寫偷懶的shell

在專案內啟用google cloud shell

會出現一個shell的視窗

這時就可以執行CLI指令了,但一行一行下太麻煩

所以我用shell的方式執行

vi fw.sh

塞了兩行,如果需要大量產生FW規則的話

就以此類推,例如

#!/bin/bash

a=123.123.123.123
b=111.111.0.0/16
c=111.222.111.111
d=222.222.222.222

 

#設定aIP可以連接
#gcloud compute firewall-rules create allow-proxy-to-b –allow tcp:8080,tcp:8443 –source-ranges=$a –target-tags=allow-a

#開放snmp給c監控
gcloud compute firewall-rules create allow-snmp –allow udp:161 –source-ranges=$c

#開放健康檢查使用
gcloud compute firewall-rules create allow-ha-check –allow all –source-ranges=$b

#開放公司內部IP
gcloud compute firewall-rules create allow-office –allow all –source-ranges=$d –target-tags=office

之後離開

chmod +x fw.sh

sh fw.sh

就可以快速塞FW規則進GCP專案了

© 2018 Kila's IT Home

Theme by Anders NorénUp ↑