Get started
Set up Gloo Gateway in a Kubernetes cluster.
Gloo Gateway is a cloud-native Layer 7 proxy that is based on the Kubernetes Gateway API.
Before you begin
- Set your Gloo Gateway license key as an environment variable. If you do not have one, contact an account representative.
export GLOO_GATEWAY_LICENSE_KEY=<license-key>
Set up Gloo Gateway
If you have not already, install
helm
, the Kubernetes package manager.Install the custom resources of the Kubernetes Gateway API.
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml
Example output:
customresourcedefinition.apiextensions.k8s.io/gatewayclasses.gateway.networking.k8s.io created customresourcedefinition.apiextensions.k8s.io/gateways.gateway.networking.k8s.io created customresourcedefinition.apiextensions.k8s.io/httproutes.gateway.networking.k8s.io created customresourcedefinition.apiextensions.k8s.io/referencegrants.gateway.networking.k8s.io created
Add the Helm repository for Gloo Gateway Enterprise.
helm repo add glooe https://storage.googleapis.com/gloo-ee-helm helm repo update
Install Gloo Gateway Enterprise Edition. This command creates the
gloo-system
namespace and installs the Gloo Gateway control plane into it.helm install -n gloo-system gloo-gateway glooe/gloo-ee \ --create-namespace \ --version 1.17.0-beta1 \ --set-string license_key=$GLOO_GATEWAY_LICENSE_KEY \ --set gloo.kubeGateway.enabled=true \ --set gloo.gloo.disableLeaderElection=true \ --set gloo.discovery.enabled=false \ --set gloo.observability.enabled=false \ --set gloo.prometheus.enabled=false \ --set gloo.grafana.defaultInstallationEnabled=false \ --set gloo.gloo-fed.enabled=false
Example output:
NAME: gloo-gateway LAST DEPLOYED: Thu Apr 18 11:50:39 2024 NAMESPACE: gloo-system STATUS: deployed REVISION: 2 TEST SUITE: None
Verify that the Gloo Gateway control plane is up and running.
kubectl get pods -n gloo-system | grep gloo
Example output:
NAME READY STATUS RESTARTS AGE gloo-78658959cd-cz6jt 1/1 Running 0 12s
Verify that the
gloo-gateway
GatewayClass is created. You can optionally take a look at how the gateway class is configured by adding the-o yaml
option to your command.kubectl get gatewayclass gloo-gateway
Example output:
NAME CONTROLLER ACCEPTED AGE gloo-gateway solo.io/gloo-gateway True 2m12s
Create a gateway resource and configure an HTTP listener. The following gateway can serve HTTP resources from all namespaces.
kubectl apply -n gloo-system -f- <<EOF kind: Gateway apiVersion: gateway.networking.k8s.io/v1 metadata: name: http spec: gatewayClassName: gloo-gateway listeners: - protocol: HTTP port: 8080 name: http allowedRoutes: namespaces: from: All EOF
Verify that the gateway is created successfully. You can also review the external address that is assigned to the gateway.
kubectl get gateway http -n gloo-system
Example output:
NAME CLASS ADDRESS PROGRAMMED AGE http gloo-gateway a3a6c06e2f4154185bf3f8af46abf22e-139567718.us-east-2.elb.amazonaws.com True 93s
Deploy a sample app
Create the httpbin namespace.
kubectl create ns httpbin
Deploy the httpbin app.
kubectl -n httpbin apply -f https://raw.githubusercontent.com/solo-io/gloo-mesh-use-cases/main/policy-demo/httpbin.yaml
Verify that the httpbin app is running.
kubectl -n httpbin get pods
Example output:
NAME READY STATUS RESTARTS AGE httpbin-d57c95548-nz98t 3/3 Running 0 18s
Expose the app on the gateway
Create an HTTPRoute resource to expose the httpbin app on the gateway. The following example exposes the app on the
wwww.example.com
domain.kubectl apply -f- <<EOF apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: httpbin namespace: httpbin labels: example: httpbin-route spec: parentRefs: - name: http namespace: gloo-system hostnames: - "www.example.com" rules: - backendRefs: - name: httpbin port: 8000 EOF
Setting Description spec.parentRefs
The name and namespace of the gateway resource that serves the route. In this example, you use the HTTP gateway that you created earlier. spec.hostnames
A list of hostnames that the route is exposed on. spec.rules.backendRefs
The Kubernetes service that serves the incoming request. In this example, requests to www.example.com
are forwarded to the httpbin app on port 9000. Note that you must create the HTTP route in the same namespace as the service that serves that route. To create the HTTP route resource in a different namespace, you must create a ReferenceGrant resource to allow the HTTP route to forward requests to a service in a different namespace. For more information, see the Kubernetes API Gateway documentation.Verify that the HTTPRoute is applied successfully.
kubectl get -n httpbin httproute/httpbin -o yaml
Send a request to the httpbin app.
Next steps
Now that you have Gloo Gateway set up and running, check out the following guides to expand your API gateway capabilities.
- Learn more about Gloo Gateway, its features and benefits.
- Add routing capabilities to your httpbin route by using the Traffic management guides.
- Explore ways to make your routes more resilient by using the Resiliency guides.
- Secure your routes with external authentication and rate limiting policies by using the Security guides.
Cleanup
If you no longer need this quick-start Gloo Gateway environment, you can uninstall your setup by following the steps in the Uninstall guide.