最近幫朋友案子,於 GCP 要部屬一些東西,有一些雷,怎麼解決的方式記錄下來,花了不少時間整理一下,以免下次又踩到 ...
存取 Google Cloud SQL 的 instance沒有靜態 IP 就挺難用
Cloud SQL 有分一/二代,若 vm instance 是動態 IP,要存取就必須在 instance 安裝 Cloud SQL Proxy 這個代理服務,連接方式就是對本機連接,這只能給第二代使用,但第二代不支援 myisam,偏偏咱們的應用還真的用上了,於是改用效能比較差的第一代的 Cloud SQL,發現 Cloud SQL Proxy 不能用在第一代上,那 ..... 只好配置靜態 IP 給 instance 了,而我另外幫公司設定 IPsec VPN 連上 Google Cloud VPN,也發現 Cloud SQL 沒辦法給透過 VPN 方式連上,所以若要遠端備份或遠端做 SLAVE 是不可能的,所以還是得回歸到 GCP 上面做,不然就要用 Google Cloud SDK 來做。
相比 AWS 則沒那麼麻煩,因為問題都在 Google Firewall 上面的樣子。
經常 ZONE 資源不足
這是我在 asia-east1-a 發生的,碰到好幾次了,建立 vm 或 cloud sql 皆會發生,是台灣地區的基礎建設不足嗎 ? asia-east1-c 似乎資源比較足。
有件事情我很不爽,因為當我建立 cloud sql 發生 zone 資源不足時,其實錯誤訊息或 log 都是寫未知的錯誤 .... 這叫誰怎麼研判發生甚麼事情了 ... 還好代理商有請我換區,不然我可能吐血身亡了。
Firewall 針對 Browser SSH 開放的問題
Google 對於存取 instance 提供了可由 GCP Console 以 browser ssh 方式連接,還挺方便的,預設的 Google Firewall 是 port 22 對 0.0.0.0/0 開放,那麼如果我只想開放特定 IP 及 browser ssh 連接呢 ?
由於 browser ssh 方式,是透過 Google 的 IP 代理,這一開始還真傷透腦筋了,因為 Google 會用動態 IP 存取,解決的方法是把 Google 的 IP 區段加進去,花了些時間才找到可能的區段,目前我是只允許 173.194.0.0/16 能存取,這是屬於 Google 的區段,事實上 Google 還有其他區段,以後還會不會變不知道,未來若發生問題可以藉由下指令
nslookup -q=TXT _netblocks.google.com 8.8.8.8
看看是否 IP 有異動。
Google HTTP/HTTPS 的負載平衡搭配 CloudFlare 抓不到真正 Client IP
CloudFlare 是一種反向代理網頁的服務,有用過的都知道,若要得到真正的 Client IP,是必須修改 apache/nginx 的設定才有辦法正確記錄到,當我使用了 Google 的負載平衡才發現,我怎麼老是抓不到真正 IP ?
原來 Google 的負載平衡並非通透的 ... 天啊,也就是說,Google 的負載平衡也跟 CloudFlare 一樣,還要再另外設定,以 nginx 來說,我加了以下設定和 cloudflare設定放一起才正常。
set_real_ip_from 130.211.0.0/22;
vm instacnce 無法透過 postfix 發信
這大概是最大的雷了,postfix 是永遠無法連線到任何 port 25/465/587 的伺服器的,因為 google 強制擋掉了,Google 的說明文件建議採用第三方服務的其他 port,例如 sendrid 或 mailgun 可以用 2525 port。
這 .... 有點圖利第三方啊 哈哈,那不然就只能自己在外頭多架一台 smtp server 才能解決。
以後遇到其他雷再紀錄之,跟 AWS 相比,Google 確實很大程度還跟不上,但對於台灣的好處大概是,價格和地區(台灣有機房)。