Skip to content

ノードの受信の防火壁を Cilium の Host Firewall で作る - #658

Merged
5ym merged 1 commit into
mainfrom
cilium-host-firewall
Oct 31, 2026
Merged

5ym merged 1 commit into
mainfrom
cilium-host-firewall

Conversation

@5ym

@5ym 5ym commented Oct 31, 2026

Copy link
Copy Markdown
Collaborator

#657(Talos の防火壁 + NOTRACK の DaemonSet)の代わりの案。Talos の防火壁は使わず、Cilium の Host Firewall で外から通すポートを決める。

  • bootstrap/cilium-values.yaml: hostFirewall.enabled: true
  • deploy/cluster/host-firewall.yaml: ノードを選ぶ CiliumClusterwideNetworkPolicy。外からは docs/router.md の表のポート(TCP 80・443・853・3129・6443・8443、UDP 8443・51820)と ICMP / ICMPv6 の要るものだけ、クラスタの中と内側のアドレス(10/8・100.64/10・fc00::/7・fe80::/10)からは全部
  • boot CI: ポリシーを当てて、外から 443 は通り 10250 は通らない・LAN から 10250 は通る・Pod からノードの IP(v4 / v6)の Gateway に届く、を見る

実機には当てていない。当てるときは、ホストのエンドポイントを監査モードにしてから入れる。

🤖 Generated with Claude Code

https://claude.ai/code/session_01T9PbUfqG4pPxus99UeLiJs

Talos の防火壁は conntrack の invalid を捨てる規則を必ず入れ、Envoy の帰りを NOTRACK に
する Cilium と噛み合わず、Pod からノード自身の IP の Gateway が捨てられた(#652)。
hostFirewall を有効にし、ノードを選ぶ CiliumClusterwideNetworkPolicy で外から通す
ポートを決める。boot CI で、外から 443 は通り 10250 は通らない・LAN からは通る・
Pod からノードの IP の Gateway に届く、を見る。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T9PbUfqG4pPxus99UeLiJs
@5ym
5ym marked this pull request as ready for review October 31, 2026 15:53
@5ym
5ym merged commit 524d636 into main Oct 31, 2026
5 checks passed
@5ym
5ym deleted the cilium-host-firewall branch October 31, 2026 15:53
@claude

claude Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 23s —— View job


レビュー結果(PR は merge 済み)

host-firewall.yaml、cilium-values.yaml、docs/router.md の LAN 表を突き合わせました。ブロッカーになる不具合は見つかりませんでした。 boot CI の workflow(talos-boot.yml)は読んでいません。

確認できたこと:

  • LAN(10.0.0.0/24、別 LAN 10.10.0.0/24)は許可する 10/8 に収まります。DHCP は使わずノードは静的設定なので、192.168/16 などを許可から漏らした影響はありません。
  • 外に開くポートは docs/router.md の表と一致しています。
  • ホストのポリシーは暗黙 deny になります。それをコメントに明記し、Talos の防火壁を使わない理由(受信の防火壁を外し、DL360 の eno4 の sysctl を消す #652)も残してあります。

要確認(実機に当てる前に):

  1. ロックアウトの危険: world からは Talos API(50000)と kubelet(10250)が届かなくなります。LAN / NetBird からの 10/8・100.64/10 経由の経路が唯一の管理口です。PR 本文にある通り、先にホストのエンドポイントを監査モードにしてから入れてください。IPv6 の GUA は許可に入れていないので、IPv6 だけで繋いでいる管理経路があれば落ちます(docs/router.md にも IPv4 で繋ぐとあります)。
  2. ICMP の見落とし: world の ICMPv6 に type 137(Redirect)や 129(Echo Reply)はありません。ノード発の ping の返りは conntrack の established で通るはずですが、実機では要確認です。
  3. world エンティティの範囲: Cilium の world は、LAN の IP も含めクラスタ外の全部を指します。許可の順序に意味はなく、10/8 を先に許可した規則と OR になるだけです。この点は問題ありません。

テストは boot CI で、外から 443 は通り 10250 は通らない、LAN から 10250 は通る、Pod からノード IP(v4 / v6)の Gateway に届く、の 3 点を見ています。今回の変更に対して必要な点は押さえられています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant