<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>LoadBalancing on LIFELOG</title>
    <link>/tags/loadbalancing/</link>
    <description>Recent content in LoadBalancing on LIFELOG</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <copyright>© 2026 0222-nnn</copyright>
    <lastBuildDate>Sun, 13 Sep 2026 00:00:00 +0900</lastBuildDate><atom:link href="/tags/loadbalancing/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Cookieに backend-a と書いても backend-a2 へ届く。ALBのセッションアフィニティを実測した</title>
      <link>/blog/20260913_terraform_gcp_advanced_regional_alb_session_affinity/</link>
      <pubDate>Sun, 13 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260913_terraform_gcp_advanced_regional_alb_session_affinity/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;ログイン状態をサーバ側のメモリに置いている。ロードバランサが毎回違うバックエンドへ振ると、数リクエストごとにログアウトする。同じクライアントを同じバックエンドへ送りたい。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサには &lt;code&gt;session_affinity&lt;/code&gt; があります。リージョン外部ALBで選べるのは&lt;a href=&#34;https://docs.cloud.google.com/load-balancing/docs/https/request-distribution&#34; target=&#34;_blank&#34;&gt;6種類&lt;/a&gt;です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NONE / CLIENT_IP / GENERATED_COOKIE / HEADER_FIELD / HTTP_COOKIE / STRONG_COOKIE_AFFINITY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この記事で比べるのは Cookie を使う2つです。違いは「誰が発行するか」ではありません。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GENERATED_COOKIE&lt;/code&gt; はLBが発行した Cookie を使います。一方 &lt;code&gt;HTTP_COOKIE&lt;/code&gt; が使うのは、&lt;strong&gt;名前を指定した Cookie の値&lt;/strong&gt;です。その名前の Cookie が無ければLBが生成します。&lt;/p&gt;
&lt;p&gt;後者を使うとき、こう書きたくなります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;send_header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Set-Cookie&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ROUTE=backend-a; Path=/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;これはバックエンドの指定になりません。&lt;/strong&gt; 固定はされますが、&lt;code&gt;backend-a&lt;/code&gt; という綴りがバックエンド &lt;code&gt;backend-a&lt;/code&gt; を指すわけではありません。実測では、&lt;code&gt;ROUTE=backend-a&lt;/code&gt; を送ったリクエストが10回とも &lt;strong&gt;&lt;code&gt;backend-a2&lt;/code&gt;&lt;/strong&gt; に届きました。&lt;/p&gt;
&lt;p&gt;あわせて、固定が外れる条件と、効いていることをどこで確かめられるかも測ります。後者は予想と違いました。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサを触ったことがある人向けです。構成の作り方は&lt;a href=&#34;/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/&#34;&gt;リージョンALBの回&lt;/a&gt;で扱っており、ここではアフィニティの差分だけを見ます。gRPC やステートフルなセッション管理の設計は扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.44.0&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0、curl 7.81.0&lt;/li&gt;
&lt;li&gt;初回検証は2026年9月13日、再検証は2026年9月19日、いずれも &lt;code&gt;asia-northeast1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;初回・再検証は別デプロイです。&lt;code&gt;AFFLOG&lt;/code&gt; の Cookie 関連の記録（6件のログなど）は9月13日、&lt;code&gt;request_count&lt;/code&gt;・&lt;code&gt;backend_request_count&lt;/code&gt; の94件／30件を含む指標系の集計は9月19日の再検証結果です。断りのない数値は、それぞれの取得時点のデプロイでの集計としてください。Cookie の対応だけは、作り直す前と後の2回ぶんを並べています。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Cloud Armorで送信元IPを拒否したら、リクエストはバックエンドに届かなかった</title>
      <link>/blog/20260911_terraform_gcp_advanced_regional_alb_cloud_armor/</link>
      <pubDate>Fri, 11 Sep 2026 00:00:03 +0900</pubDate>
      
      <guid>/blog/20260911_terraform_gcp_advanced_regional_alb_cloud_armor/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;Cloud Armor で送信元を絞ったとき、&lt;strong&gt;拒否されたリクエストはどこまで来ているのか。&lt;/strong&gt; バックエンドのログに出ないのは「届いていないから」なのか、「出していないだけ」なのか。&lt;/p&gt;
&lt;p&gt;見えないものを「無い」と決めるのは危ないので、クエリ文字列に識別子を入れたリクエストを送って確かめます。同じ1回のリクエストを、クライアント・LBのログ・バックエンドのログの3か所で追えます。&lt;/p&gt;
&lt;p&gt;あわせて、プレビューの動作も確かめます。ルールを有効にする前に「もし有効だったら何が止まるか」を見る仕組みです。&lt;/p&gt;
&lt;p&gt;プレビューにしたルールは判定するだけで、実際には止めません。判定はログと専用メトリクスに残ります。&lt;/p&gt;
&lt;p&gt;3つの状態で、応答・ログ・メトリクスの見え方を並べます。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサを触ったことがある人向けです。構成の作り方は&lt;a href=&#34;/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/&#34;&gt;前々回&lt;/a&gt;で扱っており、ここでは Armor の差分だけを見ます。WAF ルールやレート制限は扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.46.0&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用するコードは &lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/09-regional-alb-cloud-armor&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/09-regional-alb-cloud-armor&lt;/a&gt; です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; Advanced-Examples/09-regional-alb-cloud-armor
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp terraform.tfvars.example terraform.tfvars
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# project_id / allowed_src_ips（自分のグローバルIPを /32 で）/ iap_member を書く&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform init
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform apply
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform apply   &lt;span class=&#34;c1&#34;&gt;# 2回目。理由は後述&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;create_deny_client = true&lt;/code&gt; にすると、&lt;strong&gt;許可リストに載っていない送信元&lt;/strong&gt;として使える検証用 VM も作られます。&lt;code&gt;access_config {}&lt;/code&gt; でエフェメラルな外部IPが付くので、そのIPで出ていきます。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>draining=300のままNEGからバックエンドを外したら、gcloudが320秒終わらなかった</title>
      <link>/blog/20260911_terraform_gcp_advanced_alb_health_check_timing/</link>
      <pubDate>Fri, 11 Sep 2026 00:00:02 +0900</pubDate>
      
      <guid>/blog/20260911_terraform_gcp_advanced_alb_health_check_timing/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;ロードバランサの設定値は、既定のままでも動きます。動くので、何秒で効くのかを知らないまま運用に入りがちです。&lt;/p&gt;
&lt;p&gt;デプロイの手順を書いていて、次のような形にすることがあります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# バックエンドを1台外す&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcloud compute network-endpoint-groups update NEG --remove-endpoint ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 外れたので入れ替える&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコマンド、&lt;strong&gt;Provider の既定値（draining=300秒）のままだと5分以上終わりませんでした。&lt;/strong&gt; しかも新しいリクエストは、その前に届かなくなっています。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;detachNetworkEndpoints&lt;/code&gt; は Operation を返す非同期APIで、&lt;strong&gt;gcloud はその完了を待ってから戻ります。&lt;/strong&gt; 以下で「5分」と書くのは、この完了待ちを含んだ時間です。HTTP応答そのものの速さは測っていません。&lt;/p&gt;
&lt;p&gt;対象はリージョン外部 Application Load Balancer です。検出にかかる時間と、バックエンド削除の挙動を実測します。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサを触ったことがある人向けです。構成の作り方は&lt;a href=&#34;/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/&#34;&gt;前の記事&lt;/a&gt;で扱っており、ここでは時間だけを見ます。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.46.0&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用するコードは &lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/08-regional-external-alb-neg&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/08-regional-external-alb-neg&lt;/a&gt; です。&lt;code&gt;:81&lt;/code&gt; はゾーンaの2台（&lt;code&gt;backend-a&lt;/code&gt; / &lt;code&gt;backend-a2&lt;/code&gt;）、&lt;code&gt;:82&lt;/code&gt; はゾーンcの1台（&lt;code&gt;backend-b&lt;/code&gt;）に向きます。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>proxy-onlyサブネットを塞ぐと、リージョンALBはHEALTHYのまま504を返した</title>
      <link>/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/</link>
      <pubDate>Fri, 11 Sep 2026 00:00:01 +0900</pubDate>
      
      <guid>/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;ロードバランサのトラブルは「ヘルスチェックが赤い」から入ることが多く、そこを直せば通ります。リージョン外部 Application Load Balancer には、&lt;strong&gt;緑のまま通らない&lt;/strong&gt;入り方があります。&lt;/p&gt;
&lt;p&gt;バックエンドから見ると、同じロードバランサからの通信が&lt;strong&gt;ヘルスチェックと実トラフィックの2つ&lt;/strong&gt;に分かれています。片方だけを塞ぐと、こうなります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;今回測ったのは、IPv4のVMを &lt;code&gt;GCE_VM_IP_PORT&lt;/code&gt; 型のゾーンNEGに登録した構成&lt;/strong&gt;です。ハイブリッドNEGやバックエンドバケットでは経路が変わるので、そのまま当てはめられません。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;何が来るか&lt;/th&gt;
          &lt;th&gt;送信元&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;ヘルスチェック&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;35.191.0.0/16&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;実トラフィック&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;proxy-only サブネットの範囲&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ファイアウォールを片方しか開けていないと、片方だけ通ります。ヘルスチェックだけ開けていれば、&lt;strong&gt;バックエンドは HEALTHY のまま、クライアントには 504 が返ります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ファイアウォールを1本だけ外す対照実験で、これを実際に起こします。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサを触ったことがある人向けです。ALB の種類の選び方や、Cloud Armor・セッションアフィニティは扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.46.0&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用するコードは &lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/08-regional-external-alb-neg&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/08-regional-external-alb-neg&lt;/a&gt; です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; Advanced-Examples/08-regional-external-alb-neg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp terraform.tfvars.example terraform.tfvars   &lt;span class=&#34;c1&#34;&gt;# project_id と iap_member を書き換える&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform init
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform apply
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apply complete! Resources: 33 added, 0 changed, 0 destroyed.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Outputs:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vip = &amp;#34;34.146.203.171&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;バックエンドVMに外部IPはありません。インターネットからの入口はロードバランサだけです。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ドメイン認証がFAILEDになった9分後にAUTHORIZEDへ戻り、証明書はACTIVEになった</title>
      <link>/blog/20260906_terraform_gcp_advanced_regional_alb_certificate_manager/</link>
      <pubDate>Sun, 06 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260906_terraform_gcp_advanced_regional_alb_certificate_manager/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;リージョン外部 ALB で、公開の Google マネージド証明書を使うとします。選べるのは &lt;a href=&#34;https://cloud.google.com/certificate-manager/docs/deploy-google-managed-regional&#34; target=&#34;_blank&#34;&gt;Certificate Manager の DNS 認証&lt;/a&gt;です。&lt;/p&gt;
&lt;p&gt;Compute Engine のマネージド証明書は使えません。自己管理証明書なら別途使えます。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Compute Engine Google-managed SSL certificates aren&amp;rsquo;t supported for regional external Application Load Balancers, regional internal Application Load Balancers, or cross-region internal Application Load Balancers.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;残るのは Certificate Manager です。認証方式は &lt;strong&gt;DNS認証&lt;/strong&gt;と&lt;strong&gt;LB認証&lt;/strong&gt;の2つで、どちらを選ぶかで証明書を用意できるタイミングが変わります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ただしリージョン証明書で使えるのは DNS 認証だけです。&lt;/strong&gt; この記事では、比較のためにグローバル外部ALBで LB 認証も試します。&lt;/p&gt;
&lt;p&gt;両方を同じプロジェクトに作り、発行までを実測しました。&lt;strong&gt;29分の時点では両方 &lt;code&gt;FAILED&lt;/code&gt; でした。&lt;/strong&gt;&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;対象読者 
    &lt;div id=&#34;対象読者&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%af%be%e8%b1%a1%e8%aa%ad%e8%80%85&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform で Google Cloud のロードバランサを作ったことがある&lt;/li&gt;
&lt;li&gt;&lt;code&gt;terraform apply&lt;/code&gt; の出力を読める&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;扱わないもの 
    &lt;div id=&#34;扱わないもの&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%89%b1%e3%82%8f%e3%81%aa%e3%81%84%e3%82%82%e3%81%ae&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform と Google Cloud の入門&lt;/li&gt;
&lt;li&gt;自己管理証明書、private PKI&lt;/li&gt;
&lt;li&gt;Cloud Armor、URL マップの詳細&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;証明書の発行と、ロードバランサへの取り付けに絞ります。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKEのスタンドアロンNEGを消したらLBのバックエンドが戻らなかった話</title>
      <link>/blog/20260903_terraform_gcp_advanced_gke_standalone_neg_recovery/</link>
      <pubDate>Thu, 03 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260903_terraform_gcp_advanced_gke_standalone_neg_recovery/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;/blog/20260901_terraform_gcp_advanced_gke_ilb_multi_neg/&#34;&gt;GKEのPodをInternal HTTP LB（NEG）でポート別に振り分ける&lt;/a&gt;では、スタンドアロンNEGを&lt;strong&gt;作る&lt;/strong&gt;ところまでを扱いました。しかし運用で怖いのはその先です。「Serviceを間違って消してしまった」「クラスタを作り直した」というとき、ロードバランサは自動で復旧してくれるのでしょうか。&lt;/p&gt;
&lt;p&gt;NEGはGKEが作り、LBのバックエンドはTerraformが管理します。作る主体が違うため、片方だけが変わると両者の認識がずれます。障害が起きてから手探りで復旧手順を探すのは避けたい。そこで、実際に壊して直るまでを先に確認しておきます。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEでNEGを使ったLB構成を組んだことがある人です。NEGそのものの入門は扱いません。&lt;/p&gt;
&lt;p&gt;Internal LBは扱いません（前掲の記事で扱っています）。Cloud Armor、マネージドSSL証明書、Shared VPCも扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;正常系&lt;/strong&gt;: 外部LB経由でPodへ到達できること&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;検証1&lt;/strong&gt;: Serviceを削除するとどうなるか。再作成すればLBのバックエンドは自動で戻るか&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;検証2&lt;/strong&gt;: LBを残したままGKEクラスタを作り直すとどうなるか&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform、Docker&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Compute Engineを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.3、google 7.46.0&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;使用するTerraformコード 
    &lt;div id=&#34;使用するterraformコード&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8bterraform%e3%82%b3%e3%83%bc%e3%83%89&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/18-gke-standalone-neg-recovery&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/18-gke-standalone-neg-recovery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;今回の構成 
    &lt;div id=&#34;今回の構成&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bb%8a%e5%9b%9e%e3%81%ae%e6%a7%8b%e6%88%90&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;リージョナル・2ゾーンのプライベートGKEクラスタと、グローバル外部Application LBです。NEGはゾーンごとに作られるため、複数ゾーンにしています。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKEのPodをInternal HTTP LB（NEG）でポート別に振り分けてみた</title>
      <link>/blog/20260901_terraform_gcp_advanced_gke_ilb_multi_neg/</link>
      <pubDate>Tue, 01 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260901_terraform_gcp_advanced_gke_ilb_multi_neg/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;/blog/20260831_terraform_gcp_advanced_gke_private_bastion/&#34;&gt;GKEプライベートクラスタと踏み台&lt;/a&gt;を作った後、複数のアプリケーションをクラスタに同居させたくなる場面があります。リクエストをアプリごとに振り分けたい、という場面です。GKEのServiceだけではVPC内部からの経路が用意されません。Ingressを使わない場合、Podへの入り口をどう作るかが課題になります。&lt;/p&gt;
&lt;p&gt;Internal HTTP LB（INTERNAL_MANAGED）は、GKEのPodをNetwork Endpoint Group（NEG）というバックエンドの形で直接受け取れます。Terraformが手動で作るNEGとは異なる点です。GKEのServiceに&lt;code&gt;cloud.google.com/neg&lt;/code&gt;というアノテーションを付けるだけです。GKEコントローラがNEGを自動的に作成します。&lt;/p&gt;
&lt;p&gt;Terraformの基本操作と、&lt;a href=&#34;/blog/20260831_terraform_gcp_advanced_gke_private_bastion/&#34;&gt;前回のGKEプライベートクラスタ＋踏み台構成&lt;/a&gt;は前提としています。&lt;/p&gt;
&lt;p&gt;Session Affinity（Cookie）は本記事では扱いません。外部ALB向けの構成例が&lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/10-regional-alb-session-affinity&#34; target=&#34;_blank&#34;&gt;terraform-gcp-examplesの10-regional-alb-session-affinity&lt;/a&gt;にあります（Terraformコードのみ）。Ingress（GKEのL7 LBコントローラ）や外部公開も扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GKEのServiceアノテーションから、Network Endpoint Group（NEG）が自動作成されること&lt;/li&gt;
&lt;li&gt;Internal HTTP LBで、共有VIPの3つのポート（:81/:82/:83）を、それぞれ異なるバックエンドへ振り分けられること&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;踏み台からVIPの3ポートへ実際に接続し、意図したバックエンドが返ること&lt;/strong&gt;（LB作成の確認とは別）&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform、Docker&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Compute Engine、IAMを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.3、google 7.46.0&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;今回の構成 
    &lt;div id=&#34;今回の構成&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bb%8a%e5%9b%9e%e3%81%ae%e6%a7%8b%e6%88%90&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;GKEのServiceに&lt;code&gt;cloud.google.com/neg&lt;/code&gt;アノテーションを付けると、GKEコントローラはクラスタが配置されているゾーンごとにNEGを作成します。この構成では3ゾーンにノードプールを配置しているので、1つのServiceにつき3つのNEG（ゾーンごと1つ）が対応します。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
