4.6. Configurer l'accès aux services Knative
4.6.1. Configuration de l'authentification par jeton Web JSON pour les services Knative Copier lienLien copié sur presse-papiers!
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.
4.6.2. Utilisation de l'authentification par jeton Web JSON avec Service Mesh 2.x Copier lienLien copié sur presse-papiers!
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.
4.6.2.1. Configuration de l'authentification par jeton Web JSON pour Service Mesh 2.x et OpenShift Serverless Copier lienLien copié sur presse-papiers!
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
Ajoutez l'annotation
sidecar.istio.io/inject="true"
à votre service :Exemple de service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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.
Appliquer la ressource
Service
:oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer une ressource
RequestAuthentication
dans chaque espace de noms d'application sans serveur qui est un membre de l'objetServiceMeshMemberRoll
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquer la ressource
RequestAuthentication
:oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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'objetServiceMeshMemberRoll
, en créant la ressourceAuthorizationPolicy
suivante :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquer la ressource
AuthorizationPolicy
:oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pour chaque espace de noms d'application sans serveur qui est un membre de l'objet
ServiceMeshMemberRoll
, créez la ressourceAuthorizationPolicy
suivante :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquer la ressource
AuthorizationPolicy
:oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
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/
$ curl http://hello-example-1-default.apps.mycluster.example.com/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
RBAC: access denied
RBAC: access denied
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vérifier la demande avec un JWT valide.
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 -
$ 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 Copied! Toggle word wrap Toggle overflow 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
$ curl -H "Authorization: Bearer $TOKEN" http://hello-example-1-default.apps.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow La demande est désormais autorisée :
Exemple de sortie
Hello OpenShift!
Hello OpenShift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.3. Utilisation de l'authentification par jeton Web JSON avec Service Mesh 1.x Copier lienLien copié sur presse-papiers!
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.
4.6.3.1. Configuration de l'authentification par jeton Web JSON pour Service Mesh 1.x et OpenShift Serverless Copier lienLien copié sur presse-papiers!
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
Ajoutez l'annotation
sidecar.istio.io/inject="true"
à votre service :Exemple de service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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.
Appliquer la ressource
Service
:oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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) :ImportantLes chemins
/metrics
et/healthz
doivent être inclus dansexcludedPaths
car ils sont accessibles à partir des pods du système dans l'espace de nomsknative-serving
.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquer la ressource
Policy
:oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Vérification
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/
$ curl http://hello-example-default.apps.mycluster.example.com/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Origin authentication failed.
Origin authentication failed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vérifier la demande avec un JWT valide.
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 -
$ 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 Copied! Toggle word wrap Toggle overflow 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"
$ curl http://hello-example-default.apps.mycluster.example.com/ -H "Authorization: Bearer $TOKEN"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow La demande est désormais autorisée :
Exemple de sortie
Hello OpenShift!
Hello OpenShift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow