Learn how to access the Knative serving services in your cluster for testing purposes before you choose to map a custom domain.
By default, the services that you deploy to your Knative serving clusters are
set to the nip.io
base domain. Therefore, if you use the recommended name for
ingress gateway, you can immediately test your services and send requests
without additional configuration. For example:
http://{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io
.
Note that there can be issues around the reliability of requests when using DNS wildcards, including the nip.io domain, which is a free DNS wildcard service. In contrast, setting up and using a custom domain for testing can offer increased reliability.
Optionally, you can also access your services through the external IP address.
Using the nip.io
test domain
To access a service using the default nip.io
base domain, you can locate the
URL from within the Google Cloud console or you can construct the URL manually.
Console
In the Google Cloud console, go to the Knative serving page.
In the list, click the service for which you want to obtain the URL.
Near the top of the page the URL is displayed.
For example:
http://my-service.default.kuberun.11.111.11.111.nip.io
Where my-service is the name of the Knative serving service, default is the namespace, and 11.111.11.111 is the IP address of your external load balancer.
Manually
To manually construct the URL to your service, you use the name of the service, the namespace in which that service is running, and the IP address of your load balancer:
http://SERVICE.NAMESPACE.kuberun.EXTERNAL_IP.nip.io
Replace:
- SERVICE_NAME with the name of your service.
- NAMESPACE with the namespace where you deployed the service. By
default, services are deployed to the
default
namespace. - EXTERNAL_IP with the external IP address of your load balancer.
For example, if you have a service named hello
in the default
namespace
and your external IP address is 12.345.67.890
, the URL might look like:
http://hello.default.kuberun.12.345.67.890.nip.io
Using the external IP address
Optionally, you can use the external IP address of your load balancer to access your services through cURL commands or by manually configuring an alternative DNS wildcard service.
Before you begin
Ensure that your Google Cloud CLI and kubectl command-line tools are installed and up-to-date:
You must have at least the Kubernetes Engine Developer Identity and Access Management role or equivalent permissions.
Getting the external IP address
When your GKE Enterprise cluster is created, the Istio ingress controller creates a Google Cloud Network Load Balancer with a publicly available IP address.
To configure access to your service with cURL or a DNS service, you must first obtain the external IP address of the load balancer service:
Console
To get the load balancer's external IP address from the Google Cloud console:- Go to the GKE page in the Google Cloud console:
Go to GKE - Click Services and ingress.
- Identify the service that is your cluster's Istio
ingress. The service's Type will be External load
balancer, and the Name will be
istio-ingressgateway
. - Once you've found your cluster's Istio ingress service, copy its
Endpoint. This will be the IP address without the port
number. For example, you might see
00.000.000.000:11
listed as an endpoint, but you only need to copy00.000.000.000
.
kubectl
To obtain the external IP for the Load Balancer, run the following command:
kubectl get svc istio-ingressgateway -n ASM-INGRESS-NAMESPACE
Replace ASM-INGRESS-NAMESPACE with the namespace where your
Cloud Service Mesh ingress is located. Specify istio-system
if you
installed Cloud Service Mesh using its default configuration.
The resulting output looks similar to the following:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) istio-ingressgateway LoadBalancer XX.XX.XXX.XX pending 80:32380/TCP,443:32390/TCP,32400:32400/TCP
where the EXTERNAL-IP value is your external IP address of the Load Balancer.
After obtaining the external IP address of your load balancer, you can use it to in cURL commands or with a DNS wildcard service to access your Knative serving services.
Using cURL
You can use cURL
commands with the default nip.io
base domain to send requests to
your service.
You specify the external IP address of your load balancer along with the names of your service and namespace in the cURL command:
curl --header 'Host: SERVICE_NAME.NAMESPACE.kuberun.EXTERNAL_IP.nip.io' EXTERNAL_IP
Replace:
- SERVICE_NAME with the name of your Knative serving service.
- NAMESPACE with the namespace in which your service is running.
- EXTERNAL_IP with the external IP address of your load balancer.
Example:
curl --header 'Host: my-service.default.kuberun.12.345.67.890.nip.io' http://12.345.67.890
Using other DNS wildcard services
By default, your Knative serving services use the nip.io DNS wildcard service. However, you can choose to use other services like sslip.io. To configure other DNS wildcard services you must first obtain the external IP address of your load balancer and then use that IP address to configure the DNS wildcard service.
Configuring your cluster's domain
Knative serving uses the config-domain
ConfigMap to define the base
domain for which all your deployed Knative serving services use. You can
update that ConfigMap through the Google Cloud console or with kubectl
commands.
Console
To change the default base domain from nip.io
to one of the DNS
wildcard services in the Google Cloud console:
Go to the Knative serving Domain mappings page in the Google Cloud console:
Select Add mapping > Add cluster default domain
Select the checkbox next to "Apply this domain mapping to all Knative serving services deployed to this cluster."
Select your cluster from the drop-down menu.
In the Domain field, enter the wildcard DNS site you want to use. For example:
sslip.io
kubectl
To change the default base domain from nip.io
to one of the DNS
wildcard sites, use the command:
kubectl patch configmap config-domain --namespace knative-serving --patch \ '{"data": {"kuberun.EXTERNAL_IP.nip.io": null, "DNS_SERVICE": ""}}'
Replace
- EXTERNAL_IP with the Load Balancer external IP address.
- DNS_SERVICE with the wildcard DNS site you are using. For
example:
sslip.io
Your service is now available at
http://{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.{DNS_SERVICE}
.