diff --git a/bootstrap/render.sh b/bootstrap/render.sh index 2a7af6fd..bb3a327a 100755 --- a/bootstrap/render.sh +++ b/bootstrap/render.sh @@ -238,7 +238,6 @@ for n in "kube-apiserver:$K8S" "ghcr.io/siderolabs/kubelet:$K8S" \ 'name: cilium' cilium-operator KUBERNETES_SERVICE_PORT 'value: \"7445\"' 'cgroup-root: \"/sys/fs/cgroup\"' \ 'kind: GatewayClass' io.cilium/gateway-controller \ 'kind: RawVolumeConfig' 'kind: LVMVolumeGroupConfig' 'name: dm_thin_pool' \ - 'kind: NetworkDefaultActionConfig' 'name: public-tcp' 'name: private-tcp' \ 'name: lvm-localpv' lvm-localpv-node lvm-localpv-controller 'storageCapacity: false' 'doany.io/lvm-thinpool: ready' \ 'name: storage' 'name: local-path' 'provisioner: local.csi.openebs.io' 'volgroup: data' \ 'kind: VolumeSnapshotClass' 'name: lvm-thinpool' \ diff --git a/bootstrap/talos.md b/bootstrap/talos.md index 3d95227a..cdaae6e5 100644 --- a/bootstrap/talos.md +++ b/bootstrap/talos.md @@ -65,6 +65,13 @@ 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 の API ごと届かなくなるが、`try` なら時間が来れば元に戻る: diff --git a/bootstrap/talos.sops.yaml b/bootstrap/talos.sops.yaml index ce11770e..e28d1e88 100644 --- a/bootstrap/talos.sops.yaml +++ b/bootstrap/talos.sops.yaml @@ -43,8 +43,8 @@ machine: fs.inotify.max_user_instances: "8192" fs.inotify.max_user_watches: "1048576" # IPv6 は bond0 に一本化する(10.10 側の RA に既定経路を奪われると非対称になる)。 - # sysctl はカーネルの名前で書くので、別名(jcom0)は使えない。DL360 は eno4、Z440 は 361T の ens3f1(無い名前の行は効かないだけ) - net.ipv6.conf.eno4.disable_ipv6: "1" + # sysctl はカーネルの名前で書くので、別名(jcom0)は使えない。Z440 の 361T の ens3f1。**無い名前の行を残さない** + # (KernelParamSpecController がそこで失敗し続け、後から足した sysctl が当たらない。DL360 の eno4 で踏んだ) net.ipv6.conf.ens3f1.disable_ipv6: "1" network: # PV の nodeAffinity(OpenEBS の openebs.io/nodename)が main を指している @@ -537,161 +537,6 @@ sops: mac_only_encrypted: true version: 3.13.3 --- -# ホスト(Talos の API・etcd・kubelet・Cilium・Gateway の Envoy など)が受けるものの防火壁(Ingress Firewall)。 -# ルーターは DMZ と IPv6 ホスト公開で全部のポートをノードに流すので(../docs/router.md)、外に出すものはここで決める。 -# 既定は捨て、下の NetworkRuleConfig に当たるものだけ通す。lo・確立済みの戻り・ICMP / ICMPv6(5 個/秒まで)・ -# Pod と Service の網どうしは Talos が自分で通す。効くのはホスト宛て(input)だけで、hostPort は Cilium が Pod へ -# 転送するのでここを通らない(Pod の手前は Cilium のポリシー。53 番は ../deploy/adguardhome/network-policy.yaml)。 -# 間違えると Talos の API ごと締め出されるので、当てるときは apply-config --mode=try(talos.md「上げ方 / 当て直し方」)。 -apiVersion: v1alpha1 -kind: NetworkDefaultActionConfig -ingress: block -sops: - age: - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy - UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG - ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP - M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX - uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ== - -----END AGE ENCRYPTED FILE----- - recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r - encrypted_regex: ^password$ - lastmodified: "2026-10-30T16:40:35Z" - mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str] - mac_only_encrypted: true - version: 3.13.3 ---- -# 外から要るもの(TCP)。ホストが受けるのは 80 / 443(Gateway の Envoy。hostNetwork)と 6443(ks.doany.io と -# cilium-drift.yml)。853(DoT)・3129(3proxy)・8443(LiveKit)は hostPort でここを通らないが、通る形に変わっても -# 落ちないよう書いておく。足すときは ../docs/router.md の表も。 -apiVersion: v1alpha1 -kind: NetworkRuleConfig -name: public-tcp -portSelector: - ports: - - 80 - - 443 - - 853 - - 3129 - - 6443 - - 8443 - protocol: tcp -ingress: - - subnet: 0.0.0.0/0 - - subnet: ::/0 -sops: - age: - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy - UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG - ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP - M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX - uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ== - -----END AGE ENCRYPTED FILE----- - recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r - encrypted_regex: ^password$ - lastmodified: "2026-10-30T16:40:35Z" - mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str] - mac_only_encrypted: true - version: 3.13.3 ---- -# 外から要るもの(UDP)。LiveKit の 8443 と NetBird の routing peer の 51820(どちらも hostPort。上と同じく念のため)。 -# STUN は外のもの(Cloudflare)を使うので開けない。 -apiVersion: v1alpha1 -kind: NetworkRuleConfig -name: public-udp -portSelector: - ports: - - 8443 - - 51820 - protocol: udp -ingress: - - subnet: 0.0.0.0/0 - - subnet: ::/0 -sops: - age: - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy - UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG - ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP - M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX - uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ== - -----END AGE ENCRYPTED FILE----- - recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r - encrypted_regex: ^password$ - lastmodified: "2026-10-30T16:40:35Z" - mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str] - mac_only_encrypted: true - version: 3.13.3 ---- -# プライベートのアドレスからは全部のポート(TCP。UDP は次)。家の LAN(10.0.0.0/24・10.10.0.0/24)・NetBird(100.64.0.0/10)・ -# Pod と Service(10.42 / 10.43・fd42 / fd43。10.0.0.0/8 と fc00::/7 に入る)。talosctl(作業用 PC から 10.10.0.4:50000)・ -# etcd・kubelet・Cilium(4240・4244・8472・9963・9964)・Pod からの Talos API(k8up)とノードの DNS(169.254.116.108:53)はここ。 -# 家の LAN の IPv6 の GUA(RA のプレフィックス。変わりうる)は入れていないので、LAN からは IPv4 で繋ぐ。 -# 172.16/12・192.168/16 は使っていないので入れない(使うものだけ。足すなら上の送信元を増やしたとき)。 -apiVersion: v1alpha1 -kind: NetworkRuleConfig -name: private-tcp -portSelector: - ports: - - 1-65535 - protocol: tcp -ingress: - - subnet: 10.0.0.0/8 - - subnet: 100.64.0.0/10 - - subnet: fc00::/7 - - subnet: fe80::/10 -sops: - age: - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy - UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG - ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP - M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX - uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ== - -----END AGE ENCRYPTED FILE----- - recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r - encrypted_regex: ^password$ - lastmodified: "2026-10-30T16:40:35Z" - mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str] - mac_only_encrypted: true - version: 3.13.3 ---- -# 上と同じ送信元から UDP の全部(Cilium の VXLAN 8472、ノードの DNS など)。 -apiVersion: v1alpha1 -kind: NetworkRuleConfig -name: private-udp -portSelector: - ports: - - 1-65535 - protocol: udp -ingress: - - subnet: 10.0.0.0/8 - - subnet: 100.64.0.0/10 - - subnet: fc00::/7 - - subnet: fe80::/10 -sops: - age: - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIQnpITHlrS0lxZkZXb3dy - UmNMYUhFamtsR2Rpb3BTMXozYjQwQkoxOEhFClFOeDRQV2tTYTBlL09RUS9oMUZG - ZHZwNXVnYzA4dkIyME0rbnc0Zm44SEUKLS0tIDhTNmNMU1ZVeGEwbzltTDdpVVRP - M0FiWEJ2MHIzRkU2WHRxWlo3N0FsNlEKgYVZr+vTicTztpwMQ7oj/yLEk12f/JZX - uMTe29EqIoB7gE/SCG9z+qoLXd4NHrA1lfrLjTDSCYNEhGiDyMhIMQ== - -----END AGE ENCRYPTED FILE----- - recipient: age1sgnnkn67wpt4wgjsff4c36w3cmjkk557ng504e4aczx2lzls9y6ssy0x9r - encrypted_regex: ^password$ - lastmodified: "2026-10-30T16:40:35Z" - mac: ENC[AES256_GCM,data:HeBfzNkyaDPxwfMepe0/4U5g0tAUyMf9AZMYly5La46tj8Ap5K4z9jp3tcOR9tADq1nCBhgtIKDiLmrNqOOWLShV1jDVM35hpBDHMpYuJjAGish8pBZUb3TetvSa1fnzOE24JrCZxpaK69q5V9akQzKIlhM/qgRhU7jFqPhyDT8=,iv:8QW9fMoDnME0qsE/TMcpi3zKgl+Oy+9mN8jzRY7XnN4=,tag:gOxsxLzsRPBx8iQjY5RW/A==,type:str] - mac_only_encrypted: true - version: 3.13.3 ---- # 外から入る CI(cilium-drift.yml の OIDC トークン)と人(Entra)の認証。権限の中身は apiserver-rbac.yaml。 apiVersion: v1alpha1 kind: KubeAuthenticationConfig