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-local
label:oc label ksvc <service_name> serving.knative.dev/visibility=cluster-local
$ oc label ksvc <service_name> serving.knative.dev/visibility=cluster-local
Copy 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 ksvc
Copy 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 True
Copy 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
VirtualService
object 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
ServiceEntry
object. 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
VirtualService
object.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-system
namespace.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
Host
header in acurl
request. 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.