All Projects → koli → Kong Ingress

koli / Kong Ingress

Licence: other
[DEPRECATED] A Kubernetes Ingress for Kong

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Kong Ingress

Kubernetes Ingress Controller
🦍 Kong for Kubernetes: the official Ingress Controller for Kubernetes.
Stars: ✭ 1,347 (+1303.13%)
Mutual labels:  ingress, ingress-controller, kong
Application Gateway Kubernetes Ingress
This is an ingress controller that can be run on Azure Kubernetes Service (AKS) to allow an Azure Application Gateway to act as the ingress for an AKS cluster.
Stars: ✭ 448 (+366.67%)
Mutual labels:  ingress, ingress-controller
Kubernetes Pfsense Controller
Integrate Kubernetes and pfSense
Stars: ✭ 100 (+4.17%)
Mutual labels:  ingress, ingress-controller
Nghttpx Ingress Lb
nghttpx ingress controller for Kubernetes
Stars: ✭ 115 (+19.79%)
Mutual labels:  ingress, ingress-controller
Ingress Merge
Merge Ingress Controller for Kubernetes
Stars: ✭ 124 (+29.17%)
Mutual labels:  ingress, ingress-controller
Kubernetes Ingress
NGINX and NGINX Plus Ingress Controllers for Kubernetes
Stars: ✭ 3,528 (+3575%)
Mutual labels:  ingress, ingress-controller
K8s Bigip Ctlr
Repository for F5 Container Ingress Services for Kubernetes & OpenShift.
Stars: ✭ 204 (+112.5%)
Mutual labels:  ingress, ingress-controller
loadbalancer-controller
Kubernetes loadbalancer controller to provision ingress controller dynamically
Stars: ✭ 93 (-3.12%)
Mutual labels:  ingress, ingress-controller
trafficserver-ingress-controller
Apache Traffic Server Ingress Controller for Kubernetes
Stars: ✭ 29 (-69.79%)
Mutual labels:  ingress, ingress-controller
Citrix K8s Ingress Controller
Citrix ADC (NetScaler) Ingress Controller for Kubernetes:
Stars: ✭ 256 (+166.67%)
Mutual labels:  ingress, ingress-controller
Kube Ingress Aws Controller
Configures AWS Application Load Balancers according to Kubernetes Ingress resources
Stars: ✭ 326 (+239.58%)
Mutual labels:  ingress, ingress-controller
Ingress Table
Ingress Table NoFlo & MicroFlo setup
Stars: ✭ 37 (-61.46%)
Mutual labels:  ingress
Haproxy Ingress
HAProxy Ingress
Stars: ✭ 702 (+631.25%)
Mutual labels:  ingress-controller
Gimbal
Gimbal is an ingress load balancing platform capable of routing traffic to multiple Kubernetes and OpenStack clusters. Built by Heptio in partnership with Actapio.
Stars: ✭ 637 (+563.54%)
Mutual labels:  ingress
Kubeadm Playbook
Fully fledged (HA) Kubernetes Cluster using official kubeadm, ansible and helm. Tested on RHEL/CentOS/Ubuntu with support of http_proxy, dashboard installed, ingress controller, heapster - using official helm charts
Stars: ✭ 533 (+455.21%)
Mutual labels:  ingress-controller
Terraform Aws Alb
Terraform module to provision a standard ALB for HTTP/HTTP traffic
Stars: ✭ 53 (-44.79%)
Mutual labels:  ingress
Xgress
Play Ingress on Jailbroken iOS Devices
Stars: ✭ 36 (-62.5%)
Mutual labels:  ingress
Kongdash
An elegant desktop client for Kong Admin API
Stars: ✭ 449 (+367.71%)
Mutual labels:  kong
Hairpin Proxy
PROXY protocol support for internal-to-LoadBalancer traffic for Kubernetes Ingress users. If you've had problems with ingress-nginx, cert-manager, LetsEncrypt ACME HTTP01 self-check failures, and the PROXY protocol, read on.
Stars: ✭ 410 (+327.08%)
Mutual labels:  ingress-controller
Kong Plugin Response Cache
A Kong plugin that will cache responses in redis
Stars: ✭ 66 (-31.25%)
Mutual labels:  kong

Kong Ingress [Deprecated]

Notice

I think this project fullfiled his goal of providing an unofficial ingress controller for Kong. Right now there's an official project under development and I invite everyone interested to check it out: https://github.com/Kong/kubernetes-ingress-controller.


It's a Kubernetes Ingress Controller for Kong which manages Kong apis for each existent host on ingresses resources.

What's an Ingress Controller

An Ingress Controller is a daemon, deployed as a Kubernetes Pod, that watches the apiserver's /ingresses endpoint for updates to the Ingress resource. Its job is to satisfy requests for ingress.

Important Note

  • This is a work in progress project.
  • It relies on a beta Kubernetes resource.

Overview

Kong it's an API Gateway that deals with L7 traffic, the ingress uses the kong admin API for managing the apis resources. Each existent host on an ingress spec could map several apis on Kong enabling path based routing. The main object of this controller is to act as an orchestrator of domains and routes on Kong. Load balancing between containers could be achieved using Services. To expose your routes outside of the cluster, choose between a publish service type on Kubernetes.

Domain Claims

Some of the main problems of using name based virtual hosting with ingress is that you can't know who's the owner of a specific host, thus a Kong api could be updated by multiple ingress resources resulting in an unwanted behaviour.

A Custom Resource Definition is used to allow the kong ingress to lease domains for each host specified on ingress resources. If a domain is already claimed in the cluster, the controller rejects the creation of apis on Kong.

Read more about Domain Claims.

In the future this probally will change if the Ingress Claim Proposal move forward.

More Info:

Controller Scope

The controller watches for all ingress resources of the cluster, meaning that it's not necessary to install multiple instances of the controller by namespace.

Prerequisites

  • Kubernetes cluster v1.7.0+
  • Kubernetes DNS add-on
  • Kong server v0.10.0+

Quick Start - Minikube

The example above installs Kong and the Ingress Controller in the default namespace. It's recommended to install the components in a custom namespace to facilitate administration.

  1. Follow the Kong Kubernetes Tutorial to install a Kubernetes cluster with Kong
  2. Install RBAC (optional)

If RBAC is in place, users must create RBAC rules for the ingress controller:

kubectl create -f ./examples/rbac/cluster-role.yaml
kubectl create -f ./examples/rbac/cluster-role-binding.yaml

It will enable access only to the default Service Account and only to the required resources. Note: The cluster role binding namespace defaults to kong-system, make sure to change if you're installing in a different namespace.

  1. Install the Kong Ingress Controller
kubectl create -f ./examples/deployment.yaml

After all pods are in the Running state, begin to create your routes. The example above creates two distinct deployments and expose then using services as web and hello:

# An example app
kubectl create -f - <<EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx:1.7.9
        ports:
        - containerPort: 80
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello
        image: tutum/hello-world
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
  selector:
    app: web
---
apiVersion: v1
kind: Service
metadata:
  name: hello
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
  selector:
    app: hello
EOF
  1. The ingress resource below will create 4 routes at Kong, one route for each path
# The ingress resource mapping the routes
kubectl create -f - <<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: acme-routes
  annotations:
    kolihub.io/acme.local: primary
spec:
  rules:
  - host: acme.local
    http:
      paths:
      - path: /
        backend:
          serviceName: web
          servicePort: 80
  - host: duck.acme.local
    http:
      paths:
      - path: /
        backend:
          serviceName: web
          servicePort: 80
  - host: marvin.acme.local
    http:
      paths:
      - path: /web
        backend:
          serviceName: web
          servicePort: 80
      - path: /hello
        backend:
          serviceName: hello
          servicePort: 80
EOF
  1. Expose Kong Proxy and access the services
kubectl -n kong-system patch service kong-proxy -p '{"spec": {"externalIPs": ["'$(minikube ip)'"]}}'

Assuming the domains are mapped in /etc/hosts file, it's possible to access the services through Kong at:

  • http://acme.local:8000
  • http://duck.acme.local:8000
  • http://marvin.acme.local:8000/web
  • http://marvin.acme.local:8000/hello

You could perform a HTTP request with CURL and use the Host header to fake the access to a specific route:

curl http://$(minikube ip):8000/web -H 'Host: marvin.acme.local'

Known Issues/Limitations

  • Removing a namespace from the delegates field in a domain resource will not trigger an update to the child resources
  • It's possible to register a "subdomain" as primary, thus an user could register a subdomain which he doesn't own, e.g.: coyote.acme.org
  • Removing an ingress resource doesn't remove the associated Kong routes

Read more at docs.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].