Contents
Traefik Kubernetes Ingress 使い方 ガイド:初心者向けステップバイステップで実装する方法
Kubernetesクラスターでのサービス公開に悩む開発者やDevOpsエンジニアにとって、Traefikは効率的なIngress Controllerとして注目されています。本記事では、Traefikのインストールから動的ルーティング設定までをステップバイステップで解説し、実際の運用に直結する知識をお伝えします。
TraefikのKubernetes Ingress Controller導入準備
TraefikをKubernetesクラスター上で活用するには、環境や前提条件の確認が不可欠です。以下に必要な手順と注意点をまとめます。
Kubernetesクラスター環境の確認
Traefikはv1.24以降のKubernetesバージョンで動作します。クラスターのバージョンを確認するには以下のコマンドを使用します。
|
1 2 |
kubectl version --short |
また、クラスター内にIngress APIリソースが有効化されていること(kubectl api-resources | grep ingressで確認)も前提となります。
Helmチャートの利用前提
Traefikを効率的に導入するにはHelmを使用します。HelmはKubernetesリソースのテンプレート管理に優れており、パラメータ調整やバージョン管理が簡単です。インストールしていない場合は以下を実行してください。
|
1 2 |
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash |
注意:Helmを使用することで、Traefikのアップグレード・バージョン管理が容易になります。
Traefik Ingress Controllerのインストール手順
Helmリポジトリへの追加
Traefikの公式チャートを導入するには、まずHelmリポジトリにTraefikを追加します。
|
1 2 3 |
helm repo add traefik https://traefik.github.io/charts helm repo update |
レリースパラメータ設定例
以下は基本的なインストールコマンドです。
|
1 2 3 4 |
helm install traefik traefik/traefik \ --set dashboard.enabled=true \ --set metrics.prometheus.enabled=true |
dashboard.enabled:Traefikのダッシュボードを有効化metrics.prometheus.enabled:メトリクスをPrometheusに公開
ヒント:パラメータについては公式ドキュメントで詳細が確認可能です。
DaemonSetモードでのTraefikデプロイ
ネットワークポリシーの注意点
DaemonSetモードでは、各ノードにPodが配置されるため、ネットワークアクセス制限を適切に設定する必要があります。特にNodePortやLoadBalancerサービスタイプを使用している場合、クラスター外との通信が遮断されないよう確認してください。
ノードセレクター設定
特定のノードにTraefikをデプロイしたい場合は、以下のようにnodeSelectorを指定します。
|
1 2 3 4 |
spec: nodeSelector: kubernetes.io/os: linux |
比較例:
| モード | 説明 | 適用シーン |
|---|---|---|
| DaemonSet | 各ノードにPodを配置 | ロード分散が必要な環境 |
| Deployment | 特定のReplica数でデプロイ | スケーラビリティ重視 |
IngressリソースのYAML設定サンプル
基本的なルーティング定義
以下は、example.comドメインを経由してサービスにアクセスするIngressリソースの例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress annotations: traefik.ingress.kubernetes.io/router.entrypoints: web spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 80 |
注意:
pathType: PrefixはKubernetes v1.18以降でサポートされています。古いバージョンではこのパラメータを省略する必要があります。
TLS証明書の参照方法
TLS証明書を有効化するには、tlsセクションに秘密鍵と証明書を指定します。
|
1 2 3 4 5 6 |
spec: tls: - hosts: - example.com secretName: example-tls-secret |
注意:
secretNameはKubernetesクラスター内に事前に作成したSecretの名前です。
External-DNSとの連携設定
DNSレコード自動作成の仕組み
External-DNSはTraefikから出力されるドメイン情報をもとに、AWS Route 53やCloudflareなどと同期してDNSレコードを自動生成します。
必要なコンポーネント
- External-DNS: DNSレコード管理用のコントローラー
- TraefikのIngressリソースに
kubernetes.io/ingress.class: traefikのアノテーションを追加
Traefikのコンフィグレーション
以下のように、TraefikとExternal-DNSを連携させるための設定を行います。
|
1 2 3 4 |
metadata: annotations: kubernetes.io/ingress.class: traefik |
手順例:
- External-DNSをKubernetesにデプロイ
- TraefikとExternal-DNSが同じNamespaceで動作するように設定
- Ingressリソースに
kubernetes.io/ingress.class: traefikを追加
動的ルーティング設定とトラブルシューティング
ルールの優先度設定
Traefikではルールの適用順序をpriorityアノテーションで調整できます。数値が小さいほど優先度が高いです。
|
1 2 3 4 |
metadata: annotations: traefik.ingress.kubernetes.io/router.priority: "10" |
ログ確認コマンド集
Traefikのログは以下のように取得可能です。
|
1 2 3 |
kubectl logs -l app=traefik -n kube-system kubectl describe ingress example-ingress |
よくあるエラー例:
no IngressRoute found for host:IngressリソースにTraefik専用のアノテーションが不足している場合connection refused:サービスのポート設定やネットワークポリシーに問題がある場合
まとめと導入へのススメ
TraefikはKubernetesでの外部アクセスを効率化するための強力なツールです。以下に本記事で解説した主なポイントを整理します。
- インストール方法:Helmチャートによる簡単な導入とDaemonSetモードの選択
- Ingress設定:ルーティング定義・TLS証明書・バージョン依存性への注意
- External-DNS連携:アノテーションの追加とコントローラーのデプロイ
- トラブルシューティング:ログ確認コマンドやよくあるエラーの回避策
Kubernetes環境に合わせてTraefikを導入・設定することで、サービス公開のコストとリスクを大幅に削減できます。実際に手を動かして検証してください。