<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>VPC on LIFELOG</title>
    <link>/tags/vpc/</link>
    <description>Recent content in VPC on LIFELOG</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <copyright>© 2026 0222-nnn</copyright>
    <lastBuildDate>Wed, 02 Sep 2026 00:00:00 +0900</lastBuildDate><atom:link href="/tags/vpc/index.xml" rel="self" type="application/rss+xml" />
    
    <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>
    
  </channel>
</rss>
