使用混合式連線網路端點群組設定網路邊緣服務

Google 提供各種網路邊緣服務,可提升 Google Cloud外部服務 (地端部署和多雲服務) 的功能和安全性,例如地端部署資料中心或其他公有雲。

這些網路邊緣服務可讓您執行下列操作:

網路邊緣服務範例。
網路邊緣服務範例 (按一下即可放大)

如要為私有、內部部署或多雲服務提供這些優點,請部署外部應用程式負載平衡器,接收來自公用網際網路的流量。外部應用程式負載平衡器會將流量轉送至 Cloud Service Mesh 設定的中間 Proxy。這個中間 Proxy 會使用 Cloud VPN 或 Cloud Interconnect,將流量路由至內部部署環境或非Google Cloud 環境。

本教學課程將逐步說明端對端範例,該範例使用 Google 邊緣的 Cloud Armor,選擇性地允許用戶端私下存取內部部署服務。系統會根據用戶端的 IP 位址授予存取權。

您將完成下列工作:

  1. 在代管執行個體群組 (MIG) 中,將 Envoy 部署為中間 Proxy。這個 Envoy 代理程式會自動連線至 Cloud Service Mesh。
  2. 建立模擬的私有本機虛擬機器 (VM) 執行個體。在實際範例中,您可能已經有內部部署 VM。
  3. 設定 Cloud Service Mesh,將所有抵達中間 Proxy 的要求,轉送至模擬的內部部署 VM。
  4. 建立外部應用程式負載平衡器,接收來自公用網際網路的流量,並轉送至中間 Proxy。
  5. 將 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 的設定。

  1. 使用下列範本建立 VM 執行個體,並將 Envoy 代理程式連線至 Cloud Service Mesh:

    gcloud compute instance-templates create td-middle-proxy \
        --service-proxy=enabled \
        --tags=allow-hc
    
  2. 如要自訂 Envoy 部署作業,例如指定網路名稱、設定記錄路徑或啟用追蹤功能,請參閱自動化 Envoy 部署選項指南

為中間 Proxy 建立 MIG

  1. 依據範本建立 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
    
  2. 如要進行日後的設定和驗證,請在 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

  1. 部署單一 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'
    
  2. 找出並儲存內部 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 環境變數中。

  1. 建立 NEG:

    gcloud compute network-endpoint-groups create td-on-prem-neg \
        --network-endpoint-type=non-gcp-private-ip-port \
        --zone=us-central1-a
    
  2. 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

建立後端服務

  1. 建立具有 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
    
  2. 將您稍早建立的 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 如何將流量轉送至後端服務。

  1. 建立使用先前定義後端服務的網址對應:

    gcloud compute url-maps create td-hybrid-url-map \
        --default-service=td-on-prem-backend-service
    
  2. 建立名為 target_proxy.yaml 的檔案,並在當中加入下列內容:

    name: td-hybrid-proxy
    proxyBind: true
    urlMap: global/urlMaps/td-hybrid-url-map
    
  3. 使用 import 指令建立目標 HTTP Proxy (詳情請參閱「Cloud Service Mesh 的目標 Proxy」):

    gcloud compute target-http-proxies import td-hybrid-proxy \
        --source=target_proxy.yaml
    
  4. 建立參照這個目標 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。

  1. 取得中間 Proxy 的 IP 位址。您只需要在驗證步驟提供這項資訊:

    gcloud compute instances list
    
  2. 記下或以其他方式記錄 MIG 中執行個體的 IP 位址。td-middle-proxy-us-central1-a

  3. 建立測試用戶端執行個體:

    gcloud compute instances create test-client \
        --zone=us-central1-a
    
  4. 使用 ssh 登入測試用戶端:

    gcloud compute ssh test-client
        --zone=us-central1-a
    
  5. 將要求傳送至中間 Proxy VM,並將先前取得的 IP 位址替換為 MIDDLE_PROXY_IP

    curl $MIDDLE_PROXY_IP:8080
    

    您應該會看到以下的輸出內容:

    Hello world from on-premises!
    
  6. 結束測試用戶端 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。

  1. 建立健康狀態檢查,用於判斷執行中介 Proxy 的 MIG 是否健康,以及是否能夠接收流量:

    gcloud compute health-checks create tcp tcp-basic-check \
        --port=8080
    
  2. 建立防火牆規則,允許健康狀態檢查。您可以在這裡重複使用 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
    
  3. 建立後端服務:

    gcloud compute backend-services create td-middle-proxy-backend-service \
        --protocol=HTTP \
        --health-checks=tcp-basic-check \
        --global
    
  4. 將中間 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
    
  5. 建立網址對應,將連入要求轉送至中間 Proxy 做為預設後端服務:

    gcloud compute url-maps create lb-map-http \
        --default-service=td-middle-proxy-backend-service
    
  6. 建立目標 HTTP Proxy,以便根據網址對應處理外部負載平衡器的轉送規則虛擬 IP 位址 (VIP) 要求:

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map=lb-map-http
    
  7. 建立全域轉送規則,將連入要求轉送至目標 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

驗證外部應用程式負載平衡器設定

在這個步驟中,您要確認外部負載平衡器設定正確無誤。

  1. 您應該可以將要求傳送至負載平衡器的 VIP,並從模擬的內部部署 VM 取得回應:

    PUBLIC_VIP=gcloud compute addresses describe external-lb-vip \
        --format="get(address)" \
        --global
    
  2. 對外部 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 安全性政策」。

  1. 建立 Cloud Armor 安全性政策:

    gcloud compute security-policies create external-clients-policy \
        --description="policy for external clients"
    
  2. 更新安全性政策的預設規則,拒絕所有流量:

    gcloud compute security-policies rules update 2147483647 \
        --security-policy=external-clients-policy \
        --action="deny-404"
    
  3. 新增優先順序較高的規則,允許來自特定 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"
    
  4. 將 Cloud Armor 安全性政策附加至後端服務:

    gcloud compute backend-services update td-middle-proxy-backend-service \
        --security-policy=external-clients-policy
    

最終驗證

  1. 向外部應用程式負載平衡器的公開虛擬 IP 位址發出 curl 要求。如果用戶端裝置的 IP 位址位於先前指定的允許範圍內,您應該會收到預期的回應。CLIENT_IP_RANGE

    curl $PUBLIC_VIP
    

    您會看見以下輸出內容:

    Hello world from on-premises!
    
  2. 從 IP 位址位於 CLIENT_IP_RANGE 以外的其他用戶端裝置發出相同的 curl 要求,或更新安全性政策規則,不再納入用戶端 IP 位址。您現在應該會收到 404 Not Found 錯誤。

疑難排解

下列操作說明介紹如何修正設定問題。

無法透過全域外部應用程式負載平衡器 IP 位址存取我的地端服務

假設您已在執行 Envoy 的Google Cloud VM 上存取內部部署服務,請按照下列步驟排解設定問題:

  1. 確認 Google Cloud Envoy MIG 回報的健康狀態為良好。 在 Google Cloud 控制台中,依序前往「Network services」(網路服務)>「Load balancing」(負載平衡),然後按一下 url-map lb-map-http 即可查看詳細資料。您應該會看到 td-middle-proxy-us-central1-a 中 1/1 的執行個體健康狀態良好。

  2. 如果健康狀態不佳,請檢查是否已設定防火牆規則,允許健康狀態檢查流量傳入執行 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
    

後續步驟