This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.12.3. Using custom domains for Knative services with Service Mesh
By default, Knative services have a fixed domain format:
<application_name>-<namespace>.<openshift_cluster_domain>
<application_name>-<namespace>.<openshift_cluster_domain>
You can customize the domain for your Knative service by configuring the service as a private service and creating the required Service Mesh resources.
Prerequisites
- Install the OpenShift Serverless Operator and Knative Serving.
- Install Red Hat OpenShift Service Mesh.
- Complete the configuration steps in Using Service Mesh with OpenShift Serverless.
- You can configure a custom domain for an existing Knative service, or create a new sample service. To create a new service, see Creating and managing serverless applications.
12.3.1. Setting cluster availability to cluster-local 复制链接链接已复制到粘贴板!
By default, Knative services are published to a public IP address. Being published to a public IP address means that Knative services are public applications, and have a publicly accessible URL.
Publicly accessible URLs are accessible from outside of the cluster. However, developers may need to build back-end services that are only be accessible from inside the cluster, known as private services. Developers can label individual services in the cluster with the serving.knative.dev/visibility=cluster-local label to make them private.
Procedure
Set the visibility for your service by adding the
serving.knative.dev/visibility=cluster-locallabel:oc label ksvc <service_name> serving.knative.dev/visibility=cluster-local
$ oc label ksvc <service_name> serving.knative.dev/visibility=cluster-localCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Check that the URL for your service is now in the format
http://<service_name>.<namespace>.svc.cluster.local, by entering the following command and reviewing the output:oc get ksvc
$ oc get ksvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example output
NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 True
NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3.2. Creating necessary Service Mesh resources 复制链接链接已复制到粘贴板!
Procedure
Create an Istio gateway to accept traffic.
Create a YAML file, and copy the following YAML into it:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apply the YAML file:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Create an Istio
VirtualServiceobject to rewrite the host header.Create a YAML file, and copy the following YAML into it:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apply the YAML file:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Create an Istio
ServiceEntryobject. This is required for OpenShift Serverless because Kourier is outside of the service mesh.Create a YAML file, and copy the following YAML into it:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Your Knative service in the format
<service_name>.<namespace>.svc.
Apply the YAML file:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Create an OpenShift Container Platform route that points to the
VirtualServiceobject.Create a YAML file, and copy the following YAML into it:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- The OpenShift Container Platform route must be created in the same namespace as the ServiceMeshControlPlane. In this example, the ServiceMeshControlPlane is deployed in the
istio-systemnamespace.Apply the YAML file:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3.3. Accessing a service using your custom domain 复制链接链接已复制到粘贴板!
Procedure
Access the custom domain by using the
Hostheader in acurlrequest. For example:curl -H "Host: custom-ksvc-domain.example.com" http://<ip_address>
$ curl -H "Host: custom-ksvc-domain.example.com" http://<ip_address>Copy to Clipboard Copied! Toggle word wrap Toggle overflow where
<ip_address>is the IP address that the OpenShift Container Platform ingress router is exposed to.Example output
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3.4. Additional resources 复制链接链接已复制到粘贴板!
- For more information about Red Hat OpenShift Service Mesh, see Understanding Red Hat OpenShift Service Mesh.