1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Talos Linux に Tailscale Extension を導入してハマった話

1
Last updated at Posted at 2025-12-19

はじめに

本記事は、homelabのKubernetesクラスタ(Talos Linux)にTailscaleを導入し、外部からのアクセスを可能にする過程で遭遇した問題と解決方法を記録します。

環境: Talos Linux v1.11.6 / Kubernetes v1.34.1 / 4ノード構成(CP×1 + Worker×3)

本記事で学べること

  • Talos LinuxへのTailscale Extension導入方法(ExtensionServiceConfig)
  • 全ノード一斉適用のヘマと推奨手順

1. やりたかったこと

1.1 背景

homelabのKubernetesクラスタに外部からアクセスしたい。現状はローカルネットワーク(10.0.0.0/24)からのみアクセス可能。

1.2 選択肢の検討

方式 メリット デメリット 今回の判断
ngrok 簡単、無料枠あり 帯域制限、URL固定に課金 ❌ 特定アプリ向け。クラスタ全体へのアクセスには不向き
Cloudflare Tunnel 高速、無料枠あり パブリックドメイン必須 ❌ homelab.localドメインを使いたい
Tailscale WireGuardベース、簡単 アカウント必要 ✅ VPN方式でネットワーク全体にアクセス可能

今回は Tailscale を選択。理由は

  • WireGuardベースで高速・安全
  • 443/TCPフォールバック(外出先からでも使える)
  • Talos公式Extensionがあり、試してみたかった
  • kubectl/talosctlでクラスタ全体にアクセスしたかった

1.3 導入方式

TalosへのTailscale導入は2パターンある

方式 概要
A. Talos Extension OSレベルでインストール
B. K8s Operator Kubernetes上で動作

今回は、A. Extension を選択


2. 事前準備

2.1 Tailscale アカウント作成

https://login.tailscale.com/ からGoogle/GitHub等で認証。

2.2 Auth Key 発行

Admin Console → Settings → Keys → Generate auth key

設定:
- Reusable: ✅(複数ノードで使用)
- Ephemeral: ❌
- Tags: tag:k8s-node

2.3 Extension バージョン確認

重要: Talosのバージョンに対応したExtensionを使用すること。

確認先: https://github.com/siderolabs/extensions/releases
Talos Version Tailscale Extension
v1.11.6 1.88.1

3. 設定ファイル(今回: ExtensionServiceConfig)

3.1 common.yaml(Extension追加)

machine:
  # Tailscale Extension
  # Talos v1.11.x 対応バージョン: 1.88.1
  install:
    extensions:
      - image: ghcr.io/siderolabs/tailscale:1.88.1

3.2 tailscale-patch.yaml(ExtensionServiceConfig形式)

apiVersion: v1alpha1
kind: ExtensionServiceConfig
name: tailscale
environment:
  - TS_AUTHKEY=tskey-auth-XXXXXXXXXX
  - TS_EXTRA_ARGS=--advertise-tags=tag:k8s-node
  - TS_ROUTES=10.0.0.0/24,10.96.0.0/12,10.244.0.0/16

詳細は Tailscale on Talos 公式ドキュメント を参照。


4. ハマったポイント

4.1 古い情報を鵜呑みにした

最初、ネット上の古い記事を参考に machine.files で設定ファイルを配置する方法を試した。
しかし Talos v1.7 以降は ExtensionServiceConfig が推奨されており、うまく動作しなかった。

教訓: 公式READMEを最初に読みましょう

4.2 横着して一括適用

そして、動作確認もせず全4ノードに一斉適用してしまった。

# やってしまったこと(NG)
for node in 10.0.0.200 10.0.0.201 10.0.0.202 10.0.0.203; do
  talosctl apply-config --nodes $node --file *.yaml
done

「1台ずつ確認するのは面倒」という横着が招いた典型例ですね。。。

結果:

  • 全ノードが設定エラーで起動不能に
  • Control Plane が落ちてtalosctlも使用不能
  • etcdクォーラム喪失
  • ホストサーバー(Hyper-V)も高負荷でRDP不能に(当時なんもできなくてという感じでした)

5. 正しい手順(推奨)

5.1 ローリングアップデート

# Step 1: Worker 1台目
talosctl apply-config --nodes 10.0.0.201 --file worker.yaml

# Step 2: 復旧を確認(数分待つ)
talosctl --nodes 10.0.0.201 health --wait-timeout 5m

# Step 3: Tailscale Admin Consoleで接続確認

# Step 4: 問題なければ次のWorker
talosctl apply-config --nodes 10.0.0.202 --file worker.yaml
talosctl apply-config --nodes 10.0.0.203 --file worker.yaml

# Step 5: 全Worker完了後、最後にControl Plane
talosctl apply-config --nodes 10.0.0.200 --file controlplane.yaml

5.2 なぜローリングが重要か

一斉適用 ローリング
全ノードが同時に落ちる 1台ずつ確認しながら進める
etcd クォーラム喪失 クォーラム維持
問題切り分け困難 問題発生箇所が明確
復旧に時間がかかる 途中で止められる

6. セキュリティ

6.1 Git に含めないファイル

# .gitignore
talos/patches/tailscale-auth.yaml  # Auth Key
talos/secrets.yaml                  # クラスタシークレット
talosconfig                         # talosctl 認証情報

6.2 secrets.yaml のバックアップ

secrets.yamlは障害時の復旧に必須。1Password 等にバックアップ推奨。


7. まとめ

学んだこと

  1. 公式READMEを読む - 古い記事やAIのアドバイスより公式ドキュメントを優先
  2. 横着しない - 必ずローリングアップデートで1台ずつ確認

振り返り

  • 今思えば、最初からk8s Operator方式で試しておけばよかったかもしれない。Podとして動作確認してから、問題なければ基盤側(Extension)に適用するほうがスムーズだったが、のちのやりたいことを考えると全台導入のほうがあとのことが、楽だったので判断としてはいつどうするかの違いでしたねー

Day8のセキュリティ確認の前にやらかしクラスタを作り直していたので、なかなかヒーヒー言いながらの作業でした😂


参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?