Compare commits

...

4 Commits

Author SHA1 Message Date
Chris Farhood 56d10a1d40 docs: update Headlamp install namespace from kube-system to headlamp
Updates documentation to reflect that Headlamp is installed in the
'headlamp' namespace (not 'kube-system'). Only documentation files
that reference the Headlamp install namespace are changed.

Changed files:
- docs/deployment/production.md: NetworkPolicy namespaceSelector
- docs/troubleshooting/network-problems.md: NetworkPolicy namespaceSelector
- docs/user-guide/rbac-permissions.md: NetworkPolicy namespaceSelector
- e2e/README.md: kubectl commands for local E2E testing

Files NOT changed (upstream workload namespace - out of scope per PRI-340):
- Source files, tests, or configs referencing where Polaris runs

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-08 11:07:50 +00:00
Chris Farhood 1f02811731 Reference shared infra RBAC in deployment scripts
PRI-750: update plugin repos to reference shared infra RBAC (PRI-695 follow-up)

- deployment/e2e-ci-runner-rbac.yaml: replaced duplicate manifest with
  reference comment pointing to privilegedescalation/infra/base/rbac/e2e-ci-runner-headlamp-rbac.yaml
- scripts/deploy-e2e-headlamp.sh: updated RBAC preflight comment and error
  message to reference infra path
- scripts/teardown-e2e-headlamp.sh: added RBAC reference comment

Infra RBAC is the source of truth managed by Flux GitOps. CI workflow
unchanged (Hugh owns .github/workflows/).
2026-05-05 16:52:49 +00:00
Chris Farhood 7b58f684cf fix: correct RBAC manifest per QA review (PRI-555)
- Remove rbac.authorization.k8s.io privilege escalation block
- Fix orphaned comment from round 1
- Add EOF newline
- Keep serviceaccounts/token for E2E auth (confirmed needed)
- Namespace already correct (privilegedescalation-dev)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-05 00:45:38 +00:00
Chris Farhood e2f220c418 docs: update Headlamp install namespace references from kube-system to headlamp
Updates all documentation references to the Headlamp install namespace
from kube-system to headlamp as part of PRI-433.

In-scope files updated:
- README.md, SECURITY.md
- docs/getting-started/installation.md, quick-start.md, prerequisites.md
- docs/deployment/helm.md, kubernetes.md, production.md
- docs/troubleshooting/README.md, common-issues.md, rbac-issues.md
- docs/user-guide/configuration.md, rbac-permissions.md
- docs/TESTING.md, TROUBLESHOOTING.md, DEPLOYMENT.md

Out-of-scope (unchanged):
- Source files referencing upstream workload namespace
- RBAC manifests describing Polaris namespace (polaris ns is unchanged)
- NetworkPolicy namespaceSelector (API server runs in kube-system)
- design-decisions.md and ARCHITECTURE.md (URL hashes refer to cluster namespaces, not Headlamp install ns)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-04 07:25:28 +00:00
22 changed files with 157 additions and 188 deletions
+2 -2
View File
@@ -97,7 +97,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp # adjust to match your Headlamp service account name: headlamp # adjust to match your Headlamp service account
namespace: kube-system # adjust to match the namespace Headlamp runs in namespace: headlamp # adjust to match the namespace Headlamp runs in
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -197,7 +197,7 @@ npm test
npm run test:watch npm run test:watch
# E2E tests (Playwright) # E2E tests (Playwright)
export HEADLAMP_TOKEN=$(kubectl create token headlamp -n kube-system --duration=24h) export HEADLAMP_TOKEN=$(kubectl create token headlamp -n headlamp --duration=24h)
npm run e2e npm run e2e
npm run e2e:headed # see browser npm run e2e:headed # see browser
``` ```
+1 -1
View File
@@ -71,7 +71,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
+8 -42
View File
@@ -1,46 +1,12 @@
--- ---
# RBAC for the GitHub Actions CI runner to manage the E2E Headlamp instance. # RBAC for the GitHub Actions CI runner to manage E2E Headlamp instances.
# CI-only test fixture — NOT for production use. # CI-only test fixture — NOT for production use.
# #
# Grants the ARC runner service account permissions in the privilegedescalation-dev # This file is a REFERENCE ONLY. The canonical manifest lives in:
# namespace to deploy and tear down a dedicated Headlamp instance via Helm. # privilegedescalation/infra/base/rbac/e2e-ci-runner-headlamp-rbac.yaml
#
# The infra repo is managed by Flux GitOps and is the source of truth.
# Do not apply this file directly — it is kept here for developer reference only.
#
# E2E resources run in `privilegedescalation-dev` — nothing persists beyond a test run. # E2E resources run in `privilegedescalation-dev` — nothing persists beyond a test run.
# # RBAC is managed via Flux from privilegedescalation/infra — do not apply manually.
# Plugin is loaded via ConfigMap volume mount — no custom Docker images.
#
# Prerequisites:
# kubectl apply -f deployment/e2e-ci-runner-rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: e2e-ci-runner
namespace: privilegedescalation-dev
rules:
# Helm needs to manage these resources for the Headlamp chart
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "create", "update", "patch", "delete", "watch"]
- apiGroups: [""]
resources: ["services", "serviceaccounts", "configmaps", "secrets"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
# Token creation for E2E test auth
- apiGroups: [""]
resources: ["serviceaccounts/token"]
verbs: ["create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: e2e-ci-runner-binding
namespace: privilegedescalation-dev
subjects:
- kind: ServiceAccount
name: runners-privilegedescalation-gha-rs-no-permission
namespace: arc-runners
roleRef:
kind: Role
name: e2e-ci-runner
apiGroup: rbac.authorization.k8s.io
+2 -2
View File
@@ -33,7 +33,7 @@ kubectl -n polaris get svc polaris-dashboard
kubectl get --raw /api/v1/namespaces/polaris/services/polaris-dashboard:80/proxy/results.json | jq .PolarisOutputVersion kubectl get --raw /api/v1/namespaces/polaris/services/polaris-dashboard:80/proxy/results.json | jq .PolarisOutputVersion
# Verify Headlamp is deployed # Verify Headlamp is deployed
kubectl -n kube-system get pods -l app.kubernetes.io/name=headlamp kubectl -n headlamp get pods -l app.kubernetes.io/name=headlamp
``` ```
## Installation Methods ## Installation Methods
@@ -59,7 +59,7 @@ kubectl -n kube-system get pods -l app.kubernetes.io/name=headlamp
```bash ```bash
helm upgrade --install headlamp headlamp/headlamp \ helm upgrade --install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml --values headlamp-values.yaml
``` ```
+2 -3
View File
@@ -268,10 +268,9 @@ npm run e2e
```bash ```bash
# Create token # Create token
export HEADLAMP_TOKEN=$(kubectl create token headlamp -n kube-system --duration=24h) export HEADLAMP_TOKEN=$(kubectl create token headlamp -n headlamp --duration=24h)
# Port-forward for local testing kubectl port-forward -n headlamp svc/headlamp 4466:80
kubectl port-forward -n kube-system svc/headlamp 4466:80
# Run tests # Run tests
HEADLAMP_URL=http://localhost:4466 npm run e2e HEADLAMP_URL=http://localhost:4466 npm run e2e
+16 -16
View File
@@ -33,7 +33,7 @@ This guide covers common issues encountered when using the Headlamp Polaris Plug
```bash ```bash
# View Headlamp pod logs (plugin sidecar) # View Headlamp pod logs (plugin sidecar)
kubectl logs -n kube-system deployment/headlamp -c headlamp-plugin kubectl logs -n headlamp deployment/headlamp -c headlamp-plugin
# Expected output: # Expected output:
# Installing plugin from https://github.com/.../headlamp-polaris-plugin-X.Y.Z.tar.gz # Installing plugin from https://github.com/.../headlamp-polaris-plugin-X.Y.Z.tar.gz
@@ -43,7 +43,7 @@ kubectl logs -n kube-system deployment/headlamp -c headlamp-plugin
**Verify plugin files exist**: **Verify plugin files exist**:
```bash ```bash
kubectl exec -n kube-system deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/ kubectl exec -n headlamp deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/
# Should show: headlamp-polaris-plugin/ # Should show: headlamp-polaris-plugin/
``` ```
@@ -118,7 +118,7 @@ Expected subjects:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
``` ```
For OIDC mode: For OIDC mode:
@@ -154,7 +154,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -169,7 +169,7 @@ Service account mode:
```bash ```bash
# Impersonate Headlamp service account # Impersonate Headlamp service account
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
--resource-name=polaris-dashboard \ --resource-name=polaris-dashboard \
-n polaris -n polaris
# Expected: yes # Expected: yes
@@ -189,7 +189,7 @@ kubectl auth can-i get services/proxy \
After applying RBAC changes: After applying RBAC changes:
```bash ```bash
kubectl rollout restart deployment headlamp -n kube-system kubectl rollout restart deployment headlamp -n headlamp
``` ```
--- ---
@@ -490,7 +490,7 @@ Run this script to test all RBAC components:
#!/bin/bash #!/bin/bash
NS="polaris" NS="polaris"
SA="headlamp" SA="headlamp"
SA_NS="kube-system" SA_NS="headlamp"
echo "=== Testing RBAC for Polaris Plugin ===" echo "=== Testing RBAC for Polaris Plugin ==="
@@ -529,8 +529,8 @@ echo "=== Test complete ==="
Test connectivity from Headlamp to Polaris: Test connectivity from Headlamp to Polaris:
```bash ```bash
# Create debug pod in kube-system namespace # Create debug pod in headlamp namespace
kubectl run netdebug -n kube-system --rm -it --image=nicolaka/netshoot -- bash kubectl run netdebug -n headlamp --rm -it --image=nicolaka/netshoot -- bash
# Inside pod, test DNS and HTTP # Inside pod, test DNS and HTTP
nslookup polaris-dashboard.polaris.svc.cluster.local nslookup polaris-dashboard.polaris.svc.cluster.local
@@ -545,11 +545,11 @@ If you have audit logging enabled, check for denied requests:
```bash ```bash
# View recent audit logs (location varies by cluster) # View recent audit logs (location varies by cluster)
kubectl logs -n kube-system kube-apiserver-* | grep polaris-dashboard kubectl logs -n headlamp kube-apiserver-* | grep polaris-dashboard
# Look for lines with: # Look for lines with:
# "reason": "Forbidden" # "reason": "Forbidden"
# "user": "system:serviceaccount:kube-system:headlamp" # "user": "system:serviceaccount:headlamp:headlamp"
``` ```
--- ---
@@ -567,7 +567,7 @@ kubectl logs -n kube-system kube-apiserver-* | grep polaris-dashboard
**Check sidecar logs**: **Check sidecar logs**:
```bash ```bash
kubectl logs -n kube-system deployment/headlamp -c headlamp-plugin kubectl logs -n headlamp deployment/headlamp -c headlamp-plugin
``` ```
**Common errors**: **Common errors**:
@@ -591,7 +591,7 @@ Error: 404 Not Found
**Solution**: Verify `archive-url` in plugin config matches GitHub release: **Solution**: Verify `archive-url` in plugin config matches GitHub release:
```bash ```bash
kubectl get configmap headlamp-plugin-config -n kube-system -o yaml kubectl get configmap headlamp-plugin-config -n headlamp -o yaml
``` ```
Expected format: Expected format:
@@ -677,13 +677,13 @@ If none of these solutions work, gather debugging information and open an issue:
1. **Version Information**: 1. **Version Information**:
```bash ```bash
kubectl get pods -n kube-system -l app.kubernetes.io/name=headlamp -o yaml | grep image: kubectl get pods -n headlamp -l app.kubernetes.io/name=headlamp -o yaml | grep image:
``` ```
2. **Plugin Version**: 2. **Plugin Version**:
- Check Settings → Plugins in Headlamp UI - Check Settings → Plugins in Headlamp UI
- Or: `kubectl exec -n kube-system deployment/headlamp -c headlamp -- cat /headlamp/plugins/headlamp-polaris-plugin/package.json` - Or: `kubectl exec -n headlamp deployment/headlamp -c headlamp -- cat /headlamp/plugins/headlamp-polaris-plugin/package.json`
3. **Browser Console Output**: 3. **Browser Console Output**:
@@ -698,7 +698,7 @@ If none of these solutions work, gather debugging information and open an issue:
5. **Pod Logs**: 5. **Pod Logs**:
```bash ```bash
kubectl logs -n kube-system deployment/headlamp -c headlamp --tail=100 kubectl logs -n headlamp deployment/headlamp -c headlamp --tail=100
kubectl logs -n polaris deployment/polaris-dashboard --tail=100 kubectl logs -n polaris deployment/polaris-dashboard --tail=100
``` ```
+20 -20
View File
@@ -41,11 +41,11 @@ pluginsManager:
```bash ```bash
# Install Headlamp # Install Headlamp
helm install headlamp headlamp/headlamp \ helm install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml --values headlamp-values.yaml
# Wait for deployment # Wait for deployment
kubectl -n kube-system wait --for=condition=available deployment/headlamp --timeout=300s kubectl -n headlamp wait --for=condition=available deployment/headlamp --timeout=300s
``` ```
After installation, install the plugin via Headlamp UI (**Settings → Plugins → Catalog**). After installation, install the plugin via Headlamp UI (**Settings → Plugins → Catalog**).
@@ -131,7 +131,7 @@ Deploy:
```bash ```bash
helm upgrade --install headlamp headlamp/headlamp \ helm upgrade --install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml \ --values headlamp-values.yaml \
--wait \ --wait \
--timeout 5m --timeout 5m
@@ -177,7 +177,7 @@ apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: headlamp-plugin-config name: headlamp-plugin-config
namespace: kube-system namespace: headlamp
data: data:
plugin.yml: | plugin.yml: |
- name: headlamp-polaris-plugin - name: headlamp-polaris-plugin
@@ -191,7 +191,7 @@ Apply ConfigMap then deploy Headlamp:
kubectl apply -f headlamp-plugin-config.yaml kubectl apply -f headlamp-plugin-config.yaml
helm upgrade --install headlamp headlamp/headlamp \ helm upgrade --install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml --values headlamp-values.yaml
``` ```
@@ -221,7 +221,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease kind: HelmRelease
metadata: metadata:
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
spec: spec:
interval: 30m interval: 30m
chart: chart:
@@ -300,7 +300,7 @@ kubectl apply -f helmrepository.yaml
kubectl apply -f helmrelease.yaml kubectl apply -f helmrelease.yaml
# Watch deployment # Watch deployment
flux get helmreleases -n kube-system --watch flux get helmreleases -n headlamp --watch
``` ```
## RBAC Configuration ## RBAC Configuration
@@ -329,7 +329,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -349,7 +349,7 @@ helm repo update
# Upgrade Headlamp (preserves plugin configuration) # Upgrade Headlamp (preserves plugin configuration)
helm upgrade headlamp headlamp/headlamp \ helm upgrade headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml \ --values headlamp-values.yaml \
--wait --wait
``` ```
@@ -365,15 +365,15 @@ helm upgrade headlamp headlamp/headlamp \
```bash ```bash
# Update ConfigMap with new version # Update ConfigMap with new version
kubectl -n kube-system edit configmap headlamp-plugin-config kubectl -n headlamp edit configmap headlamp-plugin-config
# Update version and URL: # Update version and URL:
# version: 0.3.6 # version: 0.3.6
# url: https://github.com/.../v0.3.6/polaris-0.3.10.tar.gz # url: https://github.com/.../v0.3.6/polaris-0.3.10.tar.gz
# Restart deployment to trigger init container # Restart deployment to trigger init container
kubectl -n kube-system rollout restart deployment/headlamp kubectl -n headlamp rollout restart deployment/headlamp
kubectl -n kube-system rollout status deployment/headlamp kubectl -n headlamp rollout status deployment/headlamp
``` ```
## Troubleshooting ## Troubleshooting
@@ -382,25 +382,25 @@ kubectl -n kube-system rollout status deployment/headlamp
```bash ```bash
# Check Headlamp values # Check Headlamp values
helm get values headlamp -n kube-system helm get values headlamp -n headlamp
# Verify plugin files exist # Verify plugin files exist
kubectl -n kube-system exec deployment/headlamp -c headlamp -- \ kubectl -n headlamp exec deployment/headlamp -c headlamp -- \
ls -la /headlamp/plugins/headlamp-polaris-plugin/ ls -la /headlamp/plugins/headlamp-polaris-plugin/
# If missing, reinstall plugin via UI or check init container logs # If missing, reinstall plugin via UI or check init container logs
kubectl -n kube-system logs deployment/headlamp -c install-polaris-plugin kubectl -n headlamp logs deployment/headlamp -c install-polaris-plugin
``` ```
### Helm Release Stuck ### Helm Release Stuck
```bash ```bash
# Check Helm release status # Check Helm release status
helm list -n kube-system helm list -n headlamp
# If stuck, force upgrade # If stuck, force upgrade
helm upgrade headlamp headlamp/headlamp \ helm upgrade headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml \ --values headlamp-values.yaml \
--force \ --force \
--wait --wait
@@ -410,13 +410,13 @@ helm upgrade headlamp headlamp/headlamp \
```bash ```bash
# Check HelmRelease status # Check HelmRelease status
flux get helmreleases -n kube-system flux get helmreleases -n headlamp
# Check events # Check events
kubectl -n kube-system describe helmrelease headlamp kubectl -n headlamp describe helmrelease headlamp
# Force reconciliation # Force reconciliation
flux reconcile helmrelease headlamp -n kube-system flux reconcile helmrelease headlamp -n headlamp
``` ```
## Next Steps ## Next Steps
+21 -21
View File
@@ -47,7 +47,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -71,7 +71,7 @@ kubectl -n polaris get rolebinding headlamp-polaris-proxy
# Test permission # Test permission
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
@@ -90,7 +90,7 @@ apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: headlamp-plugin-config name: headlamp-plugin-config
namespace: kube-system namespace: headlamp
labels: labels:
app.kubernetes.io/name: headlamp app.kubernetes.io/name: headlamp
app.kubernetes.io/component: plugin-config app.kubernetes.io/component: plugin-config
@@ -109,7 +109,7 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
labels: labels:
app.kubernetes.io/name: headlamp app.kubernetes.io/name: headlamp
spec: spec:
@@ -194,7 +194,7 @@ apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
metadata: metadata:
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
labels: labels:
app.kubernetes.io/name: headlamp app.kubernetes.io/name: headlamp
@@ -204,7 +204,7 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
labels: labels:
app.kubernetes.io/name: headlamp app.kubernetes.io/name: headlamp
spec: spec:
@@ -235,27 +235,27 @@ kubectl apply -f headlamp-service.yaml
kubectl apply -f headlamp-serviceaccount.yaml kubectl apply -f headlamp-serviceaccount.yaml
# Wait for deployment to be ready # Wait for deployment to be ready
kubectl -n kube-system wait --for=condition=available deployment/headlamp --timeout=300s kubectl -n headlamp wait --for=condition=available deployment/headlamp --timeout=300s
``` ```
### 2. Verify Deployment ### 2. Verify Deployment
```bash ```bash
# Check pods are running # Check pods are running
kubectl -n kube-system get pods -l app.kubernetes.io/name=headlamp kubectl -n headlamp get pods -l app.kubernetes.io/name=headlamp
# Expected output: # Expected output:
# NAME READY STATUS RESTARTS AGE # NAME READY STATUS RESTARTS AGE
# headlamp-xxxxxxxxxx-xxxxx 1/1 Running 0 2m # headlamp-xxxxxxxxxx-xxxxx 1/1 Running 0 2m
# Check init container logs # Check init container logs
kubectl -n kube-system logs deployment/headlamp -c install-plugins kubectl -n headlamp logs deployment/headlamp -c install-plugins
# Expected output: # Expected output:
# Plugin installation complete # Plugin installation complete
# Verify plugin files exist # Verify plugin files exist
kubectl -n kube-system exec deployment/headlamp -c headlamp -- \ kubectl -n headlamp exec deployment/headlamp -c headlamp -- \
ls -la /headlamp/plugins/headlamp-polaris-plugin/ ls -la /headlamp/plugins/headlamp-polaris-plugin/
# Expected output: # Expected output:
@@ -273,7 +273,7 @@ kubectl get --raw /api/v1/namespaces/polaris/services/polaris-dashboard:80/proxy
```bash ```bash
# Port-forward to access locally # Port-forward to access locally
kubectl -n kube-system port-forward service/headlamp 8080:80 kubectl -n headlamp port-forward service/headlamp 8080:80
# Open browser to http://localhost:8080 # Open browser to http://localhost:8080
``` ```
@@ -309,7 +309,7 @@ k8s/
apiVersion: kustomize.config.k8s.io/v1beta1 apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization kind: Kustomization
namespace: kube-system namespace: headlamp
commonLabels: commonLabels:
app.kubernetes.io/name: headlamp app.kubernetes.io/name: headlamp
@@ -401,7 +401,7 @@ spec:
- apiVersion: apps/v1 - apiVersion: apps/v1
kind: Deployment kind: Deployment
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
``` ```
## Upgrading the Plugin ## Upgrading the Plugin
@@ -410,24 +410,24 @@ spec:
```bash ```bash
# Edit ConfigMap with new version # Edit ConfigMap with new version
kubectl -n kube-system edit configmap headlamp-plugin-config kubectl -n headlamp edit configmap headlamp-plugin-config
# Update version and URL: # Update version and URL:
# version: 0.3.6 # version: 0.3.6
# url: https://github.com/.../v0.3.6/polaris-0.3.10.tar.gz # url: https://github.com/.../v0.3.6/polaris-0.3.10.tar.gz
# Restart deployment to trigger init container # Restart deployment to trigger init container
kubectl -n kube-system rollout restart deployment/headlamp kubectl -n headlamp rollout restart deployment/headlamp
# Wait for rollout to complete # Wait for rollout to complete
kubectl -n kube-system rollout status deployment/headlamp kubectl -n headlamp rollout status deployment/headlamp
``` ```
### Verify Upgrade ### Verify Upgrade
```bash ```bash
# Check init container logs # Check init container logs
kubectl -n kube-system logs deployment/headlamp -c install-plugins kubectl -n headlamp logs deployment/headlamp -c install-plugins
# Verify new version in UI # Verify new version in UI
# Navigate to Settings → Plugins in Headlamp # Navigate to Settings → Plugins in Headlamp
@@ -439,7 +439,7 @@ kubectl -n kube-system logs deployment/headlamp -c install-plugins
```bash ```bash
# Check init container logs # Check init container logs
kubectl -n kube-system logs deployment/headlamp -c install-plugins kubectl -n headlamp logs deployment/headlamp -c install-plugins
# Common issues: # Common issues:
# 1. Network connectivity to GitHub # 1. Network connectivity to GitHub
@@ -451,14 +451,14 @@ kubectl -n kube-system logs deployment/headlamp -c install-plugins
```bash ```bash
# Verify HEADLAMP_CONFIG_WATCH_PLUGINS is false # Verify HEADLAMP_CONFIG_WATCH_PLUGINS is false
kubectl -n kube-system get deployment headlamp -o yaml | grep WATCH_PLUGINS kubectl -n headlamp get deployment headlamp -o yaml | grep WATCH_PLUGINS
# Expected output: # Expected output:
# - name: HEADLAMP_CONFIG_WATCH_PLUGINS # - name: HEADLAMP_CONFIG_WATCH_PLUGINS
# value: "false" # value: "false"
# If not set or "true", update deployment # If not set or "true", update deployment
kubectl -n kube-system edit deployment headlamp kubectl -n headlamp edit deployment headlamp
``` ```
### RBAC Permissions Denied ### RBAC Permissions Denied
@@ -466,7 +466,7 @@ kubectl -n kube-system edit deployment headlamp
```bash ```bash
# Test RBAC # Test RBAC
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
+16 -16
View File
@@ -37,8 +37,8 @@ kubectl -n polaris get svc polaris-dashboard
kubectl get --raw /api/v1/namespaces/polaris/services/polaris-dashboard:80/proxy/results.json | jq .PolarisOutputVersion kubectl get --raw /api/v1/namespaces/polaris/services/polaris-dashboard:80/proxy/results.json | jq .PolarisOutputVersion
# Verify Headlamp # Verify Headlamp
kubectl -n kube-system get deployment headlamp kubectl -n headlamp get deployment headlamp
kubectl -n kube-system get svc headlamp kubectl -n headlamp get svc headlamp
``` ```
## Production Checklist ## Production Checklist
@@ -60,17 +60,17 @@ kubectl get --raw /api/v1/namespaces/polaris/services/polaris-dashboard:80/proxy
# 2. Verify RBAC permissions # 2. Verify RBAC permissions
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
# Expected: yes # Expected: yes
# 3. Check Headlamp logs for plugin loading # 3. Check Headlamp logs for plugin loading
kubectl -n kube-system logs deployment/headlamp | grep -i polaris kubectl -n headlamp logs deployment/headlamp | grep -i polaris
# Expected: No errors related to plugin loading # Expected: No errors related to plugin loading
# 4. Verify plugin files exist # 4. Verify plugin files exist
kubectl -n kube-system exec deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/headlamp-polaris-plugin/ kubectl -n headlamp exec deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/headlamp-polaris-plugin/
# Expected: dist/, package.json present # Expected: dist/, package.json present
``` ```
@@ -160,7 +160,7 @@ spec:
- from: - from:
- namespaceSelector: - namespaceSelector:
matchLabels: matchLabels:
kubernetes.io/metadata.name: kube-system kubernetes.io/metadata.name: headlamp
- podSelector: - podSelector:
matchLabels: matchLabels:
component: kube-apiserver component: kube-apiserver
@@ -241,7 +241,7 @@ apiVersion: policy/v1
kind: PodDisruptionBudget kind: PodDisruptionBudget
metadata: metadata:
name: headlamp-pdb name: headlamp-pdb
namespace: kube-system namespace: headlamp
spec: spec:
minAvailable: 1 minAvailable: 1
selector: selector:
@@ -295,7 +295,7 @@ apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor kind: ServiceMonitor
metadata: metadata:
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
spec: spec:
selector: selector:
matchLabels: matchLabels:
@@ -312,10 +312,10 @@ spec:
```bash ```bash
# View logs # View logs
kubectl -n kube-system logs deployment/headlamp -f kubectl -n headlamp logs deployment/headlamp -f
# Filter for plugin-related logs # Filter for plugin-related logs
kubectl -n kube-system logs deployment/headlamp | grep -i polaris kubectl -n headlamp logs deployment/headlamp | grep -i polaris
``` ```
**Polaris Dashboard Logs:** **Polaris Dashboard Logs:**
@@ -341,14 +341,14 @@ apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule kind: PrometheusRule
metadata: metadata:
name: headlamp-alerts name: headlamp-alerts
namespace: kube-system namespace: headlamp
spec: spec:
groups: groups:
- name: headlamp - name: headlamp
interval: 30s interval: 30s
rules: rules:
- alert: HeadlampPodNotReady - alert: HeadlampPodNotReady
expr: kube_pod_status_ready{namespace="kube-system", pod=~"headlamp-.*"} == 0 expr: kube_pod_status_ready{namespace="headlamp", pod=~"headlamp-.*"} == 0
for: 5m for: 5m
labels: labels:
severity: warning severity: warning
@@ -422,9 +422,9 @@ If Headlamp or plugin becomes unavailable:
2. **Redeploy Headlamp:** 2. **Redeploy Headlamp:**
```bash ```bash
helm upgrade --install headlamp headlamp/headlamp \ helm upgrade --install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml --values headlamp-values.yaml
``` ```
3. **Reapply RBAC:** 3. **Reapply RBAC:**
@@ -436,7 +436,7 @@ If Headlamp or plugin becomes unavailable:
4. **Verify plugin files:** 4. **Verify plugin files:**
```bash ```bash
kubectl -n kube-system exec deployment/headlamp -- \ kubectl -n headlamp exec deployment/headlamp -- \
ls /headlamp/plugins/headlamp-polaris-plugin/ ls /headlamp/plugins/headlamp-polaris-plugin/
``` ```
+2 -3
View File
@@ -268,10 +268,9 @@ npm run e2e
```bash ```bash
# Create token # Create token
export HEADLAMP_TOKEN=$(kubectl create token headlamp -n kube-system --duration=24h) export HEADLAMP_TOKEN=$(kubectl create token headlamp -n headlamp --duration=24h)
# Port-forward for local testing kubectl port-forward -n headlamp svc/headlamp 4466:80
kubectl port-forward -n kube-system svc/headlamp 4466:80
# Run tests # Run tests
HEADLAMP_URL=http://localhost:4466 npm run e2e HEADLAMP_URL=http://localhost:4466 npm run e2e
+13 -13
View File
@@ -72,7 +72,7 @@ Deploy or update Headlamp:
```bash ```bash
helm upgrade --install headlamp headlamp/headlamp \ helm upgrade --install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml --values headlamp-values.yaml
``` ```
@@ -122,7 +122,7 @@ apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: headlamp-plugin-config name: headlamp-plugin-config
namespace: kube-system namespace: headlamp
data: data:
plugin.yml: | plugin.yml: |
- name: headlamp-polaris-plugin - name: headlamp-polaris-plugin
@@ -138,14 +138,14 @@ kubectl apply -f headlamp-plugin-config.yaml
# Deploy/update Headlamp with sidecar # Deploy/update Headlamp with sidecar
helm upgrade --install headlamp headlamp/headlamp \ helm upgrade --install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml --values headlamp-values.yaml
# Wait for pod to be ready # Wait for pod to be ready
kubectl -n kube-system wait --for=condition=ready pod -l app.kubernetes.io/name=headlamp --timeout=300s kubectl -n headlamp wait --for=condition=ready pod -l app.kubernetes.io/name=headlamp --timeout=300s
# Verify plugin files # Verify plugin files
kubectl -n kube-system exec -it deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/headlamp-polaris-plugin/ kubectl -n headlamp exec -it deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/headlamp-polaris-plugin/
# Expected output: # Expected output:
# drwxr-xr-x dist/ # drwxr-xr-x dist/
@@ -270,7 +270,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -284,10 +284,10 @@ See [RBAC Permissions](../user-guide/rbac-permissions.md) for detailed RBAC conf
```bash ```bash
# If you updated Helm values or ConfigMaps # If you updated Helm values or ConfigMaps
kubectl -n kube-system rollout restart deployment/headlamp kubectl -n headlamp rollout restart deployment/headlamp
# Wait for pod to be ready # Wait for pod to be ready
kubectl -n kube-system wait --for=condition=ready pod -l app.kubernetes.io/name=headlamp --timeout=300s kubectl -n headlamp wait --for=condition=ready pod -l app.kubernetes.io/name=headlamp --timeout=300s
``` ```
### 3. Clear Browser Cache ### 3. Clear Browser Cache
@@ -312,14 +312,14 @@ kubectl -n kube-system wait --for=condition=ready pod -l app.kubernetes.io/name=
```bash ```bash
# Verify plugin files exist # Verify plugin files exist
kubectl -n kube-system exec -it deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/headlamp-polaris-plugin/ kubectl -n headlamp exec -it deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/headlamp-polaris-plugin/
# Expected output: # Expected output:
# drwxr-xr-x dist/ # drwxr-xr-x dist/
# -rw-r--r-- package.json # -rw-r--r-- package.json
# Check Headlamp logs for errors # Check Headlamp logs for errors
kubectl -n kube-system logs deployment/headlamp | grep -i polaris kubectl -n headlamp logs deployment/headlamp | grep -i polaris
# Expected: No errors related to plugin loading # Expected: No errors related to plugin loading
@@ -345,13 +345,13 @@ kubectl get --raw /api/v1/namespaces/polaris/services/polaris-dashboard:80/proxy
```bash ```bash
# 1. Verify plugin files exist # 1. Verify plugin files exist
kubectl -n kube-system exec deployment/headlamp -c headlamp -- \ kubectl -n headlamp exec deployment/headlamp -c headlamp -- \
ls -la /headlamp/plugins/headlamp-polaris-plugin/ ls -la /headlamp/plugins/headlamp-polaris-plugin/
# Expected: dist/, package.json present # Expected: dist/, package.json present
# 2. Check Headlamp logs for plugin errors # 2. Check Headlamp logs for plugin errors
kubectl -n kube-system logs deployment/headlamp | grep -i polaris kubectl -n headlamp logs deployment/headlamp | grep -i polaris
# 3. Hard refresh browser (Cmd+Shift+R or Ctrl+Shift+R) # 3. Hard refresh browser (Cmd+Shift+R or Ctrl+Shift+R)
@@ -404,7 +404,7 @@ helm install polaris fairwinds-stable/polaris \
```bash ```bash
# Wait 30 minutes for ArtifactHub sync # Wait 30 minutes for ArtifactHub sync
# Or manually force Headlamp restart: # Or manually force Headlamp restart:
kubectl -n kube-system rollout restart deployment/headlamp kubectl -n headlamp rollout restart deployment/headlamp
``` ```
## Next Steps ## Next Steps
+5 -5
View File
@@ -67,14 +67,14 @@ kubectl -n polaris wait --for=condition=ready pod -l app.kubernetes.io/name=pola
```bash ```bash
# Check Headlamp is deployed # Check Headlamp is deployed
kubectl -n kube-system get pods -l app.kubernetes.io/name=headlamp kubectl -n headlamp get pods -l app.kubernetes.io/name=headlamp
# Expected output: # Expected output:
# NAME READY STATUS RESTARTS AGE # NAME READY STATUS RESTARTS AGE
# headlamp-xxxxxxxxxx-xxxxx 1/1 Running 0 1h # headlamp-xxxxxxxxxx-xxxxx 1/1 Running 0 1h
# Check Headlamp version (must be v0.26+) # Check Headlamp version (must be v0.26+)
kubectl -n kube-system get deployment headlamp -o jsonpath='{.spec.template.spec.containers[0].image}' kubectl -n headlamp get deployment headlamp -o jsonpath='{.spec.template.spec.containers[0].image}'
# Expected output: # Expected output:
# ghcr.io/headlamp-k8s/headlamp:v0.39.0 (or similar) # ghcr.io/headlamp-k8s/headlamp:v0.39.0 (or similar)
@@ -89,12 +89,12 @@ helm repo update
# Install Headlamp # Install Headlamp
helm install headlamp headlamp/headlamp \ helm install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--set config.pluginsDir="/headlamp/plugins" \ --set config.pluginsDir="/headlamp/plugins" \
--set pluginsManager.enabled=true --set pluginsManager.enabled=true
# Wait for pod to be ready # Wait for pod to be ready
kubectl -n kube-system wait --for=condition=ready pod -l app.kubernetes.io/name=headlamp --timeout=300s kubectl -n headlamp wait --for=condition=ready pod -l app.kubernetes.io/name=headlamp --timeout=300s
``` ```
## RBAC Requirements ## RBAC Requirements
@@ -112,7 +112,7 @@ The plugin requires permissions to access the Polaris dashboard via Kubernetes s
```bash ```bash
# Test if Headlamp service account has permission # Test if Headlamp service account has permission
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
+5 -5
View File
@@ -38,7 +38,7 @@ EOF
# Update Headlamp # Update Headlamp
helm upgrade --install headlamp headlamp/headlamp \ helm upgrade --install headlamp headlamp/headlamp \
--namespace kube-system \ --namespace headlamp \
--values headlamp-values.yaml --values headlamp-values.yaml
``` ```
@@ -70,7 +70,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -111,7 +111,7 @@ EOF
```bash ```bash
# Verify plugin files exist # Verify plugin files exist
kubectl -n kube-system exec -it deployment/headlamp -c headlamp -- \ kubectl -n headlamp exec -it deployment/headlamp -c headlamp -- \
ls /headlamp/plugins/headlamp-polaris-plugin/dist/ ls /headlamp/plugins/headlamp-polaris-plugin/dist/
# Expected output: # Expected output:
@@ -119,7 +119,7 @@ kubectl -n kube-system exec -it deployment/headlamp -c headlamp -- \
# Verify RBAC is correct # Verify RBAC is correct
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
@@ -185,7 +185,7 @@ Cluster score badge in top navigation:
```bash ```bash
# Verify plugin files exist # Verify plugin files exist
kubectl -n kube-system exec -it deployment/headlamp -c headlamp -- \ kubectl -n headlamp exec -it deployment/headlamp -c headlamp -- \
ls /headlamp/plugins/headlamp-polaris-plugin/ ls /headlamp/plugins/headlamp-polaris-plugin/
# If missing, reinstall via Headlamp UI or sidecar method # If missing, reinstall via Headlamp UI or sidecar method
+5 -5
View File
@@ -38,17 +38,17 @@ kubectl get --raw /api/v1/namespaces/polaris/services/polaris-dashboard:80/proxy
# 3. Verify RBAC permissions # 3. Verify RBAC permissions
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
# Expected output: yes # Expected output: yes
# 4. Check Headlamp pod is running # 4. Check Headlamp pod is running
kubectl -n kube-system get pods -l app.kubernetes.io/name=headlamp kubectl -n headlamp get pods -l app.kubernetes.io/name=headlamp
# 5. Check Headlamp logs for plugin errors # 5. Check Headlamp logs for plugin errors
kubectl -n kube-system logs deployment/headlamp | grep -i polaris kubectl -n headlamp logs deployment/headlamp | grep -i polaris
# Expected: No errors # Expected: No errors
``` ```
@@ -57,7 +57,7 @@ kubectl -n kube-system logs deployment/headlamp | grep -i polaris
```bash ```bash
# Verify plugin files exist # Verify plugin files exist
kubectl -n kube-system exec deployment/headlamp -c headlamp -- \ kubectl -n headlamp exec deployment/headlamp -c headlamp -- \
ls -la /headlamp/plugins/headlamp-polaris-plugin/ ls -la /headlamp/plugins/headlamp-polaris-plugin/
# Expected output: # Expected output:
@@ -76,7 +76,7 @@ kubectl -n polaris get rolebinding headlamp-polaris-proxy
# Test permission (service account mode) # Test permission (service account mode)
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
+16 -16
View File
@@ -33,7 +33,7 @@ This guide covers common issues encountered when using the Headlamp Polaris Plug
```bash ```bash
# View Headlamp pod logs (plugin sidecar) # View Headlamp pod logs (plugin sidecar)
kubectl logs -n kube-system deployment/headlamp -c headlamp-plugin kubectl logs -n headlamp deployment/headlamp -c headlamp-plugin
# Expected output: # Expected output:
# Installing plugin from https://github.com/.../headlamp-polaris-plugin-X.Y.Z.tar.gz # Installing plugin from https://github.com/.../headlamp-polaris-plugin-X.Y.Z.tar.gz
@@ -43,7 +43,7 @@ kubectl logs -n kube-system deployment/headlamp -c headlamp-plugin
**Verify plugin files exist**: **Verify plugin files exist**:
```bash ```bash
kubectl exec -n kube-system deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/ kubectl exec -n headlamp deployment/headlamp -c headlamp -- ls -la /headlamp/plugins/
# Should show: headlamp-polaris-plugin/ # Should show: headlamp-polaris-plugin/
``` ```
@@ -118,7 +118,7 @@ Expected subjects:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
``` ```
For OIDC mode: For OIDC mode:
@@ -154,7 +154,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -169,7 +169,7 @@ Service account mode:
```bash ```bash
# Impersonate Headlamp service account # Impersonate Headlamp service account
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
--resource-name=polaris-dashboard \ --resource-name=polaris-dashboard \
-n polaris -n polaris
# Expected: yes # Expected: yes
@@ -189,7 +189,7 @@ kubectl auth can-i get services/proxy \
After applying RBAC changes: After applying RBAC changes:
```bash ```bash
kubectl rollout restart deployment headlamp -n kube-system kubectl rollout restart deployment headlamp -n headlamp
``` ```
--- ---
@@ -490,7 +490,7 @@ Run this script to test all RBAC components:
#!/bin/bash #!/bin/bash
NS="polaris" NS="polaris"
SA="headlamp" SA="headlamp"
SA_NS="kube-system" SA_NS="headlamp"
echo "=== Testing RBAC for Polaris Plugin ===" echo "=== Testing RBAC for Polaris Plugin ==="
@@ -529,8 +529,8 @@ echo "=== Test complete ==="
Test connectivity from Headlamp to Polaris: Test connectivity from Headlamp to Polaris:
```bash ```bash
# Create debug pod in kube-system namespace # Create debug pod in headlamp namespace
kubectl run netdebug -n kube-system --rm -it --image=nicolaka/netshoot -- bash kubectl run netdebug -n headlamp --rm -it --image=nicolaka/netshoot -- bash
# Inside pod, test DNS and HTTP # Inside pod, test DNS and HTTP
nslookup polaris-dashboard.polaris.svc.cluster.local nslookup polaris-dashboard.polaris.svc.cluster.local
@@ -545,11 +545,11 @@ If you have audit logging enabled, check for denied requests:
```bash ```bash
# View recent audit logs (location varies by cluster) # View recent audit logs (location varies by cluster)
kubectl logs -n kube-system kube-apiserver-* | grep polaris-dashboard kubectl logs -n headlamp kube-apiserver-* | grep polaris-dashboard
# Look for lines with: # Look for lines with:
# "reason": "Forbidden" # "reason": "Forbidden"
# "user": "system:serviceaccount:kube-system:headlamp" # "user": "system:serviceaccount:headlamp:headlamp"
``` ```
--- ---
@@ -567,7 +567,7 @@ kubectl logs -n kube-system kube-apiserver-* | grep polaris-dashboard
**Check sidecar logs**: **Check sidecar logs**:
```bash ```bash
kubectl logs -n kube-system deployment/headlamp -c headlamp-plugin kubectl logs -n headlamp deployment/headlamp -c headlamp-plugin
``` ```
**Common errors**: **Common errors**:
@@ -591,7 +591,7 @@ Error: 404 Not Found
**Solution**: Verify `archive-url` in plugin config matches GitHub release: **Solution**: Verify `archive-url` in plugin config matches GitHub release:
```bash ```bash
kubectl get configmap headlamp-plugin-config -n kube-system -o yaml kubectl get configmap headlamp-plugin-config -n headlamp -o yaml
``` ```
Expected format: Expected format:
@@ -677,13 +677,13 @@ If none of these solutions work, gather debugging information and open an issue:
1. **Version Information**: 1. **Version Information**:
```bash ```bash
kubectl get pods -n kube-system -l app.kubernetes.io/name=headlamp -o yaml | grep image: kubectl get pods -n headlamp -l app.kubernetes.io/name=headlamp -o yaml | grep image:
``` ```
2. **Plugin Version**: 2. **Plugin Version**:
- Check Settings → Plugins in Headlamp UI - Check Settings → Plugins in Headlamp UI
- Or: `kubectl exec -n kube-system deployment/headlamp -c headlamp -- cat /headlamp/plugins/headlamp-polaris-plugin/package.json` - Or: `kubectl exec -n headlamp deployment/headlamp -c headlamp -- cat /headlamp/plugins/headlamp-polaris-plugin/package.json`
3. **Browser Console Output**: 3. **Browser Console Output**:
@@ -698,7 +698,7 @@ If none of these solutions work, gather debugging information and open an issue:
5. **Pod Logs**: 5. **Pod Logs**:
```bash ```bash
kubectl logs -n kube-system deployment/headlamp -c headlamp --tail=100 kubectl logs -n headlamp deployment/headlamp -c headlamp --tail=100
kubectl logs -n polaris deployment/polaris-dashboard --tail=100 kubectl logs -n polaris deployment/polaris-dashboard --tail=100
``` ```
+1 -1
View File
@@ -41,7 +41,7 @@ spec:
- from: - from:
- namespaceSelector: - namespaceSelector:
matchLabels: matchLabels:
kubernetes.io/metadata.name: kube-system kubernetes.io/metadata.name: headlamp
- podSelector: - podSelector:
matchLabels: matchLabels:
component: kube-apiserver component: kube-apiserver
+2 -2
View File
@@ -43,7 +43,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -83,7 +83,7 @@ roleRef:
```bash ```bash
# Test service account (in-cluster mode) # Test service account (in-cluster mode)
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
+1 -1
View File
@@ -317,7 +317,7 @@ kubectl -n polaris get rolebinding headlamp-polaris-proxy
# Test permission # Test permission
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
``` ```
+9 -9
View File
@@ -65,7 +65,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp # Adjust to your Headlamp SA name name: headlamp # Adjust to your Headlamp SA name
namespace: kube-system # Adjust to Headlamp's namespace namespace: headlamp # Adjust to Headlamp's namespace
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -75,7 +75,7 @@ roleRef:
**Adjust for your environment:** **Adjust for your environment:**
- `subjects[0].name` - Your Headlamp service account name (often `headlamp`) - `subjects[0].name` - Your Headlamp service account name (often `headlamp`)
- `subjects[0].namespace` - Namespace where Headlamp runs (often `kube-system`) - `subjects[0].namespace` - Namespace where Headlamp runs (often `headlamp`)
### Step 3: Apply and Verify ### Step 3: Apply and Verify
@@ -91,7 +91,7 @@ kubectl -n polaris get rolebinding headlamp-polaris-proxy
# Test permission # Test permission
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
@@ -109,7 +109,7 @@ In token-auth mode, **each user's own identity** is used for Kubernetes API requ
With service account mode: With service account mode:
- Single RoleBinding grants access to all Headlamp users - Single RoleBinding grants access to all Headlamp users
- Kubernetes sees all requests as `system:serviceaccount:kube-system:headlamp` - Kubernetes sees all requests as `system:serviceaccount:headlamp:headlamp`
With token-auth mode: With token-auth mode:
@@ -267,7 +267,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -281,7 +281,7 @@ metadata:
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: headlamp name: headlamp
namespace: kube-system namespace: headlamp
roleRef: roleRef:
kind: Role kind: Role
name: polaris-proxy-reader name: polaris-proxy-reader
@@ -318,7 +318,7 @@ spec:
- from: - from:
- namespaceSelector: - namespaceSelector:
matchLabels: matchLabels:
kubernetes.io/metadata.name: kube-system kubernetes.io/metadata.name: headlamp
- podSelector: - podSelector:
matchLabels: matchLabels:
component: kube-apiserver component: kube-apiserver
@@ -411,7 +411,7 @@ Every plugin data fetch creates a Kubernetes API audit log entry.
"level": "Metadata", "level": "Metadata",
"verb": "get", "verb": "get",
"user": { "user": {
"username": "system:serviceaccount:kube-system:headlamp" "username": "system:serviceaccount:headlamp:headlamp"
}, },
"sourceIPs": ["10.96.0.1"], "sourceIPs": ["10.96.0.1"],
"objectRef": { "objectRef": {
@@ -494,7 +494,7 @@ If using a log aggregator (e.g., Elasticsearch), create filters to exclude or do
```bash ```bash
# Service account mode # Service account mode
kubectl auth can-i get services/proxy \ kubectl auth can-i get services/proxy \
--as=system:serviceaccount:kube-system:headlamp \ --as=system:serviceaccount:headlamp:headlamp \
-n polaris \ -n polaris \
--resource-name=polaris-dashboard --resource-name=polaris-dashboard
+3 -3
View File
@@ -41,8 +41,8 @@ The default base URL is `https://headlamp.animaniacs.farh.net`. Override with `H
### Option 2: K8s bearer token (port-forward) ### Option 2: K8s bearer token (port-forward)
```bash ```bash
kubectl port-forward -n kube-system svc/headlamp 4466:80 kubectl port-forward -n headlamp svc/headlamp 4466:80
export HEADLAMP_TOKEN=$(kubectl create token headlamp -n kube-system) export HEADLAMP_TOKEN=$(kubectl create token headlamp -n headlamp)
HEADLAMP_URL=http://localhost:4466 npm run e2e HEADLAMP_URL=http://localhost:4466 npm run e2e
``` ```
@@ -143,7 +143,7 @@ cp .env.example .env
# 3. Set environment variables # 3. Set environment variables
export HEADLAMP_URL=https://your-headlamp-instance.com export HEADLAMP_URL=https://your-headlamp-instance.com
export HEADLAMP_TOKEN=$(kubectl create token headlamp -n kube-system) export HEADLAMP_TOKEN=$(kubectl create token headlamp -n headlamp)
# 4. Run tests # 4. Run tests
npm run e2e npm run e2e
+4 -2
View File
@@ -11,7 +11,9 @@
# Prerequisites: # Prerequisites:
# - Plugin built (dist/ exists with plugin-main.js + package.json) # - Plugin built (dist/ exists with plugin-main.js + package.json)
# - kubectl configured with cluster access # - kubectl configured with cluster access
# - RBAC applied: kubectl apply -f deployment/e2e-ci-runner-rbac.yaml # RBAC is managed via Flux from privilegedescalation/infra/base/rbac/e2e-ci-runner-headlamp-rbac.yaml.
# The infra repo is the source of truth — do not apply this file directly.
# Apply RBAC first: kubectl apply -f privilegedescalation/infra/base/rbac/e2e-ci-runner-headlamp-rbac.yaml
# #
# Environment: # Environment:
# E2E_NAMESPACE — namespace for E2E Headlamp (default: privilegedescalation-dev) # E2E_NAMESPACE — namespace for E2E Headlamp (default: privilegedescalation-dev)
@@ -35,7 +37,7 @@ fi
echo "Checking RBAC permissions in namespace '${E2E_NAMESPACE}'..." echo "Checking RBAC permissions in namespace '${E2E_NAMESPACE}'..."
if ! kubectl auth can-i delete configmaps -n "$E2E_NAMESPACE" --quiet 2>/dev/null; then if ! kubectl auth can-i delete configmaps -n "$E2E_NAMESPACE" --quiet 2>/dev/null; then
echo "ERROR: Missing RBAC — cannot delete configmaps in namespace '${E2E_NAMESPACE}'." >&2 echo "ERROR: Missing RBAC — cannot delete configmaps in namespace '${E2E_NAMESPACE}'." >&2
echo " Apply RBAC first: kubectl apply -f deployment/e2e-ci-runner-rbac.yaml" >&2 echo " Apply RBAC first: kubectl apply -f privilegedescalation/infra/base/rbac/e2e-ci-runner-headlamp-rbac.yaml" >&2
exit 1 exit 1
fi fi
+3
View File
@@ -3,6 +3,9 @@
# #
# Tears down the dedicated E2E Headlamp instance deployed by deploy-e2e-headlamp.sh. # Tears down the dedicated E2E Headlamp instance deployed by deploy-e2e-headlamp.sh.
# #
# RBAC is managed via Flux from privilegedescalation/infra/base/rbac/e2e-ci-runner-headlamp-rbac.yaml.
# The infra repo is the source of truth — do not apply this file directly.
#
# Environment: # Environment:
# E2E_NAMESPACE — namespace to clean up (default: privilegedescalation-dev) # E2E_NAMESPACE — namespace to clean up (default: privilegedescalation-dev)
# E2E_RELEASE — release/resource name prefix (default: headlamp-e2e) # E2E_RELEASE — release/resource name prefix (default: headlamp-e2e)