No release in over a year
This controller allows to integrate routes created from ingresses into a normal (non-ingress) Gloo gateway, thus making deploying a separate ingress gateway obsolete. The controller does this by creating route table resources from ingress objects in the cluster. These route tables then can be automatically mounted in a Gloo virtual service.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.0
~> 0.2, >= 0.2.5.beta2
~> 0.7
~> 1.0
~> 1.4
~> 0.12
~> 13.0
~> 3.10
~> 1.12
~> 0.21
~> 0.40
~> 2.1

Runtime

 Project Readme

Project

Use Gloo Edge gateways with Kubernetes ingress resources. Gloo Edge supports ingress, however it requires you to deploy a separate gateway for this. With this adapter, you can integrate your Kubernetes ingresses into an existing gateway.

The adapter works by monitoring ingress resources and automatically creating a Gloo route table for each ingress. You can then mount the created route tables automatically in your gateway.

Install

Install a Gloo Edge gateway:

kubectl create namespace gloo-system
helm install gloo gloo --namespace gloo-system --repo https://storage.googleapis.com/solo-public-helm \
  --set gateway.readGatewaysFromAllNamespaces=true

You can also have a look at the Gloo documentation for detailed installation instructions.

Install the ingress adapter into namespace gloo-system:

git checkout git@github.com:CaperWhite/gloo-ingress-adapter.git
cd gloo-ingress-adapter
helm --namespace gloo-system install gloo-ingress-adapter charts

After this, the ingress adapter should be up and running, and monitoring ingress resources. By default it will create route tables for ingress resources with ingress class name gloo-route.

Verify installation

Deploy a test service:

kubectl create namespace ingress-test
kubectl --namespace ingress-test apply --filename examples/test.yaml

Create an ingress resource for the test service:

cat <<-INGRESS | kubectl apply --namespace ingress-test --filename -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-test
spec:
  ingressClassName: gloo-route
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ingress-test
            port:
              number: 8080
INGRESS

Verify a route table has been created:

kubectl --namespace ingress-test get routetable ingress-test -o yaml

Create a virtual service resource that automatically mounts the created route tables:

cat <<-SERVICE | kubectl --namespace gloo-system apply --filename -
apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
  name: ingress-test
spec:
  virtualHost:
    domains:
    - ingress-test.local
    routes:
    - matchers:
       - prefix: "/"
      delegateAction:
        selector:
          labels:
            ingress.caperwhite.com/protocol: http
          namespaces:
          - ingress-test
SERVICE

Make the gateway accessible locally:

kubectl --namespace gloo-system port-forward service/gateway-proxy 8080:80

Check if you can access the service:

curl -H 'Host: ingress-test.local' http://127.0.0.1:8080

should return

{"result":true}

Delete the ingress:

kubectl --namespace ingress-test delete ingress ingress-test

Verify the route table is gone:

kubectl --namespace ingress-test get routetable -A

Acknowledgements

"Gloo" is a trademark of Solo.io, Inc..