Este contenido no está disponible en el idioma seleccionado.
Chapter 11. Configuring access to Knative services
11.1. Configuring JSON Web Token authentication for Knative services
OpenShift Serverless does not currently have user-defined authorization features. To add user-defined authorization to your deployment, you must integrate OpenShift Serverless with Red Hat OpenShift Service Mesh, and then configure JSON Web Token (JWT) authentication and sidecar injection for Knative services.
11.2. Using JSON Web Token authentication with Service Mesh 2.x
				You can use JSON Web Token (JWT) authentication with Knative services by using Service Mesh 2.x and OpenShift Serverless. To do this, you must create authentication requests and policies in the application namespace that is a member of the ServiceMeshMemberRoll object. You must also enable sidecar injection for the service.
			
11.2.1. Configuring JSON Web Token authentication for Service Mesh 2.x and OpenShift Serverless
						Adding sidecar injection to pods in system namespaces, such as knative-serving and knative-serving-ingress, is not supported when Kourier is enabled.
					
For OpenShift Container Platform, if you require sidecar injection for pods in these namespaces, see the OpenShift Serverless documentation on Integrating Service Mesh with OpenShift Serverless natively.
Prerequisites
- You have installed the OpenShift Serverless Operator, Knative Serving, and Red Hat OpenShift Service Mesh on your cluster.
- 
							Install the OpenShift CLI (oc).
- You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.
Procedure
- Add the - sidecar.istio.io/inject="true"annotation to your service:- Example service - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Apply the - Serviceresource:- oc apply -f <filename> - $ oc apply -f <filename>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Create a - RequestAuthenticationresource in each serverless application namespace that is a member in the- ServiceMeshMemberRollobject:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Apply the - RequestAuthenticationresource:- oc apply -f <filename> - $ oc apply -f <filename>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Allow access to the - RequestAuthenticatonresource from system pods for each serverless application namespace that is a member in the- ServiceMeshMemberRollobject, by creating the following- AuthorizationPolicyresource:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Apply the - AuthorizationPolicyresource:- oc apply -f <filename> - $ oc apply -f <filename>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- For each serverless application namespace that is a member in the - ServiceMeshMemberRollobject, create the following- AuthorizationPolicyresource:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Apply the - AuthorizationPolicyresource:- oc apply -f <filename> - $ oc apply -f <filename>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
Verification
- If you try to use a - curlrequest to get the Knative service URL, it is denied:- 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 - Example output - RBAC: access denied - RBAC: access denied- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Verify the request with a valid JWT. - Get the valid JWT token: - 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 
- Access the service by using the valid token in the - curlrequest header:- 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 - The request is now allowed: - Example output - Hello OpenShift! - Hello OpenShift!- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
11.3. Using JSON Web Token authentication with Service Mesh 1.x
				You can use JSON Web Token (JWT) authentication with Knative services by using Service Mesh 1.x and OpenShift Serverless. To do this, you must create a policy in the application namespace that is a member of the ServiceMeshMemberRoll object. You must also enable sidecar injection for the service.
			
11.3.1. Configuring JSON Web Token authentication for Service Mesh 1.x and OpenShift Serverless
						Adding sidecar injection to pods in system namespaces, such as knative-serving and knative-serving-ingress, is not supported when Kourier is enabled.
					
For OpenShift Container Platform, if you require sidecar injection for pods in these namespaces, see the OpenShift Serverless documentation on Integrating Service Mesh with OpenShift Serverless natively.
Prerequisites
- You have installed the OpenShift Serverless Operator, Knative Serving, and Red Hat OpenShift Service Mesh on your cluster.
- 
							Install the OpenShift CLI (oc).
- You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.
Procedure
- Add the - sidecar.istio.io/inject="true"annotation to your service:- Example service - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Apply the - Serviceresource:- oc apply -f <filename> - $ oc apply -f <filename>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Create a policy in a serverless application namespace which is a member in the - ServiceMeshMemberRollobject, that only allows requests with valid JSON Web Tokens (JWT):Important- The paths - /metricsand- /healthzmust be included in- excludedPathsbecause they are accessed from system pods in the- knative-servingnamespace.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Apply the - Policyresource:- oc apply -f <filename> - $ oc apply -f <filename>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
Verification
- If you try to use a - curlrequest to get the Knative service URL, it is denied:- 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 - Example output - Origin authentication failed. - Origin authentication failed.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Verify the request with a valid JWT. - Get the valid JWT token: - 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 
- Access the service by using the valid token in the - curlrequest header:- 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 - The request is now allowed: - Example output - Hello OpenShift! - Hello OpenShift!- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow