Contour is an open source Kubernetes ingress controller providing the control plane for the Envoy edge and service proxy. Contour supports dynamic configuration updates and multi-team ingress delegation out of the box while maintaining a lightweight profile.In this blog post i will be deploying Ingress controller along with Load Balancer (LB was deployed in this post).you can also expose Envoy proxy as node port which will allow you to access your service on each k8s node.
What is Ingress in Kubernetes
“NodePort” and “LoadBalancer” let you expose a service by specifying that value in the service’s type
. Ingress, on the other hand, is a completely independent resource to your service. You declare, create and destroy it separately to your services.
Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.An Ingress may be configured to give Services externally-reachable URLs, load balance traffic, terminate SSL / TLS, and offer name based virtual hosting
Pre-requisite
Before we begin we’ll need to have a few pieces already in place:
- A Kubernetes cluster (See Here on How to Deploy TKG)
kubectl
configured with admin access to your cluster- You have downloaded and unpacked the bundle of Tanzu Kubernetes Grid extensions which can be downloaded from here
Install Contour Ingress Controller
Contour is an Ingress controller for Kubernetes that works by deploying the Envoy proxy as a reverse proxy and load balancer.To install Contour follow below steps:
- Downloaded VMware Tanzu Kubernetes Grid Extensions Manifest 1.1.0 in the pre-requisite stage ,move that to your Client VM and unzip it.
- You deploy Contour and Envoy directly on Tanzu Kubernetes clusters. You do not need to deploy Contour on management clusters.
- Set the context of
kubectl
to the Tanzu Kubernetes cluster on which to deploy Contour.-
#kubectl config use-context avnish-admin@avnish
-
- First Install Cert-Manager on the k8 cluster
-
kubectl apply -f tkg-extensions-v1.1.0/cert-manager/
-
- Deploy Contour and Envoy on the cluster using:
-
#kubectl apply -f tkg-extensions-v1.1.0/ingress/contour/vsphere/
-
This completes installation of Contour Ingress Controller on Tanzu Kubernetes Cluster.let’s deploy an application and test the functionality.
Deploy a Sample Application
Next we need to deploy at least one Ingress object before Contour can serve traffic. Note that as a security feature, Contour does not expose a port to the internet unless there’s a reason it should. A great way to test your Contour installation is to deploy the application
In this example we will deploy a simple web application and then configure load balancing for that application using the Ingress resource and will access it using load balancer IP/FQDN.This application is available within the same folder which we have downloaded from VMware inside example folder. Let’s deploy the application:
- Run below command to deploy application which will create a new namespace named “test-ingress” , 2 services and one deployment.
-
#kubectl apply -f tkg-extensions-v1.1.0/ingress/contour/examples/common
-
Very simple way of installing the application, now lets create Ingress resource.
Create Ingress Resource
Let’s imagine a scenario where the “foo” team owns http://www.foo.bar.com/foo and “bar” team owns http://www.foo.bar.com/bar. considering this scenario:
- Here is Ingress Resource Definition for our example application:
-
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: https-ingress namespace: test-ingress labels: app: hello spec: tls: - secretName: https-secret hosts: - foo.bar.com rules: - host: foo.bar.com http: paths: - path: /foo backend: serviceName: s1 servicePort: 80 - path: /bar backend: serviceName: s2 servicePort: 80
-
- Lets deploy it using below command:
-
#kubectl apply -f tkg-extensions-v1.1.0/ingress/contour/examples/https-ingress
- Check the status and grub the External IP address of Contour “envoy” proxy.
- Add an
/etc/hosts
entry to above IP addresses tofoo.bar.com
-
Test the Application
To access the application, browse the foo and the bar services from your desktop which has access to service network.
- if you browse bar, you will get bar service responding
- if you browse foo, you will get foo service responding
This completes the installation and configuration of Ingress on VMware Tanzu Kubernetes Grid K8 cluster. Contour is VMware’s open source version of Ingress controller and offers rich feature to consume and can be found Here and when customer chooses to Taznu portfolio , they get Contour as supported version from VMware.