mcpField
L
linkerd-patterns

linkerd-patterns

github.com/sickn33クラウド・DevOps48.7k177 回インストール1 日前に更新
リポジトリ

linkerd-patterns について

Kubernetes 運用者向けの Linkerd パターンをまとめたスキルです。mTLS、トラフィック分割、ルートメトリクス、マルチクラスター設定を扱い、環境に応じた構成検証も促します。

主な機能

  1. 01Linkerd の導入と Namespace のインジェクション
  2. 02mTLS と認可ポリシーの設定
  3. 03リトライ、タイムアウト、ルートメトリクスの設定
  4. 04カナリア向けトラフィック分割
  5. 05マルチクラスターの構築、監視、デバッグ

活用シーン

  1. 01Kubernetes アプリケーションで Linkerd メッシュを有効化
  2. 02自動 mTLS とサーバーアクセス制御を設定
  3. 03カナリアリリースにトラフィックを振り分け
  4. 04プロキシ状態とルートメトリクスを調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill linkerd-patterns

インストール後、Claude Code で/linkerd-patternsを入力して読み込まれたか確認します。

詳細

Linkerd のパターン

Kubernetes 向けの軽量でセキュリティを最優先したサービスメッシュ、Linkerd の本番環境向けパターンです。

このスキルを使用しない場合

  • タスクが Linkerd のパターンに関係しない場合
  • この範囲外の別のドメインやツールが必要な場合

手順

  • 目標、制約、必要な入力を確認します。
  • 関連するベストプラクティスを適用し、結果を検証します。
  • 実行可能な手順と検証方法を提示します。

このスキルを使用する場合

  • 軽量なサービスメッシュを設定する場合
  • 自動 mTLS を実装する場合
  • カナリアデプロイメント用のトラフィック分割を設定する場合
  • ルートごとのメトリクス用にサービスプロファイルを設定する場合
  • リトライとタイムアウトを実装する場合
  • マルチクラスターのサービスメッシュを設定する場合

基本概念

1. Linkerd のアーキテクチャ
┌─────────────────────────────────────────────┐
│                Control Plane                 │
│  ┌─────────┐ ┌──────────┐ ┌──────────────┐ │
│  │ destination │ │ identity │ │ proxy-inject │ │
│  └─────────┘ └──────────┘ └──────────────┘ │
└─────────────────────────────────────────────┘
                      │
┌─────────────────────────────────────────────┐
│                 Data Plane                   │
│  ┌─────┐    ┌─────┐    ┌─────┐             │
│  │proxy│────│proxy│────│proxy│             │
│  └─────┘    └─────┘    └─────┘             │
│     │           │           │               │
│  ┌──┴──┐    ┌──┴──┐    ┌──┴──┐            │
│  │ app │    │ app │    │ app │            │
│  └─────┘    └─────┘    └─────┘            │
└─────────────────────────────────────────────┘
2. 主なリソース
リソース目的
ServiceProfileルートごとのメトリクス、リトライ、タイムアウト
TrafficSplitカナリアデプロイメント、A/B テスト
Serverサーバー側のポリシーを定義します
ServerAuthorizationアクセス制御ポリシー

バージョンとデプロイメントの境界

例では、バージョン固有の API と一部のマニフェストが混在しています。レンダリングまたは適用する前に、インストール済みの Linkerd/Kubernetes CRD と、サポートされている Gateway API/SMI のバージョンを確認してください。Deployment の断片では、必須のセレクター/コンテナーが省略されています。mTLS が保護するのはメッシュ化された対象トラフィックであり、すべてのトラフィックが自動的に保護されるわけではありません。インジェクション、ID、明示的な認可を検証してください。認証されていない CIDR の広範な例外には、意図的な承認が必要です。インストーラーとイメージのバージョンを固定して確認し、正確なコンテキスト/名前空間に対してレンダリングした変更を事前に確認し、ロールアウト/ロールバックに必要なアクセスを維持してください。Tap/ログの出力から機密性の高いトラフィックが漏えいする可能性があります。

テンプレート

テンプレート 1:メッシュのインストール
# Install CLI
brew install linkerd

# Alternative: download the official installer, inspect it, then execute it
tmpdir="$(mktemp -d)"
trap 'rm -rf "$tmpdir"' EXIT
curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install -o "$tmpdir/linkerd-install.sh"
cat "$tmpdir/linkerd-install.sh"  # review the full installer before executing
sh "$tmpdir/linkerd-install.sh"

# Validate cluster
linkerd check --pre

# Install CRDs
linkerd install --crds | kubectl apply -f -

# Install control plane
linkerd install | kubectl apply -f -

# Verify installation
linkerd check

# Install viz extension (optional)
linkerd viz install | kubectl apply -f -
テンプレート 2:名前空間へのインジェクション
# Automatic injection for namespace
apiVersion: v1
kind: Namespace
metadata:
  name: my-app
  annotations:
    linkerd.io/inject: enabled
---
# Or inject specific deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  annotations:
    linkerd.io/inject: enabled
spec:
  template:
    metadata:
      annotations:
        linkerd.io/inject: enabled
テンプレート 3:リトライ付き Service Profile
apiVersion: linkerd.io/v1alpha2
kind: ServiceProfile
metadata:
  name: my-service.my-namespace.svc.cluster.local
  namespace: my-namespace
spec:
  routes:
    - name: GET /api/users
      condition:
        method: GET
        pathRegex: /api/users
      responseClasses:
        - condition:
            status:
              min: 500
              max: 599
          isFailure: true
      isRetryable: true
    - name: POST /api/users
      condition:
        method: POST
        pathRegex: /api/users
      # POST not retryable by default
      isRetryable: false
    - name: GET /api/users/{id}
      condition:
        method: GET
        pathRegex: /api/users/[^/]+
      timeout: 5s
      isRetryable: true
  retryBudget:
    retryRatio: 0.2
    minRetriesPerSecond: 10
    ttl: 10s
テンプレート 4:トラフィック分割(カナリア)
apiVersion: split.smi-spec.io/v1alpha1
kind: TrafficSplit
metadata:
  name: my-service-canary
  namespace: my-namespace
spec:
  service: my-service
  backends:
    - service: my-service-stable
      weight: 900m  # 90%
    - service: my-service-canary
      weight: 100m  # 10%
テンプレート 5:サーバー認可ポリシー
# Define the server
apiVersion: policy.linkerd.io/v1beta1
kind: Server
metadata:
  name: my-service-http
  namespace: my-namespace
spec:
  podSelector:
    matchLabels:
      app: my-service
  port: http
  proxyProtocol: HTTP/1
---
# Allow traffic from specific clients
apiVersion: policy.linkerd.io/v1beta1
kind: ServerAuthorization
metadata:
  name: allow-frontend
  namespace: my-namespace
spec:
  server:
    name: my-service-http
  client:
    meshTLS:
      serviceAccounts:
        - name: frontend
          namespace: my-namespace
---
# Allow unauthenticated traffic (e.g., from ingress)
apiVersion: policy.linkerd.io/v1beta1
kind: ServerAuthorization
metadata:
  name: allow-ingress
  namespace: my-namespace
spec:
  server:
    name: my-service-http
  client:
    unauthenticated: true
    networks:
      - cidr: 10.0.0.0/8
テンプレート 6:高度なルーティング用 HTTPRoute
apiVersion: policy.linkerd.io/v1beta2
kind: HTTPRoute
metadata:
  name: my-route
  namespace: my-namespace
spec:
  parentRefs:
    - name: my-service
      kind: Service
      group: ""
      port: 8080
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /api/v2
          headers:
            - name: x-api-version
              value: v2
      backendRefs:
        - name: my-service-v2
          port: 8080
    - matches:
        - path:
            type: PathPrefix
            value: /api
      backendRefs:
        - name: my-service-v1
          port: 8080
テンプレート 7:マルチクラスターの設定
# On each cluster, install with cluster credentials
linkerd multicluster install | kubectl apply -f -

# Link clusters
linkerd multicluster link --cluster-name west \
  --api-server-address https://west.example.com:6443 \
  | kubectl apply -f -

# Export a service to other clusters
kubectl label svc/my-service mirror.linkerd.io/exported=true

# Verify cross-cluster connectivity
linkerd multicluster check
linkerd multicluster gateways

監視コマンド

# Live traffic view
linkerd viz top deploy/my-app

# Per-route metrics
linkerd viz routes deploy/my-app

# Check proxy status
linkerd viz stat deploy -n my-namespace

# View service dependencies
linkerd viz edges deploy -n my-namespace

# Dashboard
linkerd viz dashboard

デバッグ

# Check injection status
linkerd check --proxy -n my-namespace

# View proxy logs
kubectl logs deploy/my-app -c linkerd-proxy

# Debug identity/TLS
linkerd identity -n my-namespace

# Tap traffic (live)
linkerd viz tap deploy/my-app --to deploy/my-backend

ベストプラクティス

推奨事項
  • すべての場所で mTLS を有効にする - Linkerd では自動的に有効になります
  • ServiceProfiles を使用する - ルートごとのメトリクスとリトライを取得できます
  • リトライ予算を設定する - リトライストームを防止します
  • ゴールデンメトリクスを監視する - 成功率、レイテンシ、スループット
禁止事項
  • チェックを省略しない - 変更後は必ず linkerd check を実行します
  • 過剰に設定しない - Linkerd のデフォルト設定は適切です
  • ServiceProfiles を無視しない - 高度な機能を利用できます
  • タイムアウトを忘れない - ルートごとに適切な値を設定します

リソース

制限事項

  • タスクが上記の範囲に明確に当てはまる場合にのみ、このスキルを使用してください。
  • 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。

コメント