4.6. Configurer l'accès aux services Knative


OpenShift Serverless ne dispose pas actuellement de fonctionnalités d'autorisation définies par l'utilisateur. Pour ajouter une autorisation définie par l'utilisateur à votre déploiement, vous devez intégrer OpenShift Serverless à Red Hat OpenShift Service Mesh, puis configurer l'authentification JSON Web Token (JWT) et l'injection sidecar pour les services Knative.

Vous pouvez utiliser l'authentification par jeton Web JSON (JWT) avec les services Knative en utilisant Service Mesh 2.x et OpenShift Serverless. Pour ce faire, vous devez créer des demandes et des politiques d'authentification dans l'espace de noms de l'application qui est membre de l'objet ServiceMeshMemberRoll. Vous devez également activer l'injection de sidecar pour le service.

Important

L'ajout d'une injection de sidecar aux pods dans les espaces de noms du système, tels que knative-serving et knative-serving-ingress, n'est pas pris en charge lorsque Kourier est activé.

Si vous avez besoin de l'injection de sidecar pour les pods dans ces espaces de noms, consultez la documentation OpenShift Serverless sur Integrating Service Mesh with OpenShift Serverless natively.

Conditions préalables

  • Vous avez installé OpenShift Serverless Operator, Knative Serving et Red Hat OpenShift Service Mesh sur votre cluster.
  • Installez le CLI OpenShift (oc).
  • Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.

Procédure

  1. Ajoutez l'annotation sidecar.istio.io/inject="true" à votre service :

    Exemple de service

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: <service_name>
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true" 
    1
    
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 
    2
    
    ...
    Copy to Clipboard Toggle word wrap

    1
    Ajouter l'annotation sidecar.istio.io/inject="true".
    2
    Vous devez définir l'annotation sidecar.istio.io/rewriteAppHTTPProbers: "true" dans votre service Knative, car les versions 1.14.0 et supérieures d'OpenShift Serverless utilisent par défaut une sonde HTTP comme sonde de préparation pour les services Knative.
  2. Appliquer la ressource Service:

    $ oc apply -f <filename>
    Copy to Clipboard Toggle word wrap
  3. Créer une ressource RequestAuthentication dans chaque espace de noms d'application sans serveur qui est un membre de l'objet ServiceMeshMemberRoll:

    apiVersion: security.istio.io/v1beta1
    kind: RequestAuthentication
    metadata:
      name: jwt-example
      namespace: <namespace>
    spec:
      jwtRules:
      - issuer: testing@secure.istio.io
        jwksUri: https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/jwks.json
    Copy to Clipboard Toggle word wrap
  4. Appliquer la ressource RequestAuthentication:

    $ oc apply -f <filename>
    Copy to Clipboard Toggle word wrap
  5. Autoriser l'accès à la ressource RequestAuthenticaton à partir des pods système pour chaque espace de noms d'application sans serveur qui est un membre de l'objet ServiceMeshMemberRoll, en créant la ressource AuthorizationPolicy suivante :

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: allowlist-by-paths
      namespace: <namespace>
    spec:
      action: ALLOW
      rules:
      - to:
        - operation:
            paths:
            - /metrics 
    1
    
            - /healthz 
    2
    Copy to Clipboard Toggle word wrap
    1
    Le chemin d'accès à votre application pour collecter les métriques par pod système.
    2
    Le chemin d'accès à votre application pour sonder le pod du système.
  6. Appliquer la ressource AuthorizationPolicy:

    $ oc apply -f <filename>
    Copy to Clipboard Toggle word wrap
  7. Pour chaque espace de noms d'application sans serveur qui est un membre de l'objet ServiceMeshMemberRoll, créez la ressource AuthorizationPolicy suivante :

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: require-jwt
      namespace: <namespace>
    spec:
      action: ALLOW
      rules:
      - from:
        - source:
           requestPrincipals: ["testing@secure.istio.io/testing@secure.istio.io"]
    Copy to Clipboard Toggle word wrap
  8. Appliquer la ressource AuthorizationPolicy:

    $ oc apply -f <filename>
    Copy to Clipboard Toggle word wrap

Vérification

  1. Si vous essayez d'utiliser une requête curl pour obtenir l'URL du service Knative, elle est refusée :

    Example command

    $ curl http://hello-example-1-default.apps.mycluster.example.com/
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    RBAC: access denied
    Copy to Clipboard Toggle word wrap

  2. Vérifier la demande avec un JWT valide.

    1. Obtenir le jeton JWT valide :

      $ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
      Copy to Clipboard Toggle word wrap
    2. Accédez au service en utilisant le jeton valide dans l'en-tête de la requête curl:

      $ curl -H "Authorization: Bearer $TOKEN"  http://hello-example-1-default.apps.example.com
      Copy to Clipboard Toggle word wrap

      La demande est désormais autorisée :

      Exemple de sortie

      Hello OpenShift!
      Copy to Clipboard Toggle word wrap

Vous pouvez utiliser l'authentification par jeton Web JSON (JWT) avec les services Knative en utilisant Service Mesh 1.x et OpenShift Serverless. Pour ce faire, vous devez créer une politique dans l'espace de noms de l'application qui est un membre de l'objet ServiceMeshMemberRoll. Vous devez également activer l'injection de sidecar pour le service.

Important

L'ajout d'une injection de sidecar aux pods dans les espaces de noms du système, tels que knative-serving et knative-serving-ingress, n'est pas pris en charge lorsque Kourier est activé.

Si vous avez besoin de l'injection de sidecar pour les pods dans ces espaces de noms, consultez la documentation OpenShift Serverless sur Integrating Service Mesh with OpenShift Serverless natively.

Conditions préalables

  • Vous avez installé OpenShift Serverless Operator, Knative Serving et Red Hat OpenShift Service Mesh sur votre cluster.
  • Installez le CLI OpenShift (oc).
  • Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.

Procédure

  1. Ajoutez l'annotation sidecar.istio.io/inject="true" à votre service :

    Exemple de service

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: <service_name>
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true" 
    1
    
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 
    2
    
    ...
    Copy to Clipboard Toggle word wrap

    1
    Ajouter l'annotation sidecar.istio.io/inject="true".
    2
    Vous devez définir l'annotation sidecar.istio.io/rewriteAppHTTPProbers: "true" dans votre service Knative, car les versions 1.14.0 et supérieures d'OpenShift Serverless utilisent par défaut une sonde HTTP comme sonde de préparation pour les services Knative.
  2. Appliquer la ressource Service:

    $ oc apply -f <filename>
    Copy to Clipboard Toggle word wrap
  3. Créer une politique dans l'espace de noms d'une application sans serveur, qui est un membre de l'objet ServiceMeshMemberRoll, qui n'autorise que les demandes avec des jetons Web JSON valides (JWT) :

    Important

    Les chemins /metrics et /healthz doivent être inclus dans excludedPaths car ils sont accessibles à partir des pods du système dans l'espace de noms knative-serving.

    apiVersion: authentication.istio.io/v1alpha1
    kind: Policy
    metadata:
      name: default
      namespace: <namespace>
    spec:
      origins:
      - jwt:
          issuer: testing@secure.istio.io
          jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/jwks.json"
          triggerRules:
          - excludedPaths:
            - prefix: /metrics 
    1
    
            - prefix: /healthz 
    2
    
      principalBinding: USE_ORIGIN
    Copy to Clipboard Toggle word wrap
    1
    Le chemin d'accès à votre application pour collecter les métriques par pod système.
    2
    Le chemin d'accès à votre application pour sonder le pod du système.
  4. Appliquer la ressource Policy:

    $ oc apply -f <filename>
    Copy to Clipboard Toggle word wrap

Vérification

  1. Si vous essayez d'utiliser une requête curl pour obtenir l'URL du service Knative, elle est refusée :

    $ curl http://hello-example-default.apps.mycluster.example.com/
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    Origin authentication failed.
    Copy to Clipboard Toggle word wrap

  2. Vérifier la demande avec un JWT valide.

    1. Obtenir le jeton JWT valide :

      $ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
      Copy to Clipboard Toggle word wrap
    2. Accédez au service en utilisant le jeton valide dans l'en-tête de la requête curl:

      $ curl http://hello-example-default.apps.mycluster.example.com/ -H "Authorization: Bearer $TOKEN"
      Copy to Clipboard Toggle word wrap

      La demande est désormais autorisée :

      Exemple de sortie

      Hello OpenShift!
      Copy to Clipboard Toggle word wrap

Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat