<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>GKE on LIFELOG</title>
    <link>/tags/gke/</link>
    <description>Recent content in GKE on LIFELOG</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <copyright>© 2026 0222-nnn</copyright>
    <lastBuildDate>Sun, 06 Sep 2026 00:00:01 +0900</lastBuildDate><atom:link href="/tags/gke/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>GKEでPodの退避を起こしたら、監視に必要なメトリクスがCloud Monitoringに来なかった</title>
      <link>/blog/20260906_terraform_gcp_advanced_gke_pod_eviction/</link>
      <pubDate>Sun, 06 Sep 2026 00:00:01 +0900</pubDate>
      
      <guid>/blog/20260906_terraform_gcp_advanced_gke_pod_eviction/</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;ノードのメモリやディスクが逼迫すると、kubelet が Pod を退避（Eviction）します。退避された Pod は &lt;code&gt;Failed&lt;/code&gt; として API 上に残り、PodGC が片付けるまで一覧に並び続けます。&lt;/p&gt;
&lt;p&gt;監視していなければ、原因の分からない &lt;code&gt;Failed&lt;/code&gt; Pod が増えていくだけです。&lt;/p&gt;
&lt;p&gt;そこで退避を監視しようとして、最初につまずきました。&lt;code&gt;kube_pod_status_reason{reason=&amp;quot;Evicted&amp;quot;}&lt;/code&gt; を Cloud Monitoring で引いても、何も返ってきません。&lt;/p&gt;
&lt;p&gt;これは kube-state-metrics が出すメトリクスで、Pod の &lt;code&gt;status.reason&lt;/code&gt; をそのままラベルにしたものです。退避された Pod には &lt;code&gt;reason=&amp;quot;Evicted&amp;quot;&lt;/code&gt; のラベルが付きます。&lt;/p&gt;
&lt;p&gt;Gauge なので、&lt;code&gt;sum()&lt;/code&gt; で分かるのは&lt;strong&gt;現在 API 上に残っている &lt;code&gt;Evicted&lt;/code&gt; の Pod 数&lt;/strong&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-promql&#34; data-lang=&#34;promql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;kube_pod_status_reason&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;reason&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Evicted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;#34;}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;収集そのものは動いていました。Managed Service for Prometheus（GMP）は有効で、&lt;code&gt;up{job=&amp;quot;kube-state-metrics&amp;quot;}&lt;/code&gt; は 1 を返します。それでも、退避を数えるためのメトリクスだけが Cloud Monitoring に入っていません。&lt;/p&gt;
&lt;p&gt;この状態でどこを見れば退避に気づけるのか。GKE で実際に退避を起こして確かめました。&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;GKE でワークロードを動かしたことがある&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubectl describe&lt;/code&gt; で Pod の状態を読める&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;Kubernetes と GKE の入門&lt;/li&gt;
&lt;li&gt;Pod Disruption Budget、&lt;code&gt;kubectl drain&lt;/code&gt; による退去（今回はノード逼迫による退避）&lt;/li&gt;
&lt;li&gt;HorizontalPodAutoscaler、Cluster Autoscaler&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;退避が起きたときに、何をどこで観測できるかに絞ります。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>標準出力に1行JSONを書くだけなら、GKEではFluentdサイドカーが要らなかった</title>
      <link>/blog/20260905_terraform_gcp_advanced_gke_cloud_logging_format/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:03 +0900</pubDate>
      
      <guid>/blog/20260905_terraform_gcp_advanced_gke_cloud_logging_format/</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 Loggingに送りたいとき、Fluentdをサイドカーに置く構成があります。GKEでそれが要るのかを確かめました。&lt;/p&gt;
&lt;p&gt;さらに、&lt;code&gt;fluent.conf&lt;/code&gt;に書いた&lt;code&gt;tag&lt;/code&gt;や&lt;code&gt;record_transformer&lt;/code&gt;が、Cloud Logging上のどのフィールドになるのかも対応が分かりません。サイドカーを入れたのに期待したキーで検索できない、という状態になりがちです。&lt;/p&gt;
&lt;p&gt;実際に測ってみると、&lt;strong&gt;GKEの収集エージェントが既にJSONを解釈していました。&lt;/strong&gt; アプリが&lt;strong&gt;標準出力に1行JSONを書く&lt;/strong&gt;なら、サイドカーは要りません。しかも挟み方を誤ると、逆に構造を失います。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ファイルに書く場合は別です。&lt;/strong&gt; GKEの標準収集が拾うのはコンテナの標準出力と標準エラーなので、ファイル出力を届けるには何かが要ります。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEでPodを動かしたことがあり、Cloud Loggingでログを見たことがある人です。Kubernetesの入門は扱いません。&lt;/p&gt;
&lt;p&gt;Log Routerによる転送、Log-based metrics、Autopilotクラスタは扱いません。&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;素のテキストとJSONで、入るフィールドが変わるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;構造化ログにFluentdサイドカーは必要か&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fluent.conf&lt;/code&gt;の設定がCloud Loggingのどのフィールドになるか&lt;/li&gt;
&lt;li&gt;スタックトレースが1エントリにまとまるか&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&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.5、google 7.46.0、GKE 1.35.7-gke.1027000、fluentd v1.16-debian-1&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/24-gke-fluentd-log-format&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/24-gke-fluentd-log-format&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;READMEの手順でTerraformを適用し、&lt;code&gt;k8s/&lt;/code&gt;配下の4つのマニフェストを当てます。&lt;strong&gt;クラスタはプライベートエンドポイント構成なので、以下の&lt;code&gt;kubectl&lt;/code&gt;は踏み台VMから実行します。&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>GKEのdefault_compute_class_enabledを有効にしても何も起きなかったので調べた</title>
      <link>/blog/20260905_terraform_gcp_advanced_gke_default_compute_class/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:02 +0900</pubDate>
      
      <guid>/blog/20260905_terraform_gcp_advanced_gke_default_compute_class/</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;code&gt;cluster_autoscaling.default_compute_class_enabled&lt;/code&gt;というスイッチがあります。Terraform Registryの説明はこうです。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If enabled, cluster autoscaler will use Compute Class with name &lt;code&gt;default&lt;/code&gt; for all the workloads, if not overriden.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;有効にすればオートスケーラが&lt;code&gt;default&lt;/code&gt;というComputeClassを使ってくれる、と読めます。ところが有効にしても何も変わりません。ノードの選ばれ方も、&lt;code&gt;kubectl get computeclasses&lt;/code&gt;の中身も、有効にする前と同じで、期待した動作になりませんでした。&lt;/p&gt;
&lt;p&gt;有効なのに何も変わらないので、&lt;strong&gt;設定が効いているのかどうかを判断できません。&lt;/strong&gt; そこで、切り替えながら実測して何を制御しているのかを確かめます。&lt;/p&gt;
&lt;p&gt;名前がややこしいことも、調べにくさに拍車をかけています。&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;Terraform&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;cluster_autoscaling.default_compute_class_enabled&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;REST API&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;clusterAutoscaling.defaultComputeClassConfig.enabled&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;コンソール&lt;/td&gt;
          &lt;td&gt;Autopilot compute class compatibility&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;同じスイッチを3通りの名前で呼んでいるので、ドキュメントを横断すると別機能に見えます。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEのStandardクラスタをTerraformで作ったことがある人です。ノード自動プロビジョニング（NAP）とオートスケーラの入門は扱いません。&lt;/p&gt;
&lt;p&gt;Autopilotクラスタそのもの、カスタムComputeClassの設計指針、GPU/TPUの選択は扱いません。&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;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;default&lt;/code&gt;というComputeClassは誰が作るのか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;スイッチのON/OFFでオートスケーラのマシン選択が変わるか&lt;/li&gt;
&lt;li&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;#%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&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.5、google 7.46.0、GKE 1.35.7-gke.1027000&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/23-gke-default-compute-class&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/23-gke-default-compute-class&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;#%e3%82%b9%e3%82%a4%e3%83%83%e3%83%81%e3%81%8c%e5%8a%b9%e3%81%8f%e5%a0%b4%e6%89%80&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;div class=&#34;mermaid&#34; align=&#34;center&#34;&gt;
  &lt;pre&gt;
flowchart TB
    POD[&#34;Pod&lt;br/&gt;nodeSelector も computeClass も指定なし&#34;]
    POD --&gt; SCHED[&#34;スケジューラ&#34;]
    SCHED --&gt;|&#34;既存ノードに空きがない&#34;| NAP[&#34;Node Auto Provisioning&#34;]
    NAP --&gt; SW{&#34;default_compute_class_enabled&#34;}
    SW --&gt;|&#34;false&#34;| OLD[&#34;従来の選び方でマシンを決める&#34;]
    SW --&gt;|&#34;true&#34;| NEW[&#34;既定の ComputeClass に従う&#34;]
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;このスイッチは&lt;strong&gt;何も指定していない Pod のために NAP がマシンを選ぶとき&lt;/strong&gt;にだけ効きます。既存ノードに空きがあれば、そこに載って終わりです。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>GKEノードプールのSURGEアップグレードをBlue/Greenと同じ条件で測って比べてみた</title>
      <link>/blog/20260905_terraform_gcp_advanced_gke_surge_node_pool_upgrade/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:01 +0900</pubDate>
      
      <guid>/blog/20260905_terraform_gcp_advanced_gke_surge_node_pool_upgrade/</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;ノードプールのアップグレード戦略はSURGEとBLUE_GREENの2つです。どちらを選ぶべきか決めたいのに、判断材料がありません。「BLUE_GREENは安全」「SURGEは速い」といった説明はあっても、どれくらい違うのかが書かれていないので、比較ができません。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/blog/20260905_terraform_gcp_advanced_gke_blue_green_node_pool_upgrade/&#34;&gt;前回&lt;/a&gt;はBlue/Greenを測りました。今回は&lt;strong&gt;同じ条件でSURGEを測って、並べます&lt;/strong&gt;。ノード数もワークロードも計測方法も前回と同一にして、違いは&lt;code&gt;upgrade_settings&lt;/code&gt;だけにしてあります。&lt;/p&gt;
&lt;p&gt;あわせて&lt;code&gt;max_surge&lt;/code&gt; / &lt;code&gt;max_unavailable&lt;/code&gt;の2つの組み合わせも比べます。この2つは「速さと引き換えに何を失うか」を決める設定です。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEのノードプールを運用でアップグレードする立場の人です。Kubernetesの入門は扱いません。&lt;/p&gt;
&lt;p&gt;Autopilotクラスタ、コントロールプレーンのアップグレード戦略、メンテナンスウィンドウは扱いません。&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;SURGEでアップグレード中にどれだけ止まるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;max_surge = 0&lt;/code&gt;にすると何が変わるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;一時的にノードがどれだけ増えるか&lt;/li&gt;
&lt;li&gt;Blue/Greenとどちらを選ぶべきか&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&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Cloud KMS、Compute Engineを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.5、google 7.46.0&lt;/li&gt;
&lt;li&gt;GKE 1.35.7-gke.1027000 → 1.35.7-gke.1150000 → 1.36.2-gke.2064000（REGULARチャンネル）&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/22-gke-surge-node-pool-upgrade&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/22-gke-surge-node-pool-upgrade&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;SURGEとBlue/Greenの進み方の違い 
    &lt;div id=&#34;surgeとbluegreenの進み方の違い&#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;#surge%e3%81%a8bluegreen%e3%81%ae%e9%80%b2%e3%81%bf%e6%96%b9%e3%81%ae%e9%81%95%e3%81%84&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;div class=&#34;mermaid&#34; align=&#34;center&#34;&gt;
  &lt;pre&gt;
flowchart TB
    subgraph SURGE[&#34;SURGE&#34;]
        S1[&#34;余剰ノードを max_surge 台足す&#34;]
        S2[&#34;1バッチずつ入れ替える&#34;]
        S3[&#34;古いノードを削る&#34;]
        S1 --&gt; S2 --&gt; S3
    end
    subgraph BG[&#34;Blue/Green&#34;]
        B1[&#34;新しいノード群を全部作る&#34;]
        B2[&#34;batch_percentage ずつ移す&#34;]
        B3[&#34;node_pool_soak_duration 待つ&#34;]
        B4[&#34;古い群をまとめて消す&#34;]
        B1 --&gt; B2 --&gt; B3 --&gt; B4
    end
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;SURGE は少しずつ入れ替え、Blue/Green は新旧を並べてから移します。&lt;strong&gt;この違いが所要時間と切り戻しやすさに出ます。&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>GKEノードプールをBlue/Greenでアップグレードして、soak期間中にロールバックしてみた</title>
      <link>/blog/20260905_terraform_gcp_advanced_gke_blue_green_node_pool_upgrade/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260905_terraform_gcp_advanced_gke_blue_green_node_pool_upgrade/</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;https://docs.cloud.google.com/kubernetes-engine/docs/concepts/node-pool-upgrade-strategies&#34; target=&#34;_blank&#34;&gt;3つの戦略があります&lt;/a&gt;。既定のSURGEは既存ノードを順番に置き換えていく方式。BLUE_GREENは新しいノード群（green）を丸ごと作ってからワークロードを移し、しばらく旧ノード群（blue）を残します。&lt;/p&gt;
&lt;p&gt;3つ目のAutoscaled blue-greenはPreviewで、greenを0台から必要に応じて増やします。ノードが倍にならない代わりに、キャンセル後のロールバックには対応していません。&lt;strong&gt;この記事で測るのは標準のBLUE_GREENだけです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;この「しばらく残す」時間が&lt;code&gt;node_pool_soak_duration&lt;/code&gt;で、&lt;strong&gt;ロールバックできる猶予&lt;/strong&gt;にあたります。満了するとblueは削除され、後戻りできません。&lt;/p&gt;
&lt;p&gt;ところが、その窓の中で実際にどうロールバックするのかは、あまり書かれていません。試したところ&lt;code&gt;gcloud container node-pools rollback&lt;/code&gt;を打っても拒否されました。正しい手順は別にあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;/blog/20260904_terraform_gcp_advanced_gke_cmek_node_boot_disk_rotation/&#34;&gt;前回&lt;/a&gt;は&lt;code&gt;kubectl drain&lt;/code&gt;で手動移行し、断をゼロにするまで構成を作り込みました。今回は同じワークロードをGKEに移させて、同じものさしで測ります。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEのクラスタをTerraformで作ったことがある人です。ノードプールのアップグレードを運用でやる立場を想定しています。Kubernetesの入門は扱いません。&lt;/p&gt;
&lt;p&gt;SURGE戦略との実測比較は次回に回します。Autopilotクラスタとコントロールプレーンのアップグレード戦略は扱いません。&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;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;soak期間中に本当にロールバックできるか。どうやるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;いまアップグレードのどの段階にいるかを、どう知るか&lt;/li&gt;
&lt;li&gt;ブートディスクのCMEK鍵バージョンはどうなるか&lt;/li&gt;
&lt;li&gt;アップグレード後の&lt;code&gt;terraform plan&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;#%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&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Cloud KMS、Compute Engineを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.5、google 7.46.0&lt;/li&gt;
&lt;li&gt;GKE 1.35.7-gke.1027000 → 1.35.7-gke.1150000（REGULARチャンネル）。&lt;strong&gt;この記事でノードが到達したのはここまでです。&lt;/strong&gt; 後半に出る 1.36.2-gke.2064000 はコントロールプレーンの &lt;code&gt;master_version&lt;/code&gt; で、2回目の移行先は記録していません&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Blue/Greenアップグレード中はノードが一時的に&lt;strong&gt;倍&lt;/strong&gt;になります。PodのセカンダリレンジとvCPUの割り当てに余裕が要ります。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>GKEノードのブートディスクをCMEKで暗号化して鍵をローテーションしてみた</title>
      <link>/blog/20260904_terraform_gcp_advanced_gke_cmek_node_boot_disk_rotation/</link>
      <pubDate>Fri, 04 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260904_terraform_gcp_advanced_gke_cmek_node_boot_disk_rotation/</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;顧客管理の暗号鍵（CMEK）でGKEノードのブートディスクを暗号化すると、鍵の管理責任がこちらに移ります。定期的なローテーションもその一つです。&lt;/p&gt;
&lt;p&gt;ところが鍵をローテーションしても、稼働中のノードは何も変わりません。ディスクは古い鍵バージョンで暗号化されたままです。しかも&lt;code&gt;terraform plan&lt;/code&gt;は差分なしで通ります。「回したから終わり」と思って旧バージョンを無効化すると、次にノードが再起動したとき起動できません。&lt;/p&gt;
&lt;p&gt;この記事では、鍵をローテーションしたあと何が起きるかを実測します。新しい鍵バージョンへの移し方と、移行中にサービスがどれだけ止まるかまで見ます。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEのクラスタをTerraformで作ったことがあり、Cloud KMSの鍵を触ったことがある人です。それぞれの入門は扱いません。&lt;/p&gt;
&lt;p&gt;Blue/Greenアップグレードを使った移行は扱いません。etcdやPersistentVolumeのCMEKも扱いません。ノードのブートディスクだけを見ます。&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;/li&gt;
&lt;li&gt;&lt;strong&gt;ローテーション後の&lt;code&gt;terraform plan&lt;/code&gt;は差分を検知するか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;新しい鍵バージョンにするには、本当にノードプールの入れ替えが必要か&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ノードプールを入れ替える移行で、サービスはどれだけ止まるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;旧鍵バージョンを無効化すると何が起きるか&lt;/li&gt;
&lt;li&gt;Cloud Loggingに何が残るか&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&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Cloud KMS、Compute Engineを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.5、google 7.46.0、GKE 1.35.7-gke.1027000（REGULARチャネル）&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/20-gke-cmek-node-boot-disk-rotation&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/20-gke-cmek-node-boot-disk-rotation&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;div class=&#34;mermaid&#34; align=&#34;center&#34;&gt;
  &lt;pre&gt;
flowchart TB
    subgraph GCP[&#34;Google Cloud&#34;]
        KMS[&#34;Cloud KMS&lt;br/&gt;鍵バージョン 1 / 2&#34;]
        subgraph VPC[&#34;VPC&#34;]
            subgraph GkeSubnet[&#34;GKE Subnet（外部IPなし）&#34;]
                NP1[&#34;ノードプール v1&lt;br/&gt;ディスク = 鍵バージョン 1&#34;]
                NP2[&#34;ノードプール v2&lt;br/&gt;ディスク = 鍵バージョン 2&#34;]
            end
            Bastion[&#34;踏み台&#34;]
        end
    end

    KMS --&gt;|&#34;作成時のprimaryで暗号化&#34;| NP1
    KMS --&gt;|&#34;作成時のprimaryで暗号化&#34;| NP2
    Bastion --&gt;|&#34;kubectl&#34;| NP1
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;ノードプールは2つとも&lt;code&gt;boot_disk_kms_key&lt;/code&gt;に&lt;strong&gt;同じ鍵&lt;/strong&gt;を指定しています。違うのは作られた時刻だけです。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKEのPodにSecret Managerの値をファイルとしてマウントしてみた</title>
      <link>/blog/20260904_terraform_gcp_advanced_gke_secret_manager_csi/</link>
      <pubDate>Fri, 04 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260904_terraform_gcp_advanced_gke_secret_manager_csi/</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/20260811_terraform_gcp_secret_manager/&#34;&gt;Terraformのwrite-only argumentでSecret Managerへ値を登録する&lt;/a&gt;では、シークレットを保管するところまでを扱いました。保管した値をPodからどう取り出すかは残ったままです。&lt;/p&gt;
&lt;p&gt;環境変数で渡す方法は手軽ですが、&lt;code&gt;kubectl describe pod&lt;/code&gt;やプロセス一覧から値が見えてしまいます。GKEのSecret Manager add-onを使うと、Podのファイルシステムにマウントする形で渡せます。&lt;/p&gt;
&lt;p&gt;ただ「マウントできた」だけでは運用に足りません。シークレットを更新したら自動で反映されるのか。権限を剥がしたら動いているPodはどうなるのか。ログに何が残るのか。運用に入ってから調べ直すのでは遅いので、この3点を先に確かめておく必要があります。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEでPodを動かしたことがあり、Secret Managerに値を入れたことがある人です。それぞれの入門は扱いません。&lt;/p&gt;
&lt;p&gt;環境変数への同期（&lt;code&gt;secretObjects&lt;/code&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%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;Podの中でマウントしたファイルが読めること。Pod specに値が現れないこと&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;シークレットを更新したとき、稼働中のPodに自動で反映されるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IAM権限を剥がしたとき、稼働中のPodと新しいPodがそれぞれどうなるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Cloud Loggingに何が残るか&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、Secret Manager、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/19-gke-secret-manager-csi&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/19-gke-secret-manager-csi&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;div class=&#34;mermaid&#34; align=&#34;center&#34;&gt;
  &lt;pre&gt;
flowchart TB
    subgraph GCP[&#34;Google Cloud&#34;]
        SM[&#34;Secret Manager&lt;br/&gt;（値はTerraform管理外）&#34;]
        subgraph Project[&#34;Project&#34;]
            subgraph VPC[&#34;VPC&#34;]
                subgraph GkeSubnet[&#34;GKE Subnet（外部IPなし）&#34;]
                    CSI[&#34;CSIドライバ&lt;br/&gt;DaemonSet&#34;]
                    Pod[&#34;Pod&lt;br/&gt;/var/secrets/db-password.txt&#34;]
                end
                Bastion[&#34;踏み台&#34;]
            end
        end
    end

    CSI --&gt;|&#34;Private Google Access&#34;| SM
    CSI --&gt;|&#34;ファイルとして配置&#34;| Pod
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;ノードには外部IPがありません。Secret Manager APIへはPrivate Google Access経由で到達します。&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>Peering越しのPod→VM通信が落ちる原因を、ルートだと思い込んでいた話</title>
      <link>/blog/20260902_terraform_gcp_advanced_gke_routes_based_ip_masq/</link>
      <pubDate>Wed, 02 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260902_terraform_gcp_advanced_gke_routes_based_ip_masq/</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;複数のGoogle Cloud Projectをまたぐ構成では、「別チームのVMへ自分のPodから届かない」という壁にぶつかります。&lt;/p&gt;
&lt;p&gt;相手側の設定を変えられない、あるいは変えたくない場面もあります。自分側だけで解決したいところです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;この記事は、いったん公開した内容を実測で覆したものです。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当初は「routes-basedなクラスタでは Pod のルートが交換されないから失敗する」と説明していました。&lt;strong&gt;確かめたら、どちらも違いました。&lt;/strong&gt;&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;routes-based なクラスタ&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;useIpAliases: true&lt;/code&gt; で &lt;strong&gt;VPC-native&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Pod CIDR 宛のルートは交換されない&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;peering-route-...&lt;/code&gt; として&lt;strong&gt;交換されていた&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;失敗の原因はルートの非交換&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;宛先側のファイアウォール&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;結果そのものは変わりません。宛先側を触らず ConfigMap だけで復旧できます。&lt;strong&gt;変わったのは、なぜ直るのかの説明です。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Terraformの基本操作は前提としています。Dataplane V2 などのハードニング設定は&lt;a href=&#34;/blog/20260902_terraform_gcp_advanced_gke_dataplane_v2_networkpolicy/&#34;&gt;前回のNetworkPolicy記事&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%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;2プロジェクト構成で、PodからPeering先のVMへのcurlが失敗すること（Step 1: 再現）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;宛先側の設定を変えず、ip-masq-agentのConfigMapだけで成功すること&lt;/strong&gt;（Step 2: 解決）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;クラスタは routes-based なのか VPC-native なのか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pod CIDR 宛のルートは Peering で交換されているのか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;失敗の原因はルートなのかファイアウォールなのか&lt;/strong&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;#%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;strong&gt;2つ&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;GKE、Compute Engine、VPC Peeringを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.3、google 7.46.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GKE・ノードイメージ・ip-masq-agent のバージョンは記録していません。ip-masq-agent が既定で入るかどうかも、既定の &lt;code&gt;nonMasqueradeCIDRs&lt;/code&gt; も、このあたりで変わります。再現するなら次を控えておきます。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKE Dataplane V2を有効化し、NetworkPolicyでPod間通信を遮断してみた</title>
      <link>/blog/20260902_terraform_gcp_advanced_gke_dataplane_v2_networkpolicy/</link>
      <pubDate>Wed, 02 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260902_terraform_gcp_advanced_gke_dataplane_v2_networkpolicy/</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;の構成は、デフォルトのデータプレーン（kube-proxy、iptablesベース）を使っていました。同じネームスペースに複数チームのアプリが同居する場合、Pod間の通信を意図したものだけに制限したい場面があります。&lt;/p&gt;
&lt;p&gt;GKE Dataplane V2（Cilium/eBPFベース）は、NetworkPolicyの強制がビルトインされています。追加のCNI（Calico等）を用意しなくても、ラベルベースでPod間通信を制限できます。&lt;/p&gt;
&lt;p&gt;「Dataplane V2を有効化した」ことと「NetworkPolicyが実際に意図通り機能する」ことは別です。許可したラベルのPodからは通り、許可していないPodからは遮断されることを、実際にPodを起動して確認します。&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;Filestore CSI、GCS FUSE CSI、Secret Manager CSI、NodeLocal DNSCache、詳細なLogging/Monitoring設定は扱いません。Dataplane V2とNetworkPolicyの検証に範囲を絞ります。&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;code&gt;datapath_provider = &amp;quot;ADVANCED_DATAPATH&amp;quot;&lt;/code&gt;でDataplane V2を有効化できること&lt;/li&gt;
&lt;li&gt;許可したラベルのPodからは、NetworkPolicyで保護されたPodへ通信できること&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;許可していないPodからは、実際に通信が遮断されること&lt;/strong&gt;（apply成功とは別の確認）&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/16-gke-dataplane-v2-networkpolicy&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/16-gke-dataplane-v2-networkpolicy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/blog/20260831_terraform_gcp_advanced_gke_private_bastion/&#34;&gt;前々回: GKEプライベートクラスタ+踏み台&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;#%e9%80%9a%e4%bf%a1%e3%81%8c%e3%81%a9%e3%81%93%e3%81%a7%e9%81%ae%e6%96%ad%e3%81%95%e3%82%8c%e3%82%8b%e3%81%8b&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;div class=&#34;mermaid&#34; align=&#34;center&#34;&gt;
  &lt;pre&gt;
flowchart LR
    subgraph NODE[&#34;GKE ノード&#34;]
        A[&#34;Pod A&lt;br/&gt;label: role=client&#34;]
        EBPF[&#34;Dataplane V2&lt;br/&gt;eBPF による適用点&#34;]
        B[&#34;Pod B&lt;br/&gt;label: role=server&#34;]
    end
    NP[&#34;NetworkPolicy&lt;br/&gt;podSelector: role=server&lt;br/&gt;ingress: role=client のみ&#34;]
    NP -.-&gt;|&#34;ルールを配る&#34;| EBPF
    A --&gt;|&#34;許可&#34;| EBPF --&gt; B
    C[&#34;Pod C&lt;br/&gt;label なし&#34;] --&gt;|&#34;遮断&#34;| EBPF
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;NetworkPolicy はルールを宣言するだけで、実際に落とすのは Dataplane V2 側です。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKEのノードあたり最大Pod数を小さくしすぎるとどうなるか試してみた</title>
      <link>/blog/20260902_terraform_gcp_advanced_gke_max_pods_per_node/</link>
      <pubDate>Wed, 02 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260902_terraform_gcp_advanced_gke_max_pods_per_node/</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;の構成では、Pod用セカンダリIPレンジ（&lt;code&gt;pods_cidr&lt;/code&gt;）を&lt;code&gt;/16&lt;/code&gt;という余裕のあるサイズにしていました。実際の設計では、ノード数とノードあたりの最大Pod数から逆算してサイズを決める必要があります。&lt;/p&gt;
&lt;p&gt;「レンジを大きく取れば安全」で終わらせず、ノードあたりの最大Pod数を意図的に小さくして、何が起きるかを実際に確認します。ノードあたりの最大Pod数（&lt;code&gt;default_max_pods_per_node&lt;/code&gt;）は作成後に変更できないため、事前の見積もりを誤ると、クラスタを作り直す必要が出てきます。&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;複数ノード・複数ゾーンでの検証は扱いません。&lt;code&gt;11-gke-private-bastion&lt;/code&gt;はゾーナル・1ノード構成のままです。&lt;code&gt;services_cidr&lt;/code&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%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;ノードあたりの最大Pod数を小さく（8）設定してクラスタを作成できること&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;その上限だけで、GKEの管理コンポーネント自体がスケジュールできなくなること&lt;/strong&gt;（apply成功とは別の確認）&lt;/li&gt;
&lt;li&gt;ユーザーのPodも同じ理由でスケジュールに失敗すること&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/11-gke-private-bastion&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/11-gke-private-bastion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/blog/20260831_terraform_gcp_advanced_gke_private_bastion/&#34;&gt;前々回: GKEプライベートクラスタ+踏み台&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;新規のterraform-gcp-examplesディレクトリは作りません。今回の検証はレンジサイズと実際のPod数の関係に絞っているため、&lt;code&gt;11-gke-private-bastion&lt;/code&gt;に&lt;code&gt;max_pods_per_node&lt;/code&gt;変数を追加し、既存のコードを流用しています。&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>
    
    <item>
      <title>TerraformでGKEのコントロールプレーンをプライベート＋パブリックの両方から接続してみた</title>
      <link>/blog/20260901_terraform_gcp_advanced_gke_dual_endpoint/</link>
      <pubDate>Tue, 01 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260901_terraform_gcp_advanced_gke_dual_endpoint/</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;の構成は、コントロールプレーンへのパブリックエンドポイントを完全に無効化していました。踏み台がないと&lt;code&gt;kubectl&lt;/code&gt;が一切できません。開発初期の検証など、許可した自分のIPからは踏み台を経由せず直接繋ぎたい場面もあります。&lt;/p&gt;
&lt;p&gt;GKEプライベートクラスタは、プライベートエンドポイントとパブリックエンドポイントを併用できます。パブリック側は許可IPだけに絞れるので、「VPC内は無条件、VPC外は限定IPのみ」という2段構えのアクセス制御になります。&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;Cloud VPN・Interconnect経由のオンプレミス接続は扱いません。IAM/RBACの認可設計も扱わず、接続経路の確認に絞ります。&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;ローカルPCから、踏み台を経由せずパブリックエンドポイント経由で直接&lt;code&gt;kubectl&lt;/code&gt;できること&lt;/li&gt;
&lt;li&gt;許可していないIPからは接続できないこと（apply成功とは別の確認）&lt;/li&gt;
&lt;li&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;#%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/15-gke-dual-endpoint&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/15-gke-dual-endpoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/blog/20260831_terraform_gcp_advanced_gke_private_bastion/&#34;&gt;前々回: GKEプライベートクラスタ+踏み台&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;一次情報での裏取り：&lt;code&gt;enable_private_endpoint&lt;/code&gt;の挙動 
    &lt;div id=&#34;一次情報での裏取りenable_private_endpointの挙動&#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%b8%80%e6%ac%a1%e6%83%85%e5%a0%b1%e3%81%a7%e3%81%ae%e8%a3%8f%e5%8f%96%e3%82%8aenable_private_endpoint%e3%81%ae%e6%8c%99%e5%8b%95&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;今回のコードは、別環境で検証したコードを土台にしています。ただし、そのコードは&lt;code&gt;private_cluster_config.enable_private_endpoint = true&lt;/code&gt;のままパブリックエンドポイントも使える、という前提で書かれていました。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKEプライベートクラスタからMemorystore for Redis Clusterへ接続してみた</title>
      <link>/blog/20260831_terraform_gcp_advanced_gke_bastion_redis_cluster/</link>
      <pubDate>Mon, 31 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260831_terraform_gcp_advanced_gke_bastion_redis_cluster/</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;前々回&lt;/a&gt;はGKEプライベートクラスタと踏み台を作成しました。&lt;a href=&#34;/blog/20260831_terraform_gcp_advanced_gke_bastion_redis_instance/&#34;&gt;前回&lt;/a&gt;は、そこにMemorystore for Redis（BASIC）をPrivate Service Access（PSA）で接続しました。&lt;/p&gt;
&lt;p&gt;同じMemorystoreでも、Redis Clusterの接続方式はPrivate Service Connect（PSC）です。専用のSubnetとService Connection Policyが必要になります。接続先も単一のホストではなく、Discovery Endpointです。名前が似ているため、前回のPSA接続の設定をそのまま流用しようとするとハマります。この違いを整理しておく必要があります。&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;a href=&#34;/blog/20260831_terraform_gcp_advanced_gke_bastion_redis_instance/&#34;&gt;前回のRedis Instance（PSA接続）記事&lt;/a&gt;と読み比べると、PSAとPSCの違いが分かりやすくなります。&lt;/p&gt;
&lt;p&gt;複数シャード構成、AUTH・転送時暗号化の有効化、レプリカ構成（HA）は最小構成のため扱いません。&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;Private Service ConnectでGKE用VPCとRedis Clusterを接続できること&lt;/li&gt;
&lt;li&gt;Memorystore for Redis Cluster（最小構成）を作成できること&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PodからDiscovery Endpoint経由で実際に接続し、&lt;code&gt;redis-cli -c&lt;/code&gt;（cluster mode）でPING・SET・GETが成功すること&lt;/strong&gt;（Cluster作成の確認とは別）&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、Memorystoreを操作できる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;Redis ClusterはPSAのようにVPC同士をPeeringしません。代わりに、Redis側のサービスをVPC内のエンドポイントとして公開します。そのために専用のSubnet（&lt;code&gt;/29&lt;/code&gt;）と、どのSubnetをエンドポイントに使うかを定義する&lt;code&gt;ServiceConnectionPolicy&lt;/code&gt;が必要です。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKEプライベートクラスタからMemorystore for Redisへ接続してみた</title>
      <link>/blog/20260831_terraform_gcp_advanced_gke_bastion_redis_instance/</link>
      <pubDate>Mon, 31 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260831_terraform_gcp_advanced_gke_bastion_redis_instance/</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;前回&lt;/a&gt;、コントロールプレーンも公開しないGKEプライベートクラスタと踏み台を作成しました。実際のアプリケーションでは、このクラスタからキャッシュやセッションストアへ接続する場面が多くあります。&lt;/p&gt;
&lt;p&gt;Memorystore for RedisはVPCの外にあるマネージドサービスです。そのままではGKEのVPCから到達できません。Private Service Access（PSA）でVPCとサービス提供者側のネットワークをPeeringして、初めてPodから接続できます。&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;Redis Cluster（PSC接続）、Redisのレプリケーションや可用性設計は扱いません。これらは別記事で扱う予定です。&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;Private Service AccessでGKE用VPCとRedisをPeeringできること&lt;/li&gt;
&lt;li&gt;Memorystore for Redis（BASIC）を作成できること&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PodからRedisへ実際に接続し、PING・SET・GETが成功すること&lt;/strong&gt;（Instance作成の確認とは別）&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、Memorystoreを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.3、google 7.43.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;RedisはVPCの外にあるマネージドサービスです。Private Service AccessのPeering RangeとVPC Peering Connectionが、GKE用VPCとRedis側のネットワークをつなぐ経路です。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKEプライベートクラスタと踏み台VMを作成してみた</title>
      <link>/blog/20260831_terraform_gcp_advanced_gke_private_bastion/</link>
      <pubDate>Mon, 31 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260831_terraform_gcp_advanced_gke_private_bastion/</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;これまでのGKE記事（&lt;a href=&#34;/blog/20260811_terraform_gcp_gke/&#34;&gt;Basic編&lt;/a&gt;、&lt;a href=&#34;/blog/20260811_terraform_gcp_advanced_gke_workload_identity_gcs/&#34;&gt;Workload Identity編&lt;/a&gt;）は、コントロールプレーンも外部から到達できるパブリックエンドポイントのクラスタでした。実務ではコントロールプレーンを公開しないプライベートエンドポイントが基本です。&lt;/p&gt;
&lt;p&gt;ただしプライベートエンドポイントにすると、&lt;code&gt;kubectl&lt;/code&gt;を直接実行する経路がなくなります。VPCの外からは、Clusterが存在することさえAPIを通して確認できません。&lt;/p&gt;
&lt;p&gt;そこでVPC内に踏み台（bastion）VMを置き、&lt;code&gt;kubectl&lt;/code&gt;はすべて踏み台経由で実行する構成にします。踏み台自体もIAP TCP forwarding経由でのみSSHでき、外部IPを持ちません。&lt;/p&gt;
&lt;p&gt;Terraformの基本操作と、IAP SSH（&lt;a href=&#34;/blog/20260811_terraform_gcp_advanced_gce_iap_vpc/&#34;&gt;GCE + IAP編&lt;/a&gt;）は前提としています。&lt;/p&gt;
&lt;p&gt;Redis Memorystoreとの連携、Internal HTTP Load Balancerは扱いません。Podからの実際のWorkload Identity呼び出しも扱いません。これらは本記事の構成を土台に、別記事で扱う予定です。&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;コントロールプレーンもノードも外部IPを持たないGKE Standardクラスタを作成できること&lt;/li&gt;
&lt;li&gt;&lt;code&gt;master_authorized_networks&lt;/code&gt;で接続元を踏み台Subnetだけに絞れること&lt;/li&gt;
&lt;li&gt;踏み台VM経由でのみ&lt;code&gt;kubectl&lt;/code&gt;が実行できること&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Artifact Registryのイメージが実際にPodとして配信できること&lt;/strong&gt;（Node起動確認とは別）&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、Artifact Registryを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.3、google 7.43.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用とは別のSubnetに置きます。コントロールプレーンへの接続を、この踏み台SubnetのCIDRだけに絞るためです。IAPとArtifact RegistryはVPCの外にある、Google管理のサービスです。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでGKE Workload IdentityからCloud Storageへアクセスしてみた</title>
      <link>/blog/20260811_terraform_gcp_advanced_gke_workload_identity_gcs/</link>
      <pubDate>Tue, 11 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260811_terraform_gcp_advanced_gke_workload_identity_gcs/</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;GKE PodからGoogle Cloud APIを呼ぶとき、JSON Keyを使う方法は管理の手間が増えます。Secretとしての漏洩経路にもなります。PodにKeyファイルを配りたくないところです。&lt;/p&gt;
&lt;p&gt;Workload Identity Federation for GKEを使えば、鍵なしで権限を借用できます。Kubernetes Service Account（KSA）をGoogle Cloud Service Account（GSA）に紐づける仕組みです。ここでは実際にPodからCloud Storageへ書き込みます。&lt;/p&gt;
&lt;p&gt;Terraformの基本操作とkubectlの基本操作は前提としています。GKEのWorkload Identityが初めての方向けです。&lt;/p&gt;
&lt;p&gt;Private Cluster化、Network Policy、複数Namespaceでの権限分離は扱いません。&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;Workload Identity Federationを有効にしたGKE Clusterを作成できること&lt;/li&gt;
&lt;li&gt;Kubernetes Service AccountとGoogle Cloud Service Accountを関連付けられること&lt;/li&gt;
&lt;li&gt;Service Account KeyなしでPodからCloud Storageへ書き込めること&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、kubectl&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、IAM、Cloud Storageを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.3、google 7.43.0、kubernetes 2.38.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;KubernetesのService AccountとGoogle CloudのService Accountは別物です。Workload Identityは、その2つを結びつけます。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
