Kubernetes メタデータラベルの形式の確認

有効なラベル形式と、実際の selector との一致を合わせて確認してください。

説明

Kubernetes ラベルが形式規則に違反すると、API がリソースの作成や変更を拒否する場合があります。Service、NetworkPolicy、運用自動化はラベルでリソースを選択するため、形式と意味の両方を管理する必要があります。

ラベル値は空文字列、または 63 文字以下の文字列です。空でない場合は英字・数字で始まり、英字・数字で終わる必要があります。途中には英字・数字に加え、ハイフン、アンダースコア、ピリオドを使用できます。

想定される影響

  • 無効なラベルによってデプロイやリソース変更が失敗する場合があります。
  • 形式が有効でも、selector と一致しなければ意図した対象を選択できない場合があります。

対処方法

  • Kubernetes の規則に合うラベルのキーと値を使ってください。キーの任意の DNS 接頭辞と名前部分の規則も確認してください。
  • ラベルの変更時には Service とポリシーの selector を合わせて確認し、実際に意図した対象が選ばれるか検証してください。

例

ラベル値を比較する既存の例です。実際のデプロイには保守されている検証済みイメージを使用してください。

変更前

yaml
apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: g**dy.l+bel.
spec:
  containers:
    - name: goproxy
      image: k8s.gcr.io/goproxy:0.1

app の値にアスタリスク、プラス記号、末尾のピリオドが含まれているため、無効なラベル値です。

変更後

yaml
apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
    - name: goproxy
      image: k8s.gcr.io/goproxy:0.1

有効な goproxy を使います。他のリソースの selector とも一致する必要があります。

参考資料