使用混合式連線網路端點群組設定網路邊緣服務
Google 提供各種網路邊緣服務,可提升 Google Cloud外部服務 (地端部署和多雲服務) 的功能和安全性,例如地端部署資料中心或其他公有雲。
這些網路邊緣服務可讓您執行下列操作:
使用單一任播 VIP 接受並在全球範圍內轉送外部客戶流量。
使用外部應用程式負載平衡器和 Google 代管的 SSL 憑證,在邊緣終止 TLS 流量,減少伺服器負載。
啟用預先設定的網路應用程式防火牆 (WAF) 規則,並透過 Google Cloud Armor 將允許清單和拒絕清單套用至傳入流量。
使用 Identity-Aware Proxy (IAP) 控制使用者對應用程式和資源的存取權。
使用 Cloud CDN 改善內容傳遞作業,並縮短使用者延遲。
如要為私有、內部部署或多雲服務提供這些優點,請部署外部應用程式負載平衡器,接收來自公用網際網路的流量。外部應用程式負載平衡器會將流量轉送至 Cloud Service Mesh 設定的中間 Proxy。這個中間 Proxy 會使用 Cloud VPN 或 Cloud Interconnect,將流量路由至內部部署環境或非Google Cloud 環境。
本教學課程將逐步說明端對端範例,該範例使用 Google 邊緣的 Cloud Armor,選擇性地允許用戶端私下存取內部部署服務。系統會根據用戶端的 IP 位址授予存取權。
您將完成下列工作:
- 在代管執行個體群組 (MIG) 中,將 Envoy 部署為中間 Proxy。這個 Envoy 代理程式會自動連線至 Cloud Service Mesh。
- 建立模擬的私有本機虛擬機器 (VM) 執行個體。在實際範例中,您可能已經有內部部署 VM。
- 設定 Cloud Service Mesh,將所有抵達中間 Proxy 的要求,轉送至模擬的內部部署 VM。
- 建立外部應用程式負載平衡器,接收來自公用網際網路的流量,並轉送至中間 Proxy。
- 將 Cloud Armor 安全性政策附加至外部應用程式負載平衡器。
完成這些工作後,您可以選擇探索其他邊緣服務和進階流量管理功能。
必要條件
設定中繼 Proxy 前,請先完成下列工作:
請參閱「準備透過 Envoy 設定 Cloud Service Mesh」,完成所有必要工作,包括授予必要權限和角色,以及啟用 Cloud Service Mesh API。
請確保可透過 Cloud VPN 或 Cloud Interconnect,從 Google Cloud 虛擬私有雲 (VPC) 網路存取私人內部部署端點。本教學課程使用的範例只會將流量導向 Google Cloud內的端點,因此您不需要設定混合式連線,也能順利完成教學課程。在實際部署情境中,您需要設定混合式連線。
請確認 VPC 子網路 CIDR 範圍與遠端 CIDR 範圍沒有衝突。如果 IP 位址重疊,系統會優先處理子網路路徑,而非遠端連線。
在本示範中,請取得建立及更新 Cloud Armor 安全性政策的必要權限。如要使用其他服務 (例如 Cloud CDN),權限可能會有所不同。
在 Compute Engine VM 上部署中間 Proxy
本節說明如何在 Compute Engine 上部署 Envoy 做為中間 Proxy,接收來自外部負載平衡器的流量,並將流量轉送至遠端目的地。
為中間 Proxy 建立執行個體範本
執行個體範本會指定代管執行個體群組 (MIG) 中 VM 的設定。
使用下列範本建立 VM 執行個體,並將 Envoy 代理程式連線至 Cloud Service Mesh:
gcloud compute instance-templates create td-middle-proxy \ --service-proxy=enabled \ --tags=allow-hc
如要自訂 Envoy 部署作業,例如指定網路名稱、設定記錄路徑或啟用追蹤功能,請參閱自動化 Envoy 部署選項指南。
為中間 Proxy 建立 MIG
依據範本建立 MIG。在本範例中,您可以將執行個體群組大小設為 1,部署單一執行個體。如要用於實際工作環境,請啟用自動調度資源功能 (例如根據 CPU 使用率),以免中介 Proxy 需要處理大量流量時造成瓶頸。
gcloud compute instance-groups managed create td-middle-proxy-us-central1-a \ --zone=us-central1-a \ --template=td-middle-proxy \ --size=1
如要進行日後的設定和驗證,請在
MIDDLE_PROXY_IP
中找出並儲存執行個體的內部 IP 位址:MIDDLE_PROXY_IP=$(gcloud compute instances list \ --filter="name~'td-middle-proxy-us-central1-a-.*'" \ --zones=us-central1-a \ --format="value(networkInterfaces.networkIP)")
在本範例中,我們會在 us-central1-a
中建立包含執行 Envoy 的 VM 執行個體的 MIG。在本教學課程稍後,您將建立外部負載平衡器,處理來自用戶端的公開網際網路流量。
由於外部負載平衡器可自動將流量導向至最靠近用戶端的地區,以及該地區內的 MIG,因此建議您建立多個 MIG。如需 Google Cloud's 可用地區和區域的完整清單,請參閱地區和區域。
部署模擬的地端部署服務
本節說明如何部署混合式連線網路端點群組 (NEG)。在實際部署作業中,這個 NEG 會包含解析為內部部署伺服器的端點 (IP:port
)。在本例中,您會建立可透過 IP:port
連線的 Compute Engine VM。這個 VM 會做為模擬的內部部署伺服器。
建立模擬的內部部署 VM
部署單一 VM 執行個體,模擬私有內部部署伺服器:
gcloud compute instances create on-prem-vm \ --zone=us-central1-a \ --metadata startup-script='#! /bin/bash ## Installs apache and a custom homepage sudo su - apt-get update apt-get install -y apache2 cat <<EOF > /var/www/html/index.html <html><body><h1>Hello world from on-premises!</h1></body></html> EOF'
找出並儲存內部 IP 位址,以供日後設定和驗證。這部 VM 上的伺服器會監聽通訊埠
80
的連入要求:ON_PREM_IP=$(gcloud compute instances describe on-prem-vm \ --zone=us-central1-a \ --format="value(networkInterfaces.networkIP)" | sed "s/['\[\]]*//g")
建立 NEG
指定non-gcp-private-ip-port
網路端點類型,為這個示範設定建立 NEG。將模擬內部部署 VM 的 IP 位址和通訊埠新增至這個 NEG 做為端點。延續上一個步驟,IP 位址會儲存在 ON_PREM_IP
環境變數中。
建立 NEG:
gcloud compute network-endpoint-groups create td-on-prem-neg \ --network-endpoint-type=non-gcp-private-ip-port \ --zone=us-central1-a
將
IP:port
新增至新的 NEG:gcloud compute network-endpoint-groups update td-on-prem-neg \ --zone=us-central1-a \ --add-endpoint="ip=$ON_PREM_IP,port=80"
使用 Cloud Load Balancing 元件設定 Cloud Service Mesh
本節說明如何設定 Cloud Service Mesh,並啟用中介 Proxy,將流量轉送至私有內部部署服務。您將設定下列元件:
健康狀態檢查。這項健康狀態檢查的運作方式,與為其他 NEG 類型設定的健康狀態檢查略有不同。
後端服務。詳情請參閱「後端服務總覽」。
轉送規則對應關係。這個步驟包括建立轉送規則、目標 Proxy 和網址對應。詳情請參閱路徑規則對應。
建立健康狀態檢查
健康狀態檢查會確認端點狀態良好,且能夠接收要求。這類 NEG 的健康狀態檢查依賴 Envoy 的分散式健康狀態檢查機制。
其他 NEG 類型使用 Google Cloud集中式健康狀態檢查系統:
gcloud compute health-checks create http td-on-prem-health-check
建立後端服務
建立具有
INTERNAL_SELF_MANAGED
負載平衡配置的後端服務,以便與 Cloud Service Mesh 搭配使用。建立這個後端服務時,請指定您先前建立的健康狀態檢查:gcloud compute backend-services create td-on-prem-backend-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --health-checks=td-on-prem-health-check
將您稍早建立的 NEG 新增至這個後端服務,以做為後端使用:
gcloud compute backend-services add-backend td-on-prem-backend-service \ --global \ --network-endpoint-group=td-on-prem-neg \ --network-endpoint-group-zone=us-central1-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=5
建立轉送規則對應關係
轉送規則對應關係會定義 Cloud Service Mesh 如何將流量轉送至後端服務。
建立使用先前定義後端服務的網址對應:
gcloud compute url-maps create td-hybrid-url-map \ --default-service=td-on-prem-backend-service
建立名為
target_proxy.yaml
的檔案,並在當中加入下列內容:name: td-hybrid-proxy proxyBind: true urlMap: global/urlMaps/td-hybrid-url-map
使用
import
指令建立目標 HTTP Proxy (詳情請參閱「Cloud Service Mesh 的目標 Proxy」):gcloud compute target-http-proxies import td-hybrid-proxy \ --source=target_proxy.yaml
建立參照這個目標 HTTP Proxy 的轉送規則。將轉送規則的 IP 位址設為
0.0.0.0
。將規則的 IP 位址設為0.0.0.0
,即可根據網址對應中設定的連入通訊埠、HTTP 主機名稱和路徑資訊,轉送流量。系統會忽略 HTTP 要求中指定的 IP 位址。gcloud compute forwarding-rules create td-hybrid-forwarding-rule \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --address=0.0.0.0 \ --target-http-proxy=td-hybrid-proxy \ --ports=8080 \ --network=default
確認中間 Proxy 可以將要求轉送至模擬的內部部署服務
Cloud Service Mesh 現在已設定完畢,可透過中間 Proxy 將流量傳送至模擬的私有內部部署服務。您可以建立測試用戶端 VM、登入該 VM,然後將要求傳送至執行 Envoy 的中間 Proxy,藉此驗證這項設定。確認設定後,請刪除測試用戶端 VM。
取得中間 Proxy 的 IP 位址。您只需要在驗證步驟提供這項資訊:
gcloud compute instances list
記下或以其他方式記錄 MIG 中執行個體的 IP 位址。
td-middle-proxy-us-central1-a
建立測試用戶端執行個體:
gcloud compute instances create test-client \ --zone=us-central1-a
使用
ssh
登入測試用戶端:gcloud compute ssh test-client --zone=us-central1-a
將要求傳送至中間 Proxy VM,並將先前取得的 IP 位址替換為
MIDDLE_PROXY_IP
:curl $MIDDLE_PROXY_IP:8080
您應該會看到以下的輸出內容:
Hello world from on-premises!
結束測試用戶端 VM。結束後,您可以刪除 VM:
gcloud compute instances delete test-client \ --zone=us-central1-a
部署外部應用程式負載平衡器
在本節中,您將部署外部應用程式負載平衡器,將傳入流量傳送至中間 Proxy。這項部署作業是標準的外部應用程式負載平衡器設定。
保留外部 IP 位址
建立全域靜態外部 IP 位址 (external-lb-vip
),外部用戶端會將流量傳送至該位址。您會在稍後進行驗證步驟時,擷取這個外部 IP 位址。
gcloud compute addresses create external-lb-vip \ --ip-version=IPV4 \ --global
設定外部 HTTP 負載平衡器
設定外部負載平衡器,將網際網路客戶流量轉送至已設定的中間 Proxy。
建立健康狀態檢查,用於判斷執行中介 Proxy 的 MIG 是否健康,以及是否能夠接收流量:
gcloud compute health-checks create tcp tcp-basic-check \ --port=8080
建立防火牆規則,允許健康狀態檢查。您可以在這裡重複使用
allow-hc
標記,將防火牆規則套用至中間的 Proxy VM:gcloud compute firewall-rules create fw-allow-health-checks \ --network=default \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,130.211.0.0/22 \ --target-tags=allow-hc \ --rules=tcp
建立後端服務:
gcloud compute backend-services create td-middle-proxy-backend-service \ --protocol=HTTP \ --health-checks=tcp-basic-check \ --global
將中間 Proxy MIG 新增至這個後端服務,做為後端使用:
gcloud compute backend-services add-backend td-middle-proxy-backend-service \ --instance-group=td-middle-proxy-us-central1-a \ --instance-group-zone=us-central1-a \ --global
建立網址對應,將連入要求轉送至中間 Proxy 做為預設後端服務:
gcloud compute url-maps create lb-map-http \ --default-service=td-middle-proxy-backend-service
建立目標 HTTP Proxy,以便根據網址對應處理外部負載平衡器的轉送規則虛擬 IP 位址 (VIP) 要求:
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=lb-map-http
建立全域轉送規則,將連入要求轉送至目標 HTTP Proxy:
gcloud compute forwarding-rules create http-forwarding-rule \ --address=external-lb-vip\ --global \ --load-balancing-scheme=EXTERNAL \ --target-http-proxy=http-lb-proxy \ --ports=80
設定 MIG 的具名通訊埠
設定執行個體群組的已命名通訊埠,允許中介 Proxy 接收來自外部負載平衡器的 HTTP 流量:
gcloud compute instance-groups managed set-named-ports td-middle-proxy-us-central1-a \ --named-ports=http:8080 \ --zone=us-central1-a
驗證外部應用程式負載平衡器設定
在這個步驟中,您要確認外部負載平衡器設定正確無誤。
您應該可以將要求傳送至負載平衡器的 VIP,並從模擬的內部部署 VM 取得回應:
PUBLIC_VIP=gcloud compute addresses describe external-lb-vip \ --format="get(address)" \ --global
對外部 IP 位址 (
PUBLIC_VIP
) 發出curl
要求,並確認您收到Hello world
訊息:curl $PUBLIC_VIP
您會看見以下輸出內容:
Hello world from on-premises!
啟用 Cloud Armor
設定 Cloud Armor 安全性政策,只允許從 CLIENT_IP_RANGE
存取服務,其中應包含您打算用來測試的用戶端裝置外部 IP 位址,例如 "192.0.2.0/24"
。
這些政策會套用至外部負載平衡器的後端服務 (在本範例中,td-hybrid-backend-service
指向中間 Proxy)。如要進一步瞭解設定這些規則所需的權限,請參閱「設定 Cloud Armor 安全性政策」。
建立 Cloud Armor 安全性政策:
gcloud compute security-policies create external-clients-policy \ --description="policy for external clients"
更新安全性政策的預設規則,拒絕所有流量:
gcloud compute security-policies rules update 2147483647 \ --security-policy=external-clients-policy \ --action="deny-404"
新增優先順序較高的規則,允許來自特定 IP 範圍的流量:
gcloud compute security-policies rules create 1000 \ --security-policy=external-clients-policy \ --description="allow traffic from CLIENT_IP_RANGE" \ --src-ip-ranges="CLIENT_IP_RANGE" \ --action="allow"
將 Cloud Armor 安全性政策附加至後端服務:
gcloud compute backend-services update td-middle-proxy-backend-service \ --security-policy=external-clients-policy
最終驗證
向外部應用程式負載平衡器的公開虛擬 IP 位址發出
curl
要求。如果用戶端裝置的 IP 位址位於先前指定的允許範圍內,您應該會收到預期的回應。CLIENT_IP_RANGE
curl $PUBLIC_VIP
您會看見以下輸出內容:
Hello world from on-premises!
從 IP 位址位於
CLIENT_IP_RANGE
以外的其他用戶端裝置發出相同的curl
要求,或更新安全性政策規則,不再納入用戶端 IP 位址。您現在應該會收到404 Not Found
錯誤。
疑難排解
下列操作說明介紹如何修正設定問題。
無法透過全域外部應用程式負載平衡器 IP 位址存取我的地端服務
假設您已在執行 Envoy 的Google Cloud VM 上存取內部部署服務,請按照下列步驟排解設定問題:
確認 Google Cloud Envoy MIG 回報的健康狀態為良好。 在 Google Cloud 控制台中,依序前往「Network services」(網路服務)>「Load balancing」(負載平衡),然後按一下
url-map lb-map-http
即可查看詳細資料。您應該會看到td-middle-proxy-us-central1-a
中 1/1 的執行個體健康狀態良好。如果健康狀態不佳,請檢查是否已設定防火牆規則,允許健康狀態檢查流量傳入執行 Envoy 的 VM: Google Cloud
gcloud compute firewall-rules describe fw-allow-health-check
您應該會看到以下的輸出內容:
allowed: ‑ IPProtocol: tcp ... direction: INGRESS disabled: false ... ... sourceRanges: ‑ 130.211.0.0/22 ‑ 35.191.0.0/16 targetTags: ‑ allow-hc
後續步驟
如要為地端或多雲服務尋找更複雜的路由政策,請參閱 Cloud Service Mesh 的進階流量管理功能。
如要部署 Cloud Service Mesh,請參閱設定指南總覽。
如要啟用其他網路邊緣服務,請參閱下列指南: