概要

Kubernetes の Docker ベースのビルド(make/build)で、ソース同期に使う rsyncd コンテナの IP アドレス検出が失敗し、イメージビルドが落ちる問題を修正したものです。v1.32 / v1.33 / v1.34 の各リリースブランチ向けに同様の修正が取り込まれています。

変更内容(何が変わったか)

build/common.shkube::build::start_rsyncd_container() で、docker inspect --format による IP 取得ロジックが変更されました。

  • 旧: {{ .NetworkSettings.IPAddress }}
  • 新: {{range .NetworkSettings.Networks}}{{.IPAddress}},{{end}}Networks 側から IP を列挙し、先頭の 1 つを採用(cut -d',' -f1

背景(なぜこの変更が必要か)

不具合報告では、Kubernetes < 1.35 相当のブランチで Dockerized build が CI などで失敗し、docker inspect のテンプレート評価時に .NetworkSettings.IPAddress が存在しないため map has no entry for key "IPAddress" となって停止していました。 一方で、master/1.35+ 側はビルド処理の整理(rsync 連携の撤廃)によりこの経路自体が使われなくなっており、問題は主にそれ以前のリリースブランチで顕在化していました。

影響(運用者/利用者/開発者への影響、注意点、移行)

  • 運用者: クラスタ稼働の挙動そのものではなく「Kubernetes をソースからビルドしてイメージを作る」工程(CI、ディストリビュータ、自前ビルド)に影響する修正です。
  • 利用者/開発者: v1.32/v1.33/v1.34 系で Dockerized build(例: make quick-release-images など)を回す環境では、該当 PR を含むブランチ/リリースへ更新することでビルド失敗が回避されます。
  • 注意点: 複数ネットワーク接続時は Networks から列挙された IP の「先頭 1 つ」を使う実装になります。

用語メモ(用語の軽い説明)

  • docker inspect --format: Docker オブジェクト情報を Go テンプレートで整形・抽出する機能。
  • NetworkSettings.Networks: コンテナが接続しているネットワークごとの設定(IP 等)を持つ構造。
  • rsyncd: rsync のデーモン。ここではコンテナ間でソース/生成物を同期する用途。
  • kube-cross: Kubernetes ビルド用の事前ビルド済みコンテナイメージ(ツールチェーンを含む)。

参考リンク