Search by

    Google Cloud のサーバレスネットワークエンドポイント グループ(NEG)を利用する

    Google Cloud のサーバレスネットワークエンドポイント グループ(NEG)を利用する方法をまとめています

    サーバレスNEGとは

    ロードバランサのバックエンド エンドポイントのグループ。 GCPの場合は、サーバレスのComputeリソースである、GAE・GCF・Cloud RUNでホストされたアプリや関数を指す。

    次のことが可能

    • 専用 IPv4 または IPv6 の IP アドレスからサーバレスアプリを構築出来る様に構成する

    URL 空間を共有すると、パス毎に向けるリソースを指定出来る。

    • アプリケーションのマルチリージョン化

    LBが受けて、アプリ側が処理

    • SSL 証明書と秘密鍵を再利用

    Compute Engine、Google Kubernetes Engine、Cloud Storage で使用する同じ SSL 証明書と秘密鍵を再利用する。これにより、サーバーレス アプリの個別の証明書を管理する必要がなくなります。

    構成方法

    外部 IP アドレスの予約

    gcloud compute addresses create example-ip \
        --ip-version=IPV4 \
        --global
    
    gcloud compute addresses list
    NAME        ADDRESS/RANGE   TYPE      PURPOSE  NETWORK  REGION  SUBNET  STATUS
    example-ip  xxx.xxx.xxx.xxx  EXTERNAL                                    RESERVED

    外部 HTTP(S) ロードバランサの作成

    # ネットワークNEGの作成
    gcloud compute network-endpoint-groups create helloworld-serverless-neg \
        --region=asia-northeast1 \
        # エンドポイントの種類
        --network-endpoint-type=serverless  \
        # サービス名
        --cloud-run-service=helloworld
    
    Created [https://www.googleapis.com/compute/v1/projects/xxx-prj/regions/asia-northeast1/networkEndpointGroups/helloworld-serverless-neg].
    Created network endpoint group [helloworld-serverless-neg].
    
    # バックエンドサービスの作成
    cloud compute backend-services create helloworld-backend-service \
        --global
    
    Created [https://www.googleapis.com/compute/v1/projects/xxx-prj/global/backendServices/helloworld-backend-sevice].
    NAME                       BACKENDS  PROTOCOL
    helloworld-backend-sevice            HTTP
    
    # バックエンドサービスにサーバレスNEGを追加
    gcloud compute backend-services add-backend helloworld-backend-service \
        --global \
        --network-endpoint-group=helloworld-serverless-neg \
        --network-endpoint-group-region=asia-northeast1
    
    Updated [https://www.googleapis.com/compute/v1/projects/xxx-prj/global/backendServices/helloworld-backend-service].
    
    # URLマップの作成
    gcloud compute url-maps create helloworld-url-map \
        --default-service helloworld-backend-service
    
    Created [https://www.googleapis.com/compute/v1/projects/xxx-prj/global/urlMaps/helloworld-url-map].
    NAME                DEFAULT_SERVICE
    helloworld-url-map  backendServices/helloworld-backend-service
    
    # URLマップにリクエストをルーティングするhttpproxyを作成
    gcloud compute target-http-proxies create helloworld-http-proxy \
        --url-map=helloworld-url-map
    
    Created [https://www.googleapis.com/compute/v1/projects/xxx-prj/global/targetHttpProxies/helloworld-http-proxy].
    NAME                   URL_MAP
    helloworld-http-proxy  helloworld-url-map
    
    # 受信リクエストをプロキシにルーティングする
    gcloud compute forwarding-rules create http-forwarding-rule \
        # 予約したアドレスの使用
        --address=example-ip \
        # target-http-proxyの指定
        --target-http-proxy=helloworld-http-proxy \
        --global \
        # globalの場合は必須
        --ports=80
      
    Created [https://www.googleapis.com/compute/v1/projects/xxx-prj/global/forwardingRules/http-forwarding-rule].

    load blancer consists of

    • backend-services
    • url-maps
    • target-http(s)-proxies
    • forwarding-rules

    外部 HTTP(S) ロードバランサのテスト HTTP ロードバランサを作成した場合は、ウェブブラウザで http://IP_ADDRESS に移動してロードバランサをテストできます。IP_ADDRESS をロードバランサの IP アドレスに置き換えます。helloworld サービスのホームページが表示されます。

    用語

    サービスの完全修飾ドメイン名(FQDN) Network Service Tiers の概要 バックエンド サービスの概要

    その他

    gcloud compute backend-services add-backendでインスタンスグループを追加する時は下記のコマンドだった。

    gcloud compute backend-services add-backend fortressnet-backend-service \
        --balancing-mode RATE \
        --max-rate-per-instance 100 \
        --instance-group my-vm-group \
        --instance-group-zone asia-northeast1-a \
        --global

    --instance-groupor--network-endpoint-groupで其々指定出来る模様

    # 何もオプションを指定しないと
    gcloud compute forwarding-rules create hoo
    
    
    ERROR: (gcloud.compute.forwarding-rules.create) Exactly one of Exactly one of (
        # backendサービス
        --backend-service | 
        --target-google-apis-bundle | 
        --target-grpc-proxy | 
        --target-http-proxy | 
        --target-https-proxy | 
        --target-instance | 
        --target-pool | 
        --target-ssl-proxy | 
        --target-tcp-proxy | 
        --target-vpn-gateway
        ) must be specified.
    

    上記を見るに、backend-serviceだけあれば、LBとして機能する?