Route within one cluster

Use the ingress gateway to route incoming requests directly to a Kubernetes service within the same cluster.

Figure: Single cluster routing with Gloo Gateway.

For more information, see the following resources:

Before you begin

  1. Install Gloo Gateway.
  2. Configure an HTTP or HTTPS listener on your ingress gateway.
  3. Follow the other guides in this routing section to plan your routing table setup. For example, you might check out the path matching guide to decide how to match the incoming requests to your service paths, the redirect guide to set up any path or host rewrites, or the sub-table delegation guide to nest and sort multiple route tables. Note: Be sure that each route for one host is unique, such as by using prefix matching to determine which requests to the host should be forwarded to which destinations.

Configure a basic route table for direct routing to a Kubernetes service

  1. Ensure that the app is exposed by a Kubernetes service. In this example, the label app: single-app is used as the service selector. The service listens on port 3456 and forwards requests to port 9080.

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: single-app
      name: single-app
      namespace: global
    spec:
      ports:
      - name: http
        port: 3456
        protocol: TCP
        targetPort: 9080
      type: ClusterIP
    
  2. Create a basic route table to route requests to your app's service. This resource allows you to define how requests to endpoints should be routed. In this example route table, all requests to the /single-app path are routed to the single-app service.

    kubectl apply -n global -f- <<EOF
    apiVersion: networking.gloo.solo.io/v2
    kind: RouteTable
    metadata:
      name: single-app-routes
      namespace: global
    spec:
      # Applies to any host; can indicate a specific domain
      hosts:
        - '*'
      # Selects the virtual gateway you previously created
      virtualGateways:
        - name: istio-ingressgateway
          namespace: bookinfo
          cluster: ${CLUSTER_NAME}
      http:
        # Route for the single-app service
        - name: single-app
          # Prefix matching
          matchers:
          - uri:
              prefix: /single-app
          # Forwarding directive
          forwardTo:
            destinations:
              # Reference to Kubernetes service in this cluster
              - ref:
                  name: single-app
                  namespace: global
                  cluster: ${CLUSTER_NAME}
                port:
                  number: 9080
                kind: SERVICE
    EOF
    
  3. Save the external address of the ingress gateway.

    
       export INGRESS_GW_IP=$(kubectl get svc -n gloo-mesh-gateways istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
       echo $INGRESS_GW_IP
       
    
       export INGRESS_GW_IP=$(kubectl get svc -n gloo-mesh-gateways istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
       echo $INGRESS_GW_IP
       

  4. Test the route to your app by curling the ingress gateway address and app path. For example, the following command appends /single-app for the sample app.

    curl http://$INGRESS_GW_IP/single-app
    

Next steps