Aller au contenu

Accéder à Woodpecker en privé

AKKO v2026.04 livre Woodpecker CI en Deployment interne uniquement. Le défaut ingress.enabled=false signifie qu'aucun trafic entrant n'atteint Woodpecker depuis Internet — bon défaut pour tout serveur CI (exposition CVE, vol de credentials, abus supply-chain sont des risques réels).

Cette page liste les trois patrons d'accès supportés, par ordre de préférence.

1. kubectl port-forward (défaut)

Aucune exposition réseau — un opérateur forwarde le Service vers son laptop à la demande :

kubectl -n akko port-forward svc/akko-akko-woodpecker-server 8000:80
# Puis ouvrir http://localhost:8000

Idéal pour un usage admin ponctuel. Aucun credential ne traverse l'Internet public, les sessions s'arrêtent avec le port-forward.

2. Mesh privé (recommandé en quotidien)

Joindre les nodes du cluster à un overlay privé — Tailscale, Cloudflare Tunnel, WireGuard, Nebula — le Service cluster-interne devient alors accessible uniquement aux membres autorisés du mesh.

Exemple Tailscale :

# Sur chaque node k8s
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --authkey=<key> --advertise-routes=<cluster-cidr>

# Sur ton laptop
tailscale up
kubectl proxy   # ou un port-forward direct à travers le mesh

Aucun changement du chart AKKO requis.

3. Ingress opt-in (uniquement si vous acceptez le risque)

Si votre réalité opérationnelle impose une URL publique (par ex. les webhooks GitHub doivent atteindre Woodpecker directement), optez explicitement avec une pile stricte :

akko-woodpecker:
  ingress:
    enabled: true
    className: traefik
    annotations:
      # Middlewares Traefik — grille OAuth2 + allowlist IP
      traefik.ingress.kubernetes.io/router.middlewares: >-
        akko-oauth2-woodpecker@kubernetescrd,akko-ghwebhooks-ipallowlist@kubernetescrd
    tls:
      - hosts: ["ci.votre-domaine.example"]
        secretName: woodpecker-tls

Puis créer deux CR Middleware Traefik :

  • akko-oauth2-woodpecker — oauth2-proxy qui ne laisse passer que le groupe Keycloak akko-admins.
  • akko-ghwebhooks-ipallowlistIPAllowList Traefik avec les plages IP webhook GitHub (https://api.github.com/meta → .hooks).

Webhooks GitHub sans exposition publique

Pour déclencher push-to-main / PR quand l'Ingress est désactivé :

  • Cloudflare Tunnel (cloudflared) — gratuit, à associer à une policy Cloudflare Access qui ne laisse poster que les ranges webhook GitHub. Le Tunnel traverse NAT sans ouvrir le moindre port entrant.
  • smee.io — proxy public qui forwarde les webhooks GitHub vers un agent local. Bien pour le dev, moins idéal en prod.
  • Mode poll dépôt — un CronJob dans le cluster lance woodpecker-cli pipeline start --interval 30s contre le repo et déclenche les pipelines sans dépendre des webhooks.

À NE PAS faire

  • Ne pas helm upgrade avec akko-woodpecker.ingress.enabled=true sur un domaine par défaut sans grille OAuth2 et IP allowlist.
  • Ne pas embarquer d'URLs webhook avec des secrets Woodpecker dans un repo public.
  • Ne pas configurer Woodpecker pour signer les artefacts Cosign avec un issuer OIDC public découvrable — utiliser un issuer privé.