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
7 changes: 2 additions & 5 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,13 @@ bond0 の MAC は設定で固定してあるのでルーターは触らない。

- [ ] **R2 の容量が下がり切るのを見る。** `host=main` を消した直後の restic の実データは **5.60 GiB**(2026-10-17)。
日曜の prune のあと、`pulumi` ワークフローの週次の Summary で見る
- [ ] **Exchange Online の SMTP AUTH(ユーザー名とパスワード)をやめる。** 使っているのは Infisical(`bootstrap/infisical/values.yaml`)、
yosegaki(blog のリポジトリ)、todoroku(Forgejo の doa/todoroku)の 3 つで、どれも `smtp.office365.com:587` に `info@doany.io` で送っている(2026-10-23 に
クラスタの全 Pod の env で確かめた)。Microsoft は **2026-12 末に既存テナントでも既定で無効**(管理者が戻せる)、最終の廃止日は 2027 年後半に発表。
移る先は OAuth(XOAUTH2)・Graph の sendMail・IP で許す SMTP リレー(コネクタ)のどれか
- [ ] **Talos 1.15.0 の正式版が出たら乗り換える**(Renovate の PR)
- [ ] **上流がカーネルにモジュールを必要な時に読ませる仕組み(modprobe の helper)を入れたら**、[apps/cluster/pt3-rebind.yaml](apps/cluster/pt3-rebind.yaml) を外し、
`talos/controlplane.yaml` の `kernel.modules` も `earth-pt3` だけにできるか確かめる。並び順を守る PR([siderolabs/talos#14652](https://github.com/siderolabs/talos/pull/14652))は
2026-10-23 に「並び順ではなく、カーネルが必要な時に読み込む形にすべき。こちらで別に実装する」(smira)として閉じられた。
その実装が [siderolabs/talos#14724](https://github.com/siderolabs/talos/pull/14724)(2026-10-23 に Open。説明に earth-pt3 → tc90522 が例として載っている)。
マージされて Talos のリリースに入り、Renovate の PR で上げたら確かめる。入ったら dvb-pt3 の extension の README も直す(上流)
2026-10-24 に v1.15.0-alpha.1 + この PR を自前で組んだ installer で実機を起こし、`earth-pt3` だけでチューナー 4 つが付き、pt3-rebind も付け直し不要だった(PR にも報告)。
ノードは今その installer で動いている。リリースに入ったら Renovate の PR で公式の版に戻し、`kernel.modules` を `earth-pt3` だけにして pt3-rebind を消す。入ったら dvb-pt3 の extension の README も直す(上流)

## 済んだこと(記録)

Expand Down
14 changes: 14 additions & 0 deletions docs/decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -345,3 +345,17 @@ ExternalDNS は HTTPRoute の注釈だけで決まり、自分が作ったレコ
疎結合にできる候補(ExternalDNS・cloudflare-operator・Crossplane)のうち、DNS が主役で利用者が多いのが ExternalDNS。

**Entra のリダイレクト URI は中央(`pulumi/entra.ts`)のまま。** 共用のアプリ登録 1 つに全アプリの URI が入るので、そもそも中央に集まる。

## メールは Exchange Online の SMTP AUTH をやめ、クラスタの中の中継から Graph の sendMail で送る(2026-10-24)

SMTP AUTH の Basic 認証は 2026-12 末に既定で無効になる。移る先の候補は OAuth(XOAUTH2)・Graph の `sendMail`・IP で許すコネクタ。

- **XOAUTH2 は使えない。** `info@doany.io` は Exchange Online Kiosk で、Kiosk は SMTP の OAuth に対応していないとされる。
Infisical はそもそも SMTP のユーザー名とパスワードしか話せない
- **コネクタ(IP で許す)は家の IP が固定でないので筋が悪い**
- したがって **Graph の `sendMail`**。アプリごとに Graph を話させず、普通の SMTP を受けて Graph に渡す中継
([smtp-oauth-relay](https://github.com/JustinIven/smtp-oauth-relay)、`apps/smtp-relay/`)を 1 つ置き、3 つのアプリは向け先だけ替えた
- **Graph の `Mail.Send` をテナント全体には付けない。** 誰としてでも送れてしまうので、Exchange の RBAC for Applications で
送れるメールボックスを `info@doany.io` だけに絞った。初回は組織が dehydrated で `Enable-OrganizationCustomization`(取り消せない)が要り、
実体化まで数時間かかった
- 中継は秘密を持たない(アプリが SMTP AUTH でクライアントシークレットを渡す)。クラスタの中だけで TLS なし、届く namespace は NetworkPolicy で絞る
2 changes: 1 addition & 1 deletion pulumi/dns.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ record("caa-issuewild", { name: "doany.io", type: "CAA", ttl: 1, data: { flags:
// DNSSEC に対応した MX(Enable-DnssecForVerifiedDomain で払い出された)。DANE はこれで効く
record("mx-dnssec", { name: "doany.io", type: "MX", content: "doany-io.o-v1.mx.microsoft", priority: 0, ttl: 3600 });
record("autodiscover", { name: "autodiscover.doany.io", type: "CNAME", content: "autodiscover.outlook.com", proxied: false, ttl: 3600 }, "93eb5f05c05d9ca6ae8239cad26089e2");
// 送るのは Exchange だけ(アプリも smtp.office365.com 経由)なので -all
// 送るのは Exchange だけ(アプリも apps/smtp-relay → Graph の sendMail で Exchange から出る)なので -all
record("spf", { name: "doany.io", type: "TXT", content: "v=spf1 include:spf.protection.outlook.com -all", ttl: 3600 }, "05522a739cbd45b787b93f1a700b8916");
// DKIM。行き先は Get-DkimSigningConfig の Selector1CNAME / Selector2CNAME。明示しないとワイルドカードに吸われる
record("dkim-selector1", { name: "selector1._domainkey.doany.io", type: "CNAME", content: "selector1-doany-io._domainkey.doany.q-v1.dkim.mail.microsoft", proxied: false, ttl: 3600 });
Expand Down
Loading