Skip to content

Latest commit

 

History

History
122 lines (93 loc) · 3.93 KB

File metadata and controls

122 lines (93 loc) · 3.93 KB

What you'll need

  • oc
  • glooctl
  • OpenShift v3.7+ deployed somewhere. minishift is a great way to get a cluster up quickly.

Steps

  1. Gloo and Envoy deployed and running on OpenShift:

     glooctl install openshift 
    
  2. Next, deploy the Pet Store app to OpenShift:

     oc apply \
       -f https://raw.githubusercontent.com/solo-io/gloo/master/example/petstore/petstore.yaml
    
  3. The discovery services should have already created an Upstream for the petstore service. Let's verify this:

     glooctl upstream get
     
     default-petstore-8080
     gloo-system-gloo-8081
     gloo-system-ingress-8080
     gloo-system-ingress-8443
    

    The upstream we want to see is default-petstore-8080. Digging a little deeper, we can verify that Gloo's function discovery populated our upstream with the available rest endpoints it implements. Note: the upstream was created in the gloo-system namespace rather than default because it was created by a discovery service. Upstreams and virtualservices do not need to live in the gloo-system namespace to be processed by Gloo.


  4. Let's take a closer look at the functions that are available on this upstream (edited here to reduce verbosity):

     glooctl upstream get default-petstore-8080 -o yaml
     
     functions:
     - name: addPet
       spec:
         body: '{"tag": "{{tag}}","id": {{id}},"name": "{{name}}"}'
         headers:
           :method: POST
         path: /api/pets
     - name: deletePet
       spec:
         body: ""
         headers:
           :method: DELETE
         path: /api/pets/{{id}}
     - name: findPetById
       spec:
         body: ""
         headers:
           :method: GET
         path: /api/pets/{{id}}
     - name: findPets
       spec:
         body: ""
         headers:
           :method: GET
         path: /api/pets?tags={{tags}}&limit={{limit}}
     metadata:
       annotations:
         generated_by: kubernetes-upstream-discovery
         gloo.solo.io/swagger_url: http://petstore.default.svc.cluster.local:8080/swagger.json
       namespace: gloo-system
       resource_version: "320962"
     name: default-petstore-8080
     spec:
       labels: null
       service_name: petstore
       service_namespace: default
       service_port: 8080
     status:
       state: Accepted
     type: kubernetes
    
  5. Let's now use glooctl to create a route for this upstream.

     glooctl route create \
       --path-exact /petstore/list \
       --upstream default-petstore-8080 \
       --prefix-rewrite /api/pets
    

    We need the --prefix-rewrite flag so Envoy knows to change the path on the outgoing request to the path our petstore expects.

    With glooctl, we can see that a virtual host was created with our route:

     glooctl virtualservice get -o yaml
     
     metadata:
       namespace: gloo-system
       resource_version: "3052"
     name: default
     routes:
     - request_matcher:
         path_exact: /petstore/list
       single_destination:
         upstream:
           name: default-petstore-8080
     status:
       state: Accepted
    
  6. Let's test the route /petstore/list using curl:

     export GATEWAY_URL=http://$(minishift ip):$(oc get svc ingress -n gloo-system -o 'jsonpath={.spec.ports[?(@.name=="http")].nodePort}')
    
     curl ${GATEWAY_URL}/petstore/list
     
     [{"id":1,"name":"Dog","status":"available"},{"id":2,"name":"Cat","status":"pending"}]
    

Great! our gateway is up and running. Let's make things a bit more sophisticated in the next section with Function Routing.