Zurück zum Hub

cargo.ayedo.cloud/ayedo/k8s/rustfs

Registry-Block

polycrate block pull cargo.ayedo.cloud/ayedo/k8s/rustfs:0.1.4

RustFS

Installiert RustFS als S3-kompatiblen Object Storage in Kubernetes über das offizielle Helm-Repository:

helm repo add rustfs https://charts.rustfs.com
helm install rustfs rustfs/rustfs --version 1.0.0-rc.1

Modes

Mode Beschreibung
standalone 1 Pod, 1 Data-PVC (Default im Block)
distributed StatefulSet mit replicas >= 2 und Erasure Coding

Ingress

Das Upstream-Chart-Ingress zeigt nur auf die Console (:9001). Der Block legt optional einen zweiten Ingress für die S3 API (:9000) an.

Config Port Zweck
ingress.console 9001 Web-UI / OIDC Callback
ingress.s3 9000 S3 API für Apps

OIDC (Authentik / Keycloak)

OIDC wird über Env-Vars verdrahtet (Chart hat keine native OIDC-Section). Callback-URL (Provider default):

https://<ingress.console.host>/rustfs/admin/v3/oidc/callback/default

In Authentik:

  1. Application / Provider vom Typ OAuth2/OIDC anlegen
  2. Redirect URI exakt wie oben eintragen
  3. Groups-Claim flach als groups ins ID Token mappen (Full path aus)
  4. Im Block oidc.enabled: true + config_url / client_id / client_secret setzen

Authentik / OIDC Policies

Authentik liefert im groups-Claim oft viele Gruppen (UUIDs/Namen). RustFS behandelt jeden Wert als Policy-Namen und schlägt fehl, sobald einer nicht existiert (OIDC policy mapping did not resolve to current policies).

Empfohlen, wenn App-Zugriff in Authentik bereits auf die richtigen Gruppen beschränkt ist und alle OIDC-User Full Access bekommen sollen:

oidc:
  enabled: true
  role_policy: consoleAdmin
  username_claim: preferred_username
  email_claim: email

SSO-Logins sind STS-Sessions: Identität kommt aus Authentik (preferred_username / email). Sie erscheinen nicht als dauerhafte Einträge unter Identity → Users (das sind nur lokale IAM-User).

Optional zusätzlich leere IAM-Gruppen aus Authentik-UUIDs anlegen (group_policies → Sync):

oidc:
  role_policy: consoleAdmin
  group_policies:
    "<authentik-group-uuid-or-name>": consoleAdmin

Für feinere Rechte ohne role_policy: Claim in Authentik auf echte RustFS-Policy-Namen filtern (Property Mapping) — siehe RustFS OIDC Docs.

actions

install

- name: rustfs
  from: cargo.ayedo.cloud/ayedo/k8s/rustfs:0.1.2
  kubeconfig:
    from: k8s
  config:
    root:
      access_key: "<access_key>"
      secret_key: "<secret_key>"
    storage:
      class: longhorn
      data_size: 2Ti
    ingress:
      class: ingress
      tls:
        enabled: true
        letsencrypt:
          issuer: cloudflare
      console:
        enabled: true
        host: rustfs.example.com
      s3:
        enabled: true
        host: s3.example.com
    oidc:
      enabled: false
polycrate run rustfs install

uninstall

polycrate run rustfs uninstall

Logging

Default: stdout only (storage.log_directory leer). Das Chart-Default /logs würde eine rustfs-logs PVC anlegen; RustFS schreibt dort INFO-Tracing-close- Spans und füllt kleine Volumes schnell.

File-Logs nur explizit:

storage:
  log_directory: /logs
  log_size: 10Gi

Nach dem Wechsel von File-Logs auf stdout die alte PVC manuell löschen (helm.sh/resource-policy: keep).

Hinweise

  • Root-Credentials müssen gesetzt werden (root.access_key / root.secret_key), außer allow_insecure_defaults: true (nur Dev).
  • Chart-Version und App-Version sind in block.poly gepinnt.
  • Gerenderte Helm-Values landen unter artifacts/blocks/<block>/values.yaml.