Skip to content

fix(k8s): document image digest pinning for production deployments#1480

Open
dknos wants to merge 2 commits intoNVIDIA:mainfrom
dknos:fix/k8s-image-digests-1436
Open

fix(k8s): document image digest pinning for production deployments#1480
dknos wants to merge 2 commits intoNVIDIA:mainfrom
dknos:fix/k8s-image-digests-1436

Conversation

@dknos
Copy link
Copy Markdown
Contributor

@dknos dknos commented Apr 4, 2026

Summary

  • Adds guidance for pinning container images by SHA256 digest in production K8s deployments
  • Mutable tags like :latest, :24-dind, :22 can drift unexpectedly, creating supply chain risk

Test plan

  • Verify K8s manifest still applies cleanly with kubectl apply --dry-run=client
  • Review comments for accuracy

Fixes #1436

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores
    • Switched container images to immutable, digest-pinned references to improve deployment stability and security.
  • Bug Fixes
    • Tightened the Discord preset network policy by removing DELETE access from the wildcard HTTP allowance, reducing risk of unintended deletions.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 4, 2026

Warning

Rate limit exceeded

@dknos has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 5 minutes and 35 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 5 minutes and 35 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 90d330d9-1d84-4485-ac2a-1a1e1cc43de9

📥 Commits

Reviewing files that changed from the base of the PR and between 33369d1 and 994e54d.

📒 Files selected for processing (2)
  • k8s/nemoclaw-k8s.yaml
  • nemoclaw-blueprint/policies/presets/discord.yaml
📝 Walkthrough

Walkthrough

Updated Kubernetes manifest to pin three container images by SHA256 digest and removed a DELETE allowance from a Discord network policy rule in a YAML preset.

Changes

Cohort / File(s) Summary
K8s image pinning
k8s/nemoclaw-k8s.yaml
Replaced mutable image tags (docker:24-dind, node:22, busybox) with digest-pinned references (@sha256:...) for dind, workspace, and init-docker-config. Pod spec fields otherwise unchanged.
Policy rule removal
nemoclaw-blueprint/policies/presets/discord.yaml
Removed the network_policies.discord rule allowing DELETE requests to /**, leaving GET, POST, PUT, and PATCH methods allowed.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Poem

🐰 I nibbled through tags, found them loose and wild,
I tucked each image safe — digest-pinned and styled.
A rule trimmed gently, a DELETE gone away,
Now pods hop calmly and policies play. 🥕✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The PR includes an out-of-scope change: removal of DELETE method from discord.yaml network policy, which is unrelated to the image digest pinning objective in issue #1436. Remove the discord.yaml policy change or address it in a separate PR, keeping this change focused solely on K8s image digest pinning as specified in issue #1436.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix(k8s): document image digest pinning for production deployments' accurately describes the main change: updating K8s container image references to use SHA256 digest pinning instead of mutable tags.
Linked Issues check ✅ Passed The PR successfully addresses issue #1436 by pinning all three container images (dind, workspace, init-docker-config) to SHA256 digests in k8s/nemoclaw-k8s.yaml, eliminating the mutable tag supply chain vulnerability.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@k8s/nemoclaw-k8s.yaml`:
- Line 29: Replace the mutable image tags in the k8s/nemoclaw-k8s.yaml manifest
with immutable image digests: locate the image: fields currently set to
docker:24-dind and the other two mutable tags and change them to fully qualified
references using the tag plus `@sha256`:<digest> (e.g. name:tag@sha256:...) or
split dev/prod manifests and pin only the production overlay; ensure the three
occurrences (the image: entries referenced in the comment) are updated so
deployments use the pinned digests rather than mutable tags.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 38afd286-483f-4169-8c73-eb06f57d5362

📥 Commits

Reviewing files that changed from the base of the PR and between c99e3e8 and 60fb97f.

📒 Files selected for processing (2)
  • k8s/nemoclaw-k8s.yaml
  • nemoclaw-blueprint/policies/presets/huggingface.yaml

@dknos dknos force-pushed the fix/k8s-image-digests-1436 branch from 60fb97f to d24731e Compare April 5, 2026 00:31
@dknos
Copy link
Copy Markdown
Contributor Author

dknos commented Apr 5, 2026

Updated — images are now pinned by SHA256 digest. Removed out-of-scope huggingface.yaml change.

@dknos
Copy link
Copy Markdown
Contributor Author

dknos commented Apr 6, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 6, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@wscurran wscurran added K8s Use this label to identify Kubernetes deployment issues with NemoClaw. fix documentation Improvements or additions to documentation labels Apr 6, 2026
Copy link
Copy Markdown
Contributor Author

@dknos dknos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed resolved: all three container image references in k8s/nemoclaw-k8s.yaml now use @sha256: digest pinning (docker:24-dind, node:22, busybox). Comments about digest pinning have been replaced with actual pinned image fields. CodeRabbit's latest re-review marked the file as trivially changed with no actionable comments.

@dknos
Copy link
Copy Markdown
Contributor Author

dknos commented Apr 6, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 6, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@dknos dknos force-pushed the fix/k8s-image-digests-1436 branch from d24731e to 33369d1 Compare April 8, 2026 06:03
dknos added 2 commits April 8, 2026 01:32
Pin docker:24-dind, node:22, and busybox images by digest to prevent
supply chain drift from mutable tags.

Fixes NVIDIA#1436

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: dknos <rneebo@gmail.com>
Discord bots rarely need DELETE access. Removing it reduces the
attack surface for sandbox agents interacting with Discord APIs.

Fixes NVIDIA#1433

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: dknos <rneebo@gmail.com>
@dknos dknos force-pushed the fix/k8s-image-digests-1436 branch from 33369d1 to 994e54d Compare April 8, 2026 06:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation fix K8s Use this label to identify Kubernetes deployment issues with NemoClaw.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

K8s Manifest Images Not Pinned by Digest — Mutable Tag References - IssueFinder - SN 12

2 participants