Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion bootstrap/render.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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' \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不具合(CI が落ちる): 防火壁を外したのに、.github/workflows/talos-boot.yml の検査が残っています。

  • 284〜300 行「受信の防火壁(外から 443 は通り、10250 は通らない)」は、外から kubelet(10250)に届かないこと(KW = 000)を要求します。防火壁が無ければ届くので fail します。
  • 319〜323 行は nftables の ingress の既定が drop であることを要求します。こちらも fail します。

この 2 つを外すか、防火壁を戻すまで無効にしてください(30 行目の 4 枚目の NIC の設定も不要になります)。

'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' \
Expand Down
7 changes: 7 additions & 0 deletions bootstrap/talos.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` なら時間が来れば元に戻る:

Expand Down
159 changes: 2 additions & 157 deletions bootstrap/talos.sops.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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 を指している
Expand Down Expand Up @@ -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
Expand Down
Loading