From f3fddacae9c22e86c3473b8c8df703582e0958e2 Mon Sep 17 00:00:00 2001 From: Ruk Doe Date: Sun, 1 Nov 2026 01:43:55 +0900 Subject: [PATCH] =?UTF-8?q?=E9=98=B2=E7=81=AB=E5=A3=81=E3=82=92=20Cilium?= =?UTF-8?q?=20=E3=81=AB=E3=81=97=E3=81=9F=E3=81=93=E3=81=A8=E3=81=A8=20Arc?= =?UTF-8?q?=20=E3=81=AE=20HuC=20=E3=82=92=20docs=20=E3=81=A8=20ROADMAP=20?= =?UTF-8?q?=E3=81=AB=E6=9B=B8=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Talos の防火壁を前提にした記述(router.md・talos.md・recovery/README.md)を Cilium の Host Firewall に直し、ROADMAP の防火壁と HuC を済みにする。 AMT は 10.10.0.3 にする案(eno1 を HUMAX 側に挿し替える)を書いておく。 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01T9PbUfqG4pPxus99UeLiJs --- ROADMAP.md | 12 +++++++----- bootstrap/talos.md | 16 ++++++++-------- docs/router.md | 5 +++-- docs/talos.md | 2 +- recovery/README.md | 2 +- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index bcad3326..88a10123 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -6,7 +6,7 @@ ## いまここ **2026-10-31 に HP Z440 へ移し、Talos(OpenEBS LVM)で全部のアプリが動いている。** 残りは下の Phase 2.5 の空いているところ -(AMT・受信の防火壁・VolSync)。 +(AMT・VolSync)。 ## Phase 2.5 — HP Z440 へ移す(Talos のまま) @@ -18,11 +18,13 @@ bond0 の MAC は設定で固定してあるのでルーターは触らない。 - [x] Z440 用の schematic(`siderolabs/i915`)、NIC の別名(`LinkAliasConfig`。#649・#650) - [x] 移して確かめる(2026-10-31)。途中で直したもの: Pod から PV を 2 つ同時に付ける(`shared: "yes"`。#655)、 xfs で作れない 128Mi の PVC(#653・denpa#1840)、pgload と復元の落とし穴(#651 ほか) -- [ ] **AMT を設定する**(10.0.0.5。MEBx は Ctrl+P。手順は [docs/z440-migration.md](docs/z440-migration.md)「3. リモート管理」)。 +- [ ] **AMT を設定する**(MEBx は Ctrl+P。手順は [docs/z440-migration.md](docs/z440-migration.md)「3. リモート管理」)。 + AMT は内蔵の I218-LM(`eno1`)でしか動かないので、`eno1` を 10.10 側(HUMAX)に挿し替え、361T の 2 ポートを bond0 に回して + **10.10.0.3** にする案(作業用 PC から NetBird なしで届く。`LinkAliasConfig` の MAC の入れ替えと `disable_ipv6` の名前を `eno1` に)。 済んだら SOL の `console=` を schematic に足し、docs の「iLO(10.0.0.3)」を AMT に直す -- [ ] **受信の防火壁を戻す**(#646 で入れ、#652 で外した)。Pod からノード自身の IPv6 の 443 番(fj.doany.io)が conntrack の invalid として - 捨てられる。Cilium と両立する形を決める(経緯は [bootstrap/talos.md](bootstrap/talos.md)) -- [ ] Arc の HuC が `timed out waiting for MEI GSC` で読めていない。AV1 / H.265 のエンコードに効くかを確かめる +- [x] **受信の防火壁を Cilium の Host Firewall で作る**(#658。Talos の防火壁は Pod からノードの IP の Gateway を捨てるので使わない。 + 経緯は [bootstrap/talos.md](bootstrap/talos.md))。外から 50000・10250・2379 が閉じ、Pod からの fj.doany.io が通るのを確かめた +- [x] Arc の HuC を読む(#659。`siderolabs/mei`)。QSV の ICQ が AV1・H.264 で通るようになった(H.265 の ICQ は DG2 では通らず、VA-API に回る) - [ ] **ストレージとバックアップを入れ替える**(入れ直しのついでに。理由は [docs/decisions.md](docs/decisions.md)「Z440 で、ストレージを OpenEBS LVM LocalPV に…」) - [x] ディスクの切り方: `u-local-path` をやめ、`RawVolumeConfig` + `LVMVolumeGroupConfig` で VG `data` にする。 thin プールは Talos で作れないので `bootstrap/storage.yaml` の DaemonSet が作る(書いてあるだけ。効くのは Z440 で入れ直したとき) diff --git a/bootstrap/talos.md b/bootstrap/talos.md index cdaae6e5..17cb5e9c 100644 --- a/bootstrap/talos.md +++ b/bootstrap/talos.md @@ -65,14 +65,14 @@ needle は `render.sh` の末尾の 1 か所だけに置く。 | `talos.sops.yaml` の先頭の Kubernetes の `# version:` | `render.sh` → `apply-config` → `talosctl upgrade-k8s --to <新しい版>` | 無し | | `talos.sops.yaml` の本文と、`bootstrap/` の残りの全部(`*-values(.sops).yaml`(2 つめのドキュメントの Secret も)・`apiserver-rbac.yaml`・`storage.yaml`) | `render.sh` → `apply-config` → `talosctl upgrade-k8s --to <今の版>`(下の「inlineManifests を直したとき」) | 場合による | -**受信の防火壁(`NetworkDefaultActionConfig`・`NetworkRuleConfig`)は 2026-10-31 から外してある。** -#646 で入れたが、Pod からノード自身の IP の 443 番(Gateway。Pod は fj.doany.io の AAAA = ノードの公開 IPv6 で Forgejo に来る)が -conntrack の invalid として捨てられ、TCP はつながるが応答が来なかった(Argo CD が Forgejo の非公開リポジトリを読めず、runner も落ちる)。 -`ingress: accept` にしても Talos は invalid を捨てる規則を残すので、文書ごと外した。`nf_conntrack_tcp_be_liberal` では直らない。 -Cilium の BPF のホストルーティングで往復の片方が netfilter を通らないためと見ている(未確認)。戻すときは #646 の 5 つの文書と -`render.sh` の needle を戻し、Pod から `curl -6 https://fj.doany.io/api/v1/version` が通ることを確かめる。 - -**ネットワークと受信の防火壁(`BondConfig`・`LinkConfig`・`NetworkRuleConfig` など)を変えたら `--mode=try` で当てる。** +**ノードの受信の防火壁は Talos(`NetworkDefaultActionConfig`・`NetworkRuleConfig`)ではなく Cilium の Host Firewall** +(`cilium-values.yaml` の `hostFirewall` と `../deploy/cluster/host-firewall.yaml`)。Talos の防火壁は conntrack の invalid を捨てる規則を +必ず入れ(`ingress: accept` でも残る)、Cilium は Envoy から Pod への帰りを raw の OUTPUT で NOTRACK にするので、Pod からノード自身の IP の +Gateway(Pod は fj.doany.io の AAAA = ノードの公開 IPv6 で Forgejo に来る)の 2 つ目以降のパケットが invalid として捨てられた +(2026-10-31。#646 で入れ、#652 で外し、#658 で Cilium にした。`nf_conntrack_tcp_be_liberal` では直らない)。 +talos-boot が「外から 10250 は通らない」「Pod からノードの IP の Gateway に届く」を見ている。 + +**ネットワーク(`BondConfig`・`LinkConfig`・`LinkAliasConfig` など)を変えたら `--mode=try` で当てる。** 間違えると Talos の API ごと届かなくなるが、`try` なら時間が来れば元に戻る: ```shell diff --git a/docs/router.md b/docs/router.md index 10803c78..6fb6347f 100644 --- a/docs/router.md +++ b/docs/router.md @@ -43,11 +43,12 @@ DMZ の向け先を変えると、下の全部と AdGuard の split-horizon が | 6443 TCP | Kubernetes の API(`ks.doany.io:6443`。recovery/README.md) | 要る(認証つき) | **ノード自身が受けるもの(Talos の API 50000・trustd 50001・etcd・kubelet 10250・Cilium の 4240 / 4244 / 9963 / 9964 など)は、 -ノードの受信の防火壁で外から止めている**(`bootstrap/talos.sops.yaml` の `NetworkDefaultActionConfig` と `NetworkRuleConfig`。 +ノードの受信の防火壁で外から止めている**(Cilium の Host Firewall。規則は `deploy/cluster/host-firewall.yaml`。 2026-10-31 に足すまでは DMZ と IPv6 ホスト公開で外から全部届いていた)。既定は捨て、外から通すのは上の表のポートだけ (TCP 80・443・853・3129・6443・8443、UDP 8443・51820)、内側のアドレス(LAN と Pod・Service の 10/8・NetBird の 100.64/10・ fc00::/7・fe80::/10)からは全部。効くのはノード宛てだけで、hostPort(53・853・8443・3129・51820)は Cilium が Pod へ転送するので -通らない(なので 53 番は下の Cilium のポリシーで止めている)。表にポートを足すときは `public-tcp` / `public-udp` にも足す。 +通らない(なので 53 番は下の Cilium のポリシーで止めている)。表にポートを足すときは `deploy/cluster/host-firewall.yaml` にも足す。 +Talos の防火壁(`NetworkDefaultActionConfig`)は使わない(Pod からノードの IP の Gateway を捨てる。`bootstrap/talos.md`)。 家の LAN の IPv6 の GUA はプライベートに入れていないので、LAN からノードの管理の口へは IPv4 で繋ぐ。 ## 53 番は外に出さない diff --git a/docs/talos.md b/docs/talos.md index 1deb905c..2679fb89 100644 --- a/docs/talos.md +++ b/docs/talos.md @@ -138,7 +138,7 @@ Talos の既定(Flannel + kube-proxy)を止めて **Cilium に替えてある**( CNI の交換は構築時にやる ── 稼働中の差し替えは全 Pod 再起動が前提)。Cilium の値は [bootstrap/cilium-values.yaml](../bootstrap/cilium-values.yaml)。 LoadBalancer とクライアント IP も decisions.md「ルーティングの選定」。 -- `NetworkDefaultActionConfig: block` を使うなら、`NetworkRuleConfig` で要るポートを明示的に開ける +- `NetworkDefaultActionConfig: block`(Talos の受信の防火壁)は Cilium の Gateway(hostNetwork)と噛み合わないので使わない。防火壁は Cilium の Host Firewall([../bootstrap/talos.md](../bootstrap/talos.md)) ## 管理モデル(3 つのレイヤーを混同しない) diff --git a/recovery/README.md b/recovery/README.md index 64c62941..3f0c5da3 100644 --- a/recovery/README.md +++ b/recovery/README.md @@ -50,7 +50,7 @@ talosconfig も管理者の kubeconfig も `bootstrap/talos-secrets.sops.yaml` - **作業用 PC(J:COM 側の LAN)からは 10.10.0.4(eno4)にしか届かない**(10.0.0.2 は届かない)。t.ps1 の行き先はそこに固定してある - iLO(10.0.0.3)の Remote Console(HTML5)で、ブートメニューも maintenance mode の IP も見える。USB だけ物理で挿す -- **GitHub Actions では代わりにならない。** Talos の API(50000)は machine config の受信の防火壁でプライベートのアドレスからしか通さず +- **GitHub Actions では代わりにならない。** Talos の API(50000)はノードの受信の防火壁(Cilium の Host Firewall)でプライベートのアドレスからしか通さず ([../docs/router.md](../docs/router.md)「外からの転送」。maintenance mode では防火壁が無い)、CI の OIDC の信頼も machine config を当てて初めてできる