Blank white background with no objects or features visible.

EMEA, hallo! TrueFoundry breidt zijn aanwezigheid uit in Europa, het Midden-Oosten en Afrika. Lees meer. →

OAuth2 toevoegen aan Jupyter Notebooks op Kubernetes

DoorSrihari Radhakrishna

Bijgewerkt: November 10, 2026

Gepubliceerd: November 9, 2026

TrueFoundry-gebruikers kunnen Jupyter Notebooks implementeren op hun eigen cloudaccounts, zoals AWS, Azure of GCP. Deze functie stelt hen in staat om eenvoudig machine learning-experimenten en training jobs uit te voeren op hun eigen machines. In eerste instantie werden notebooks die via TrueFoundry werden geïmplementeerd beveiligd met een gebruikersnaam-wachtwoordcombinatie. Als antwoord op veelvuldige verzoeken van klanten hebben we echter Single Sign-On geïntegreerd. Dit betekent dat gebruikers nu eenvoudig toegang hebben tot hun notebooks met dezelfde inloggegevens die ze voor TrueFoundry gebruiken. In deze blogpost gaan we dieper in op de details van hoe we deze functie hebben geïmplementeerd.

Een Jupyter Notebook starten op TrueFoundry

Notebooks op TrueFoundry

TrueFoundry gebruikt intern een fork van de Kubeflow Notebook Controller om de implementatie van notebooks te orchestreren. De controller biedt verschillende functies waar wij gebruik van maken, zoals:

  1. Vereenvoudigde notebook spec: De Kubeflow Notebook API's zijn eenvoudig en de controller orchestreert de aanmaak van de Jupyter Notebook-deployments.
  2. Automatische culling: De controller sluit het notebook automatisch af na een bepaalde periode van inactiviteit. Dit is ontzettend nuttig voor onze klanten die experimenten uitvoeren op notebooks die worden aangedreven door GPU-machines.
  3. Permanente home directory: De controller zorgt voor het aanmaken van een persistent volume dat de voortgang van de gebruiker op het notebook over sessies heen opslaat.
  4. Uitbreidbare base images: De controller ondersteunt een reeks base notebook images van Jupyter Notebook en VS Code die worden onderhouden door TrueFoundry. De gebruiker kan de functionaliteit van deze Docker-images uitbreiden door een opstartscript toe te voegen of specifieke bibliotheken te installeren.

Ter illustratie ziet een eenvoudig Kubeflow Notebook-object er als volgt uit:

apiVersion: kubeflow.org/v1
kind: Notebook
metadata:
 name: my-notebook
spec:
 template:
   spec:
     containers:
       - name: my-notebook
         image: kubeflownotebookswg/jupyter:master
         args:
           [
             "start.sh",
             "lab",
             "--LabApp.token=''",
             "--LabApp.allow_remote_access='True'",
             "--LabApp.allow_root='True'",
             "--LabApp.ip='*'",
             "--LabApp.base_url=/test/my-notebook/",
             "--port=8888",
             "--no-browser",
           ]

Basic Auth voor Notebooks

Voordat OAuth2 werd geïmplementeerd, bood TrueFoundry gebruikers de optie om de beveiliging van hun openbare notebooks te verhogen door basic authentication te integreren. Deze extra beveiligingslaag was essentieel om ervoor te zorgen dat alleen geautoriseerde personen toegang hadden tot de gevoelige inhoud van deze notebooks. Om deze functie te implementeren, maakte TrueFoundry gebruik van de mogelijkheden van WebAssembly (Wasm) plugins binnen de Istio proxy, specifiek de Envoy proxy.

Istio, een open-source service mesh, biedt een framework voor het beheren van netwerkcommunicatie tussen verschillende service-workloads. Met Istio was TrueFoundry in staat om aangepaste logica direct in te voegen in de netwerklaag, die wordt beheerd door de Envoy proxy. Deze aanpak maakte een effectieve controle en beveiliging mogelijk van het netwerkverkeer van en naar hun Jupyter Notebooks. De sleutel tot de implementatie van basic auth was de WasmPlugin, een functie van Istio die de implementatie van WebAssembly-modules binnen de Envoy proxy vergemakkelijkt.

Deze basic authentication WasmPlugin is geïntegreerd in een reeks netwerkfilters binnen de Envoy proxy. Deze filters maken de uitvoering mogelijk van functies op hoger niveau met betrekking tot toegangscontrole, transformatie, data-verrijking, auditing en meer, waardoor de algehele beveiliging en functionaliteit van de service mesh worden verbeterd. Hier is een vereenvoudigde versie van de spec voor het toevoegen van een basic auth filter aan de Envoy filter chain:

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
 name: basic-auth
 namespace: istio-ingress
spec:
 phase: AUTHN
 pluginConfig:
   basic_auth_rules:
     - credentials:
         - user:pass
       hosts: www.example.com
       prefix: /secret/
 selector:
   matchLabels:
     istio: ingressgateway
 url: oci://ghcr.io/istio-ecosystem/wasm-extensions/basic_auth:1.12.0

OAuth2 voor Notebook

Voor het implementeren van OAuth2 in onze notebooks hebben we een Envoy filter gebruikt, maar de aanpak verschilde van die van basic authentication. In tegenstelling tot basic auth, waarbij we eenvoudig een vooraf gebouwde WasmPlugin in de filter chain konden invoegen, vereiste OAuth2 een meer op maat gemaakte oplossing. Om dit te bereiken, hebben we een HTTP filter gebruikt dat specifiek is ontworpen voor OAuth. Bij TrueFoundry integreert ons Single Sign-On systeem met FusionAuth, dat dient als onze OAuth provider.

Zo ziet de spec van het Envoy Filter eruit – raadpleeg de opmerkingen in het bestand voor meer details:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
 name: truefoundry-notebook-tfy-oauth2  # Name of the EnvoyFilter
 namespace: auth-test  # Namespace where the EnvoyFilter is deployed
spec:
 workloadSelector:
   labels:
     truefoundry.com/application: truefoundry-notebook  # Selector targeting workloads with specific labels
 configPatches:
 - applyTo: CLUSTER
   match:
     context: SIDECAR_OUTBOUND
   patch:
     operation: ADD
     value:
       name: tfy-oauth2  # Name of the cluster for OAuth2 authentication service
       type: LOGICAL_DNS  # Type of service discovery (DNS)
       connect_timeout: 5s  # Timeout for establishing a connection
       lb_policy: ROUND_ROBIN  # Load balancing policy
       # other load balancing config
 - applyTo: HTTP_FILTER
   match:
     context: SIDECAR_INBOUND
     listener:
       filterChain:
         filter:
           name: "envoy.filters.network.http_connection_manager"
           subFilter:
             name: envoy.filters.http.jwt_authn
   patch:
     operation: INSERT_BEFORE  # Inserting this filter before the JWT auth filter
     value:
      name: envoy.filters.http.tfy-oauth  # Name of the OAuth filter
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.filters.http.oauth2.v3.OAuth2
        config:
          use_refresh_token: false  # Whether to use a refresh token
          pass_through_matcher:
            - name: Authorization
              present_match: true  # Pass through if Authorization header is present
          forward_bearer_token: true  # Forward bearer token to upstream
          auth_type: BASIC_AUTH  # Type of authentication used
          token_endpoint:
            cluster: tfy-oauth2  # Cluster for token endpoint
            uri: <token-endpoint-uri-of-oauth-provider>
            timeout: 5s  # Timeout for token endpoint
          authorization_endpoint: <authorization-endpoint-uri-of-oauth-provider>
          redirect_uri: https://%REQ(:authority)%/truefoundry-notebook/_auth/callback  # Redirect URI for callback
          redirect_path_matcher:
            path:
              exact: /truefoundry-notebook/_auth/callback  # Path for redirect URI
          signout_path:
            path:
              exact: /truefoundry-notebook/_auth/signout  # Path for signout
          credentials:
            client_id: <client-id-for-oauth>
            token_secret:
               # configuration to fetch token secret
               # read more about how we fetch secrets here:
               # https://www.envoyproxy.io/docs/envoy/latest/configuration/security/secret
            hmac_secret:
               # configuration to fetch hmac

Wanneer een gebruiker voor het eerst probeert toegang te krijgen tot een service die wordt beschermd door het OAuth2-filter, wordt deze omgeleid naar de authorization_endpoint. Dit eindpunt is de URL van onze externe OAuth Provider, wat in onze implementatie de op FusionAuth gebaseerde TrueFoundry-inlogmodal is. Deze omleiding is een cruciale stap in het OAuth-proces, waarbij gebruikers naar een veilige locatie worden geleid waar ze zich kunnen authenticeren en vervolgens de benodigde machtigingen voor toegang tot de service kunnen verlenen.

Zodra de inlog is voltooid, leidt FusionAuth u om naar de redirect_uri (geconfigureerd in de filter-specificatie), waarbij een geheime, tijdelijke autorisatiecode wordt toegevoegd. Dit verzoek wordt onderschept door het filter en er wordt een verzoek gedaan naar token_endpoint, waarbij de code wordt ingewisseld voor een JWT-token. Ten slotte stelt het filter cookies in met het JWT-token.

Vervolgtoegang tot de service wordt doorgestuurd via het HTTP Filter omdat de cookie de Authorization header instelt met het JWT als waarde. Het filter is geconfigureerd om dergelijke verzoeken door te laten (zie pass_through_matcher in de spec). Om te valideren dat het JWT een geldig token is, maken we een RequestAuthentication-policy aan die controleert bij de OAuth provider:

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
 # ...
spec:
 selector:
   # ...
 jwtRules:
 - issuer: "truefoundry.com"
   fromHeaders:
   - name: Authorization
     prefix: "Bearer "
   audiences:
     - <client-id>
   jwksUri: <oauth-provider-jwks-uri>
   forwardOriginalToken: true

Ten slotte voegen we de Authorization Policy toe die specificeert op welke verzoeken RequestAuthentication moet worden toegepast. We willen autorisatie toepassen op alle verzoeken op poort 8888:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: best-notebook-tfy-oauth2
 namespace: auth-test
spec:
 selector:
   matchLabels:
     truefoundry.com/application: best-notebook
 action: DENY
 rules:
 - from:
   - source:
       notRequestPrincipals: ["*"]
   to:
     - operation:
         ports:
           - "8888"

Probeer het nu.

Eén gateway voor al je modellen, MCP-servers en agents. Geen creditcard nodig.

Start gratis
Inhoudsopgave

Eén gateway voor elk LLM, elke agent en elke MCP-server

Boek een gesprek van 30 minuten met onze AI-expert

Demo aanvragen

De snelste manier om je AI te bouwen, beheren en schalen

Demo boeken
Samenvatten met
ChatGPT logo by OpenAI
Perplexity AI logo
Blurry red snowflake on white background, symmetrical frosty design with soft edges and abstract shape.

Ontdek meer

August 24, 2023
|
5 min leestijd

Machine Learning Deployments in 2023

August 27, 2025
|
5 min leestijd

De On-Prem AI-markt in kaart gebracht: van chips tot control planes

February 16, 2023
|
5 min leestijd

Cluster Autoscaling voor de 3 Grote Clouds ☁️

November 5, 2025
|
5 min leestijd

Dataresidentie in het tijdperk van Agentic AI: Hoe AI Gateways soevereine schaal en compliance mogelijk maken

TrueFoundry offers scalable alternatives for Vercel AI Gateway limitations
November 10, 2026
|
5 min leestijd

Vercel AI Review 2026: Wij hebben het getest, zodat jij dat niet hoeft te doen

Geen items gevonden.
November 10, 2026
|
5 min leestijd

Vendor lock-in voorkomen met de AI Gateway van TrueFoundry

Geen items gevonden.
November 10, 2026
|
5 min leestijd

TrueFoundry en de MCP-gatewayrevolutie: inzichten uit het Gartner-rapport van 2025

Geen items gevonden.
November 10, 2026
|
5 min leestijd

Gids voor MCP-authenticatie in Claude Code 2026

Geen items gevonden.
November 10, 2026
|
5 min leestijd

Een gids voor Cloud Node Auto-Provisioning

Kubernetes

Recente blogs

Black left pointing arrow symbol on white background, directional indicator.
Black left pointing arrow symbol on white background, directional indicator.
Volg een korte producttour
Start producttour
Product Tour