現在工作的公司算是台灣分部,一開始在跟總部的 SRE 討論技術的時候,有討論到目前 CloudRun SSR 的應用是有 CloudNAT + 外網。他們有建議我使用 Serverless VPC Access Connector ,但在 Console 上操作時,發現多了一個功能是 Direct VPC egress。之前在學 AWS 時有學到 AWS PrivateLink for S3,簡單描述就是你可以走內網跟 S3 溝通。所以依稀就覺得 Cloud 商一定都會陸續提供解決辦法。當下第六感就覺得這可能是更好的解法。稍微研究一下 Access Connector vs direct access,會發現因為 Access Connector 他背後是起了一台 VM 當作 proxy,這會造成成本增加,而且這台 VM 是管不到且看不到的!所以改採用 Direct VPC egress
比較參考:https://cloud.google.com/run/docs/configuring/connecting-vpc
由於我的目標是讓設定都 IaC 化,所以在 Terraform 上的設定也要相應調整,沒想到 GCP 官方的 Terraform Cloud Run 舊版 module 上還沒有提供 direct access 的設定,所以改成用 v2 版本
module "cloud_run_frontend" {
source = "GoogleCloudPlatform/cloud-run/google//modules/v2"c
v2 版本中,可以使用 vpc_access 來設定
vpc_access = {
network_interfaces = {
network = "platform-staging"
subnetwork = "platform-staging"
}
egress = "ALL_TRAFFIC"
}
關於 v2 版本,參考:https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#ingress
因為轉到 V2 版本包含 annotations 都要改掉,所以連帶設定都要做調整
# V1
service_annotations = {
"run.googleapis.com/ingress" = "internal-and-cloud-load-balancing"
}
# V2
ingress = "INGRESS_TRAFFIC_INTERNAL_LOAD_BALANCER"