使用混合式連線網路端點群組設定網路邊緣服務
Google 提供各種網路邊緣服務,可強化 Google Cloud(地端部署和多雲端服務) 以外的服務功能和安全性,例如在地端部署資料中心或其他公有雲中。
這些網路邊緣服務可讓您執行下列操作:
使用單一 Anycast VIP 接受及轉送全球外部客戶流量。
使用外部應用程式負載平衡器和Google 代管的 SSL 憑證,在邊緣終止 TLS 流量,藉此減少伺服器負載。
使用 Google Cloud Armor 啟用預先設定的網路應用程式防火牆 (WAF) 規則,並將許可清單和拒絕清單套用至傳入流量。
使用 Identity-Aware Proxy (IAP) 控管使用者對應用程式和資源的存取權。
使用 Cloud CDN 改善內容傳遞和使用者延遲情形。
如要將這些優點運用於私人、內部部署或多雲端服務,您可以部署外部應用程式負載平衡器,接收來自公開網際網路的流量。外部應用程式負載平衡器會將流量轉送至 Cloud Service Mesh 所設定的中介 Proxy。這個中介伺服器會使用 Cloud VPN 或 Cloud Interconnect,將流量路由至內部部署環境或非Google Cloud 環境。
本教學課程將逐步介紹一個範例,說明如何使用 Google Cloud Armor 在 Google 邊緣,有選擇地允許用戶端存取內部部署服務。系統會根據用戶端的 IP 位址授予存取權。
完成下列工作:
- 在代管執行個體群組 (MIG) 中,將 Envoy 部署為中介 Proxy。這個 Envoy 代理程式會自動連線至 Cloud Service Mesh。
- 建立模擬的私人內部虛擬機器 (VM) 例項。在實際案例中,您可能已經有內部 VM。
- 設定 Cloud Service Mesh,將所有到達中介 Proxy 的要求,路由至模擬的內部 VM。
- 建立外部應用程式負載平衡器,接收來自公開網際網路的流量,並轉送至中介 Proxy。
- 將 Google Cloud Armor 安全性政策附加至外部應用程式負載平衡器。
完成這些工作後,您可以選擇探索其他邊緣服務和進階流量管理功能。
事前準備
設定中介層 Proxy 前,請先完成下列工作:
請參閱「準備使用 Envoy 設定 Cloud Service Mesh」一文,並完成所有必要任務,包括授予必要權限和角色,以及啟用 Cloud Service Mesh API。
請確認您可以透過 Cloud VPN 或 Cloud Interconnect,從 Google Cloud 虛擬私有雲 (VPC) 網路存取私人內部部署端點。本教學課程使用的範例只會將流量路由至 Google Cloud中的端點,因此您不需要設定混合連線即可瞭解內容。在實際部署情境中,您必須設定混合式連線。
請確認 VPC 子網路 CIDR 範圍不會與遠端 CIDR 範圍衝突。如果 IP 位址重疊,系統會優先使用子網路路徑,而不是遠端連線。
為了進行這項示範,請取得必要權限,以便建立及更新 Google Cloud Armor 安全性政策。如果您想使用其他服務 (例如 Cloud CDN),權限可能會有所不同。
在 Compute Engine VM 上部署中介 Proxy
本節說明如何在 Compute Engine 上部署 Envoy 做為中介 Proxy,以便接收來自外部負載平衡器的流量,並將其轉送至遠端目的地。
建立中介層 Proxy 的執行個體範本
執行個體範本可指定代管執行個體群組 (MIG) 中的 VM 設定。
使用下列範本,建立 VM 執行個體,並連結至 Cloud Service Mesh 的 Envoy 代理程式:
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可用地區和區域的完整清單,請參閱「地區和區域」一文。
部署模擬的地端服務
本節說明如何部署混合式連線網路端點群組 (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
請記下或以其他方式記下
td-middle-proxy-us-central1-a
MIG 中執行個體的 IP 位址。建立測試用戶端執行個體:
gcloud compute instances create test-client \ --zone=us-central1-a
使用
ssh
登入測試用戶端:gcloud compute ssh test-client --zone=us-central1-a
將要求傳送至中介 Proxy VM,並將
MIDDLE_PROXY_IP
替換成先前取得的 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!
啟用 Google Cloud Armor
設定 Google Cloud Armor 安全性政策,只允許從 CLIENT_IP_RANGE
存取服務,其中應包含您要用於測試的用戶端裝置的外部 IP 位址,例如 "192.0.2.0/24"
。
這些政策會套用至外部負載平衡器的後端服務 (在本例中,td-hybrid-backend-service
指向中介 Proxy)。如要進一步瞭解設定這些規則所需的權限,請參閱「設定 Google Cloud Armor 安全性政策」。
建立 Google 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"
將 Google 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 的 Google Cloud VM:
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,請參閱設定指南總覽。
如要啟用其他網路邊緣服務,請參閱下列指南: