Skip to content

Room 31

LABELS & SELECTORS


The Sorting Hat

  • Labels are key-value pairs attached to objects. Selectors filter by labels.
  • Multiple resources have been scattered with label fragments. Collect them.

📜 Mission Briefing

  1. Deploy the resources in labeled-resources.yaml.
  2. Use label selectors to find pods with specific labels.
  3. Find all pods with team=escape AND tier=backend.
  4. Those pods have a label fragment - concatenate the values (sorted by name).
  5. The result spells label3rs.

Key Commands
Command Purpose
kubectl get pods --show-labels Show all labels
kubectl get pods -l key=value Filter by label
kubectl get pods -l 'key in (v1,v2)' Set-based selector
kubectl label pod NAME key=value Add label
kubectl label pod NAME key- Remove label

How Labels & Selectors Work
# Labels: key=value pairs for organizing resources
# Selectors: queries to filter by labels

# Equality-based selectors
kubectl get pods -l environment=production
kubectl get pods -l environment!=staging
kubectl get pods -l 'environment=production,tier=frontend'

# Set-based selectors
kubectl get pods -l 'environment in (production, staging)'
kubectl get pods -l 'tier notin (frontend)'
kubectl get pods -l '!canary'     # Pods WITHOUT the "canary" label

# Add/modify/remove labels
kubectl label pod my-pod version=v2
kubectl label pod my-pod version=v3 --overwrite
kubectl label pod my-pod version-      # Remove label

# Label naming rules:
# Key: [prefix/]name (prefix optional, max 253 chars)
# Value: max 63 chars, alphanumeric, -, _, .
# Examples: app.kubernetes.io/name=nginx, team=backend

Hints

Hint 1

kubectl get pods -l team=escape,tier=backend --show-labels

Hint 2

kubectl get pods -l team=escape,tier=backend --sort-by=.metadata.name \
  -o jsonpath='{.items[*].metadata.labels.fragment}'

Hint 3

The password is label3rs.


🔓 Unlock Room 32

openssl enc -aes-256-cbc -d -a -pbkdf2 \
        -in ../room_32/README -out ../room_32/README.txt -pass pass:PASSWORD
cat ../room_32/README.txt