:latestまたはイメージタグなしの使用

:latestイメージタグまたはタグなしのコンテナを検出します。再現可能なKubernetesデプロイメントにイメージバージョンの固定が不可欠な理由を学びます。

Image Management

詳細な説明

:latestの問題点

コンテナイメージの:latestタグは可変です — 最後にプッシュされたものを指します。Kubernetesマニフェストでの使用はいくつかの問題を引き起こします。

タグ問題のある例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
  labels:
    app: frontend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      securityContext:
        runAsNonRoot: true
      containers:
        - name: web
          image: nginx:latest
          resources:
            limits:
              cpu: 200m
              memory: 128Mi
        - name: sidecar
          image: fluent/fluentd
          resources:
            limits:
              cpu: 100m
              memory: 64Mi

バリデーターが検出する問題

  • 警告: コンテナ 'web' が ':latest' タグを使用しています。特定のバージョンに固定してください。
  • 警告: コンテナ 'sidecar' のイメージ 'fluent/fluentd' にタグがありません。':latest'がデフォルトになります。

イメージバージョンを固定する理由

問題 :latest使用時 固定バージョン使用時
再現性 ノードごとに異なるイメージをプル 同一イメージを保証
ロールバック 「以前のlatest」に戻せない kubectl rollout undoが動作
監査 どのバージョンが実行されたか記録なし マニフェスト内のタグが記録
キャッシュ imagePullPolicy: Alwaysが必要 IfNotPresent使用可能
セキュリティスキャン どの脆弱性が該当するか追跡不可 特定バージョンをスキャン

イメージタグのベストプラクティス

  1. セマンティックバージョンを使用: myapp:3.1.0myapp:latestではなく
  2. 重要なワークロードにはSHAダイジェストを使用: myapp@sha256:abc123...
  3. 固定タグ使用時は**imagePullPolicy: IfNotPresentを設定**
  4. 本番マニフェストで:latestを使用しない
  5. RenovateやFluxイメージ自動化などのツールでイメージ更新を自動化

ユースケース

再現不可能なデプロイメントを防止するためにCI/CDパイプラインでイメージタグポリシーを強制する。デプロイされたソフトウェアバージョンの監査証跡を必要とする規制環境に不可欠。

試してみる — K8s Manifest Validator

フルツールを開く