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

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

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

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

如要將這些優點運用於私人、內部部署或多雲端服務,您可以部署外部應用程式負載平衡器,接收來自公開網際網路的流量。外部應用程式負載平衡器會將流量轉送至 Cloud Service Mesh 所設定的中介 Proxy。這個中介伺服器會使用 Cloud VPN 或 Cloud Interconnect,將流量路由至內部部署環境或非Google Cloud 環境。

本教學課程將逐步介紹一個範例,說明如何使用 Google Cloud Armor 在 Google 邊緣,有選擇地允許用戶端存取內部部署服務。系統會根據用戶端的 IP 位址授予存取權。

完成下列工作:

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

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

    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可用地區和區域的完整清單,請參閱「地區和區域」一文。

部署模擬的地端服務

本節說明如何部署混合式連線網路端點群組 (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. 請記下或以其他方式記下 td-middle-proxy-us-central1-a MIG 中執行個體的 IP 位址。

  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,並將 MIDDLE_PROXY_IP 替換成先前取得的 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!
    

啟用 Google Cloud Armor

設定 Google Cloud Armor 安全性政策,只允許從 CLIENT_IP_RANGE 存取服務,其中應包含您要用於測試的用戶端裝置的外部 IP 位址,例如 "192.0.2.0/24"

這些政策會套用至外部負載平衡器的後端服務 (在本例中,td-hybrid-backend-service 指向中介 Proxy)。如要進一步瞭解設定這些規則所需的權限,請參閱「設定 Google Cloud Armor 安全性政策」。

  1. 建立 Google 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. 將 Google 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 的 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
    

後續步驟