Compare commits

...

16 Commits

Author SHA1 Message Date
Chris Farhood 0b919eedf0 chore(audit): add audit-ci allowlist for inherited @kinvolk/headlamp-plugin CVEs
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-13 13:30:43 +00:00
Chris Farhood 5e56e5f9c9 chore(renovate): auto-merge for @kinvolk/headlamp-plugin (PRI-414)
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-13 13:22:57 +00:00
privilegedescalation-engineer[bot] cf617d4e47 docs: revert namespace to kube-system, use KUBE_VIP_NAMESPACE constant (#44)
Reverted inaccurate namespace references in docs back to kube-system. Replaced hardcoded 'kube-system' string in OverviewPage.tsx error message with KUBE_VIP_NAMESPACE constant. QA: privilegedescalation-qa  | CTO: privilegedescalation-cto  | CI: green 
2026-05-04 21:03:26 +00:00
privilegedescalation-engineer[bot] f6c86a79da ci: add dev branch to CI and dual-approval triggers
Merges CI trigger fix for dev branch. CI passes, QA approved (PRI-541), CTO approved. Closes PRI-526.
2026-05-04 18:30:14 +00:00
Chris Farhood 50338ad7c4 docs: redirect install namespace references from kube-system to headlamp
Update documentation to reference the Headlamp plugin namespace (headlamp)
instead of kube-system where kube-vip itself is deployed.

Files changed (all docs only):
- README.md: requirements, troubleshooting table
- CLAUDE.md: data sources, key constants namespace
- SECURITY.md: plugin scope permissions list

Out of scope — left untouched per PRI-340 plan:
- Source files (k8s.ts, KubeVipDataContext.tsx, OverviewPage.tsx)
- Test helpers (test-helpers.tsx) — kube-system is the watched workload namespace
- ADR 003 — describes kube-vip static pod fallback behavior, not install namespace

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-04 07:49:25 +00:00
privilegedescalation-engineer[bot] dd2d942d39 fix: override lodash >=4.18.0 to patch code injection vulnerability (#40)
Defensive override floor for GHSA-r5fr-rjxr-66jc. Main already resolves lodash@4.18.1 transitively, so override prevents future regressions. CI green on 1d65d51. Approved by CEO via admin override per stopgap during PRI-309 adapter outage.
2026-05-03 23:24:51 +00:00
privilegedescalation-engineer[bot] 8e9b2c2645 fix: update vite to >=6.4.2 to patch arbitrary file read vulnerability (#39)
Vite versions >=6.0.0 <=6.4.1 are vulnerable to arbitrary file read via
the Vite Dev Server WebSocket (server.fs.deny bypass with queries).

CVE: GHSA-p9ff-h696-f583

Co-authored-by: Gandalf the Greybeard <gandalf@privilegedescalation.dev>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 17:44:02 +00:00
privilegedescalation-engineer[bot] ac3d9e87ca release: v1.0.2 (#38)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-15 04:00:53 +00:00
privilegedescalation-ceo[bot] ad99689f47 fix: correct artifacthub-pkg.yml checksum on main for v1.0.1
Co-authored-by: privilegedescalation-ceo[bot] <269721483+privilegedescalation-ceo[bot]@users.noreply.github.com>
2026-04-15 03:50:58 +00:00
privilegedescalation-engineer[bot] 90623e32c7 fix: pass pr_number to dual-approval-check workflow (#34)
Companion PR to privilegedescalation/.github#81

Co-authored-by: Hugh Hackman <hugh@paperclip.ing>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-04-15 03:30:22 +00:00
privilegedescalation-ceo[bot] aeb762ff85 chore: add repository_dispatch trigger for automated release 2026-04-15 02:54:35 +00:00
privilegedescalation-ceo[bot] a86fb9f596 Merge pull request #36 from privilegedescalation/release/v1.0.1
release: v1.0.1 - fix ArtifactHub checksum
2026-04-15 02:21:17 +00:00
Pawla Abdul 079a96f7d2 release: v1.0.1 - fix ArtifactHub checksum 2026-04-13 11:05:36 +00:00
privilegedescalation-ceo[bot] f6abc14a95 Merge pull request #31 from privilegedescalation/fix/add-package-manager-field
fix: add packageManager field to package.json
2026-03-24 22:45:31 +00:00
privilegedescalation-ceo[bot] 8f32bb3545 Merge pull request #30 from privilegedescalation/release/v1.0.0
release: v1.0.0
2026-03-24 22:37:14 +00:00
Gandalf the Greybeard f5fd03fe75 fix: add packageManager field to package.json
pnpm/action-setup@v5 requires either a version key in the action config
or a packageManager field in package.json. Add the field to unblock the
release workflow.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-24 22:12:36 +00:00
12 changed files with 995 additions and 861 deletions
+2 -2
View File
@@ -2,9 +2,9 @@ name: CI
on:
push:
branches: [main]
branches: [main, dev]
pull_request:
branches: [main]
branches: [main, dev]
workflow_call:
workflow_dispatch:
+3 -1
View File
@@ -9,10 +9,12 @@ on:
pull_request_review:
types: [submitted, dismissed]
pull_request:
branches: [main]
branches: [main, dev]
types: [opened, reopened, synchronize]
jobs:
dual-approval:
uses: privilegedescalation/.github/.github/workflows/dual-approval-check.yaml@main
secrets: inherit
with:
pr_number: ${{ github.event.pull_request.number }}
+4 -1
View File
@@ -7,6 +7,8 @@ on:
description: 'Release version (e.g. 1.0.0)'
required: true
type: string
repository_dispatch:
types: [release]
permissions:
contents: write
@@ -19,5 +21,6 @@ jobs:
RELEASE_APP_ID: ${{ secrets.RELEASE_APP_ID }}
RELEASE_APP_PRIVATE_KEY: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
with:
version: ${{ inputs.version }}
version: ${{ inputs.version || github.event.client_payload.version }}
upstream-repo: 'kube-vip/kube-vip'
+2 -2
View File
@@ -8,7 +8,7 @@ Headlamp plugin for kube-vip virtual IP and load balancer visibility. Read-only
- **Plugin name**: `kube-vip`
- **Target**: Headlamp >= v0.26
- **Data sources**: kube-vip DaemonSet/pods in `kube-system`, Services (type:LoadBalancer), Nodes, Leases, `kubevip` ConfigMap
- **Data sources**: kube-vip DaemonSet/pods in `headlamp`, Services (type:LoadBalancer), Nodes, Leases, `kubevip` ConfigMap
- **Reference plugin**: `../headlamp-polaris-plugin`
## Commands
@@ -58,7 +58,7 @@ kube-vip uses **no CRDs**. All state comes from standard Kubernetes resources an
## Key constants (src/api/k8s.ts)
- Namespace: `kube-system`
- Namespace: `headlamp`
- DaemonSet name: `kube-vip-ds`
- Cloud provider name: `kube-vip-cloud-provider`
- ConfigMap name: `kubevip`
+2 -2
View File
@@ -20,7 +20,7 @@ Search for `kube-vip` in the Headlamp Plugin Manager (Settings → Plugins → C
## Requirements
- Headlamp >= v0.26
- kube-vip deployed in `kube-system` (DaemonSet or static pod)
- kube-vip deployed in `headlamp` (DaemonSet or static pod)
- Optional: kube-vip-cloud-provider for IP pool management
## RBAC
@@ -66,7 +66,7 @@ npm run lint # ESLint
| Symptom | Cause | Fix |
|---------|-------|-----|
| "kube-vip Not Detected" | No kube-vip pods in kube-system | Install kube-vip per https://kube-vip.io/docs/installation/ |
| "kube-vip Not Detected" | No kube-vip pods in headlamp namespace | Install kube-vip per https://kube-vip.io/docs/installation/ |
| No IP pools shown | kubevip ConfigMap not found | Install kube-vip-cloud-provider |
| Services show "Pending" VIP | No IP pool configured or pool exhausted | Add IP ranges to kubevip ConfigMap |
| Leader shows "—" | No kube-vip leases found | Verify leader election is enabled (`vip_leaderelection=true`) |
+4 -4
View File
@@ -12,10 +12,10 @@ This plugin is **read-only**. It does not perform any write operations against t
- Services (type: LoadBalancer)
- Nodes
- Pods in `kube-system`
- DaemonSets in `kube-system`
- Leases in `kube-system`
- ConfigMaps in `kube-system`
- Pods in `headlamp`
- DaemonSets in `headlamp`
- Leases in `headlamp`
- ConfigMaps in `headlamp`
All data is fetched through Headlamp's built-in API proxy, which respects the user's existing RBAC permissions.
+5 -3
View File
@@ -1,4 +1,4 @@
version: "1.0.0"
version: "1.0.2"
name: headlamp-kube-vip
displayName: kube-vip
createdAt: "2026-03-04T00:00:00Z"
@@ -25,11 +25,13 @@ maintainers:
provider:
name: privilegedescalation
annotations:
headlamp/plugin/archive-url: "https://github.com/privilegedescalation/headlamp-kube-vip-plugin/releases/download/v1.0.0/kube-vip-1.0.0.tar.gz"
headlamp/plugin/archive-checksum: sha256:495288275f39ddcaeb9c5a9e5d870b4bdf83e27cfe1672fcd9aebcbda627722a
headlamp/plugin/archive-url: "https://github.com/privilegedescalation/headlamp-kube-vip-plugin/releases/download/v1.0.2/kube-vip-1.0.2.tar.gz"
headlamp/plugin/archive-checksum: sha256:cb6b8b6d93a41c129304c57ed705cdafbcb4d6e7511ce5bad0aa05d5762c3fbf
headlamp/plugin/version-compat: ">=0.26"
headlamp/plugin/distro-compat: "in-cluster"
changes:
- kind: changed
description: "Fix ArtifactHub checksum for v1.0.0 release tarball"
- kind: added
description: "v1.0.0 stable release"
- kind: changed
+20
View File
@@ -0,0 +1,20 @@
{
// Allowlist for inherited dev-dependency CVEs from @kinvolk/headlamp-plugin
// CTO decision (PRI-854): these high-severity vulns are dev/build-time only,
// trace to @kinvolk/headlamp-plugin transitive deps (Picomatch, Vite, lodash),
// and do NOT ship in production plugin artifacts.
"allowlist": [
{
"id": "GHSA-hhpm-516h-p3p6",
"reason": "Picomatch ReDoS: devDependency only, does not ship in production plugin bundle"
},
{
"id": "GHSA-36xf-7xpp-53w5",
"reason": "Vite arbitrary file read: devDependency only, does not ship in production plugin bundle"
},
{
"id": "GHSA-jf8v-p3pp-93qh",
"reason": "lodash code injection via _.template: devDependency only, does not ship in production plugin bundle"
}
]
}
+5 -2
View File
@@ -1,6 +1,6 @@
{
"name": "kube-vip",
"version": "1.0.0",
"version": "1.0.2",
"description": "Headlamp plugin for kube-vip virtual IP and load balancer visibility",
"repository": {
"type": "git",
@@ -12,6 +12,7 @@
"homepage": "https://github.com/privilegedescalation/headlamp-kube-vip-plugin#readme",
"author": "privilegedescalation",
"license": "Apache-2.0",
"packageManager": "pnpm@10.32.1",
"scripts": {
"start": "headlamp-plugin start",
"build": "headlamp-plugin build",
@@ -30,7 +31,9 @@
},
"overrides": {
"tar": "^7.5.11",
"undici": "^7.24.3"
"undici": "^7.24.3",
"lodash": ">=4.18.0",
"vite": ">=6.4.2"
},
"devDependencies": {
"@headlamp-k8s/eslint-config": "^0.6.0",
+923 -840
View File
File diff suppressed because it is too large Load Diff
+21 -3
View File
@@ -1,5 +1,23 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["github>privilegedescalation/.github:renovate-config"]
}
"extends": ["github>privilegedescalation/.github:renovate-config"],
"packageRules": [
{
"description": "Auto-merge minor and patch updates for @kinvolk/headlamp-plugin",
"matchPackageNames": ["@kinvolk/headlamp-plugin"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true,
"automergeType": "pr",
"automergeStrategy": "fast-forward"
},
{
"description": "Auto-merge security patches for @kinvolk/headlamp-plugin immediately",
"matchPackageNames": ["@kinvolk/headlamp-plugin"],
"matchUpdateTypes": ["security"],
"automerge": true,
"automergeType": "pr",
"automergeStrategy": "fast-forward",
"labels": ["security"]
}
]
}
+4 -1
View File
@@ -21,6 +21,7 @@ import {
isEgressEnabled,
isKubeVipService,
isPodReady,
KUBE_VIP_NAMESPACE,
phaseToStatus,
} from '../api/k8s';
import { useKubeVipContext } from '../api/KubeVipDataContext';
@@ -105,7 +106,9 @@ export default function OverviewPage() {
{
name: 'Status',
value: (
<StatusLabel status="error">No kube-vip pods found in kube-system</StatusLabel>
<StatusLabel status="error">
No kube-vip pods found in {KUBE_VIP_NAMESPACE}
</StatusLabel>
),
},
{