文章目錄
GCE 透過 Cloud VPN mount 不同 VPC networks 中的 Filestore
目前團隊 production 上 GKE 資料都是儲存在 Filestore 上,最近有計劃使用儲存在 Filestore 的 log 內容來做後續處理,大致概念是將 log 集中至某一台 server (預計會使用 GCE VM)上,再由 GCE 上的 application 來處理 log
概念上很簡單,就是將多個 Filestore mount 到同一個 GCE,但因為 Filestore 是依 VPC 切分開的資源,所以實作上就比想像中複雜不少,我試了 2-3 天才成功,趕緊來紀錄一下設定方式,不然怕是過幾天就忘了XD
基本環境說明
GCE
Debian 4.19.235-1 (2022-03-17) x86_64
Cloud VPN
Cloud Router
Filestore
前置作業
建立兩個模擬用 VPC
使用
vpc-1
與vpc-2
為例vpc-1
gcloud compute networks create vpc-1 --project={project_id} --subnet-mode=custom --mtu=1460 --bgp-routing-mode=global && gcloud compute networks subnets create vpc-1 --project={project_id} --range=10.51.0.0/16 --network=vpc-1 --region=asia-east1 && gcloud compute firewall-rules create vpc-1-allow-icmp --project={project_id} --network=projects/{project_id}/global/networks/vpc-1 --description=Allows\ ICMP\ connections\ from\ any\ source\ to\ any\ instance\ on\ the\ network. --direction=INGRESS --priority=65534 --source-ranges=0.0.0.0/0 --action=ALLOW --rules=icmp && gcloud compute firewall-rules create vpc-1-allow-ssh --project={project_id} --network=projects/{project_id}/global/networks/vpc-1 --description=Allows\ TCP\ connections\ from\ any\ source\ to\ any\ instance\ on\ the\ network\ using\ port\ 22. --direction=INGRESS --priority=65534 --source-ranges=0.0.0.0/0 --action=ALLOW --rules=tcp:22
vpc-2
gcloud compute networks create vpc-2 --project={project_id} --subnet-mode=custom --mtu=1460 --bgp-routing-mode=global && gcloud compute networks subnets create vpc-2 --project={project_id} --range=10.52.0.0/16 --network=vpc-2 --region=asia-east1 && gcloud compute firewall-rules create vpc-2-allow-icmp --project={project_id} --network=projects/{project_id}/global/networks/vpc-2 --description=Allows\ ICMP\ connections\ from\ any\ source\ to\ any\ instance\ on\ the\ network. --direction=INGRESS --priority=65534 --source-ranges=0.0.0.0/0 --action=ALLOW --rules=icmp && gcloud compute firewall-rules create vpc-2-allow-ssh --project={project_id} --network=projects/{project_id}/global/networks/vpc-2 --description=Allows\ TCP\ connections\ from\ any\ source\ to\ any\ instance\ on\ the\ network\ using\ port\ 22. --direction=INGRESS --priority=65534 --source-ranges=0.0.0.0/0 --action=ALLOW --rules=tcp:22
建立兩個 Filestore instance
- 分屬於兩個 VPC:
test-filestore-1
在vpc-1
test-filestore-2
在vpc-2
- 這個部份 ui 上沒有提供 gcloud shell 建議語法,就不附了
- 分屬於兩個 VPC:
建立一個 GCE VM 並安裝 NFS
建立 GCE:以
test-filestore-gce-1
為例gcloud compute instances create test-filestore-gce-1 --project={project_id} --zone=asia-east1-a --machine-type=e2-medium --network-interface=network-tier=PREMIUM,subnet=vpc-1 --maintenance-policy=MIGRATE --service-account={service_account} --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --tags=tmp-ssh --create-disk=auto-delete=yes,boot=yes,device-name=test-filestore-gce-1,image=projects/debian-cloud/global/images/debian-10-buster-v20220406,mode=rw,size=10,type=projects/{project_id}/zones/us-central1-a/diskTypes/pd-balanced --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any
GCE instance 上安裝 NFS
sudo apt -y update && sudo apt install -y nfs-common
可以 mount 相同 VPC 下的 Filestore,但不同 VPC 的 Filestore 無法成功(出現
mount.nfs: Connection timed out
)sudo mount {filestore_ip}:/{file_share_name} {local path}
設定方式
建立 Cloud Router
建立兩個 Cloud Router:
test-filestore-router-1
test-filestore-router-2
一個 VPC 就建立一個 Cloud Router
test-filestore-router-1
建立在vpc-1
test-filestore-router-2
建立在vpc-2
每個 Cloud Router 的 Google ASN 都需要不同
test-filestore-router-1
使用65001
test-filestore-router-2
使用65002
需要設定使用 custom rules 並將 Filestore 的 ip range 進行通告
否則一樣會出現
mount.nfs: Connection timed out
需要將所有 subnet 對 Cloud Router 通告
我不知道為什麼需要,但不設定 mount filestore 時會失敗 (會出現
mount.nfs: Connection timed out
)gcloud 語法
test-filestore-router-1
gcloud compute routers create test-filestore-router-1 --project={project_id} --region=asia-east1 --network=vpc-1 --asn=65001 --set-advertisement-mode=custom --set-advertisement-groups=all_subnets --set-advertisement-ranges=10.104.214.56/29
test-filestore-router-2
gcloud compute routers create test-filestore-router-2 --project={project_id} --region=asia-east1 --network=vpc-2 --asn=65002 --set-advertisement-mode=custom --set-advertisement-groups=all_subnets --set-advertisement-ranges=10.44.216.48/29
建立 HA Cloud VPN Gateway
分別在兩個 VPC 上各建立一個 VPN Gateway:
test-filestore-gateway-1
建立在vpc-1
中test-filestore-gateway-2
建立在vpc-2
中
在 Cloud VPN Gateway 中新增 VPN Tunnel
兩個 Cloud VPN Gateway 都要分別設定一次,一個 Cloud VPN Gateway 有兩條 VPN Tunnel 共會建立
四條
VPN Tunnel選擇目標
Google Cloud Project
,VPN Gateway
與Create a pair of VPN tunnels
選擇
Cloud Router
並設定 VPN tunnel這邊需要與目標 VPC 的 VPN tunnel 做成對設定
- peer VPN Gateway 選擇目標正確會自動將本身 Gateway 的 interface 與目標 Gateway interface 做關聯
選擇 IKE version 為
IKEv1
並設定 IKE pre-shared keyIKE pre-shared key
需要與目標 VPN tunnel 相同 (其中一邊產生即可)
以下透過不同顏色的框線來呈現成對設定的部份
tunnel1
tunnel2
設定 VPN Tunnel 的 BGP session
每個 VPN Tunnel 有各自的 BGP session,所以需要設定
四個
BGP session- BGP session 需要成對設定
Peer ASN
填目標 Cloud Router 的值Cloud Router BGP IP
:這個值與目標 VPN Tunnel 的 BGP session 的BGP peer IP
相同- 需要使用 link-local ip (我不知道是什麼)
- 兩個 tunnel 的 ip 區段要切開
BGP peer IP
:這個值與目標 VPN Tunnel 的 BGP session 的Cloud Router BGP IP
相同
以下透過不同顏色的框線來呈現成對設定的部份
tunnel1 bgp
tunnel2 bgp
實際效果
心得
看著 GCP:Mounting file shares on remote clients 實在不知道需要設定哪些東西,順著相關連結深入,又覺得很容易迷失,我自己的感覺是相關連結應該是為了模組化說明文件而建立的,所以不一定全然符合 Cloud Filestore 的設定需求,所以是參考 Youtube:GCP | Google Cloud VPN | GCP to GCP HA VPN using BGP dynamic routing | Google Cloud HA VPN DEMO 影片才將 Cloud HA VPN 設定完成,但還不夠,最後找到 GCP:Cloud Filestore Known issues - Mounting over VPN 才設定成功,可能是這個需要沒有很普遍,或是我關鍵字下得不對,感覺資料不是很好找
另外雖然設定成功,但過程中用到很多東西 (e.g. BGP session
,Advertise all subnets visible to the Cloud Router
….) 還是不清楚用途跟實際定義,感覺用起來很虛
先紀錄一下,待後續有機會再深入研究 (據之前經驗,現在花時間研究,經常因為功能迭代速度過快而失去作用,與其浪費時間,倒不如等遇到問題再來看)
參考資訊
- GCP:Mounting file shares on Compute Engine clients
- GCP:Mounting file shares on remote clients
- Youtube:GCP | Google Cloud VPN | GCP to GCP HA VPN using BGP dynamic routing | Google Cloud HA VPN DEMO
- GCP:Cloud VPN Pricing
- GCP:Create an HA VPN gateway between Google Cloud networks
- GCP:Cloud Filestore Known issues - Mounting over VPN
文章作者 Yowko Tsai
上次更新 2022-04-25
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。