The default domain name of a Knative Service is in the {route}.{namespace}.{default-example.com}
format, where {default-example.com}
is the default suffix. To achieve a flexible routing configuration, you can refer to this topic to configure a custom domain name. ACK Knative offers the capability to modify global custom domain names through ConfigMap, which is applicable to all Knative Services. You can also use DomainMapping to specify custom domain names for individual Knative Services in ACK Knative.
Prerequisites
Knative is deployed in your cluster. For more information, see Deploy Knative.
A domain name is obtained. For more information, see What is Domains?
The kubeconfig file for the cluster is obtained and kubectl is used to connect to the cluster. For more information, see Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.
Specify a custom global domain name
You can specify a global domain name if you do not want to specify a domain name for each Knative Service. After you complete the following configuration, all Knative Services deployed in ACK Knative can share the specified global domain name.
Run the following command to modify the
config-domain
ConfigMap in theknative-serving
namespace:kubectl edit cm config-domain --namespace knative-serving
Modify the ConfigMap.
Change the default domain name
example.com
in the ConfigMap to your custom domain name and save the ConfigMap. In this example, a custom domain namemydomain
is used.apiVersion: v1 kind: ConfigMap metadata: name: config-domain namespace: knative-serving data: mydomain.com: "" # Change example.com to mydomain.com. Replace the default domain name with the actual domain name that you want to use.
Run the following command to verify the domain name:
# Replace helloworld-go in the command with the name of your Knative Service. kubectl get route helloworld-go --output jsonpath="{.status.url}" | awk -F/ '{print $3}'
Expected output:
helloworld-go.default.mydomain.com
The output indicates that the custom domain name is in effect.
Add the IP address of the Knative gateway to the resolution settings of the custom domain name in the Alibaba Cloud DNS console.
Run the following command to access the Knative Service through the custom domain name:
curl http://helloworld-go.default.mydomain.com
Expected output:
Hello Knative!
The output indicates that the Knative Service successfully responds to the request.
Specify a custom domain name for a Service
To specify a custom domain name for each Knative Service, follow the steps below.
Use the ACK console
Log on to the ACK console. In the left-side navigation pane, click Clusters.
On the Clusters page, find the cluster that you want to manage and click its name. In the left-side navigation pane, choose .
On the Knative page, click the Services tab, and then find and click the name of the Service that you want to configure.
In the upper-right corner of the details page, click Access Control, and then set the parameters as prompted.
Use kubectl
You can use DomainMappings to specify a domain name for each Knative Service if you want to use the Ingress controller to customize routing configurations for different Knative Services.
Run the following command to create a file named
helloworld.knative.top.yaml
:vi helloworld.knative.top.yaml
Open the vi editor, add the following YAML content, save the content, and then exit.
apiVersion: serving.knative.dev/v1beta1 kind: DomainMapping metadata: name: helloworld.knative.top.mydomain.com # The domain name of the Knative Service. Replace it with the domain name that you want to use. namespace: default # The namespace to which the Knative Service belongs. spec: ref: name: helloworld-go # The name of the Knative Service. kind: Service apiVersion: serving.knative.dev/v1
Run the following command to deploy resources defined in the
helloworld.knative.top.yaml
file to your cluster:kubectl apply -f helloworld.knative.top.yaml
Expected output:
domainmapping.serving.knative.dev/helloworld.knative.top created
Run the following command to verify the DomainMapping:
kubectl get domainmapping helloworld.knative.top
Expected output:
NAME URL READY REASON helloworld.knative.top http://helloworld.knative.top True
The output indicates that the custom domain name is in effect.
Add the IP address of the Knative gateway to the resolution settings of the custom domain name in the Alibaba Cloud DNS console.
Run the following command to access the Knative Service through the custom domain name:
curl http://helloworld.knative.top.mydomain.com
Expected output:
Hello Knative!
The output indicates that the Knative Service successfully responds to the request.
References
You can configure a certificate to access Services over HTTPS through a custom domain name. For more information, see Configure a certificate to access Services over HTTPS.
You can deploy a gRPC Service in Knative to improve network efficiency. For more information, see Deploy a gRPC Service in Knative.