: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使用可能 |
| セキュリティスキャン | どの脆弱性が該当するか追跡不可 | 特定バージョンをスキャン |
イメージタグのベストプラクティス
- セマンティックバージョンを使用:
myapp:3.1.0、myapp:latestではなく - 重要なワークロードにはSHAダイジェストを使用:
myapp@sha256:abc123... - 固定タグ使用時は**
imagePullPolicy: IfNotPresentを設定** - 本番マニフェストで
:latestを使用しない - RenovateやFluxイメージ自動化などのツールでイメージ更新を自動化
ユースケース
再現不可能なデプロイメントを防止するためにCI/CDパイプラインでイメージタグポリシーを強制する。デプロイされたソフトウェアバージョンの監査証跡を必要とする規制環境に不可欠。