Files
deprecated-helm-charts/stable/contour

Contour

Contour is an Ingress controller for Kubernetes that works by deploying the Envoy proxy as a reverse proxy and load balancer. Unlike other Ingress controllers, Contour supports dynamic configuration updates out of the box while maintaining a lightweight profile.

Installing the Chart

To install the chart with the release name my-release:

$ helm install --name my-release stable/contour

Uninstalling the Chart

To uninstall/delete the my-release deployment:

$ helm delete my-release --purge

Upgrading the Chart

To upgrade the my-release deployment:

$ helm upgrade --install my-release stable/contour

Configuration

The default configuration values for this chart are listed in values.yaml.

Parameter Description Default
contour.image.registry Registry for the contour container image gcr.io/heptio-images/contour
contour.image.tag Contour image tag v0.15.0
contour.image.pullPolicy Image pull policy IfNotPresent
contour.replicas Replica count for the contour deployment 2
contour.resources Resource definitions for the contour pods {}
customResourceDefinitions.create Wether the release should install CRDs true
envoy.image.registry Registry for envoy container image docker.io/envoyproxy/envoy-alpine
envoy.image.tag Envoy image tag v1.11.1
envoy.image.pullPolicy Image pull policy IfNotPresent
envoy.resources Resource definitions for the envoy pods {}
hpa.create Create hpa for contour false
hpa.minReplicas Autoscaling minimum replicaset count 2
hpa.maxReplicas Autoscaling maximum replicaset count 15
hpa.targetCPUUtilizationPercentage Threshold cpu usage 70
init.image.registry Registry for the contour init container image gcr.io/heptio-images/contour
init.image.tag Init image tag v0.15.0
init.image.pullPolicy Image pull policy IfNotPresent
init.resources Resource definitions for the init pods {}
rbac.create Wether the release should create RBAC objects true
serviceType The type of Service Contour will use LoadBalancer
service.nodePorts.http Desired nodePort for service of type NodePort used for http requests nil "" - will assign a dynamic node port
service.nodePorts.https Desired nodePort for service of type NodePort used for https requests nil "" - will assign a dynamic node port
serviceAccounts.create Wether the release should create Service Account objects true

Example workload

Start a cluster using Kind by running the below command:

kind create cluster --name=kind

Ensure kubectl configuration is set to the newly created Kind cluster

export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"

Ensure tiller has permission to install (no recommended for production)

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system
EOF

Install tiller

helm init --service-account tiller

Install or upgrade contour

helm upgrade --install contour --namespace contour --set service.loadBalancerType=ClusterIP .

If you don't have an application ready to run with Contour, you can explore with kuard.

kubectl apply -f https://projectcontour.io/examples/kuard.yaml

This example specifies a default backend for all hosts, so that you can test your Contour install. It's recommended for exploration and testing only, however, because it responds to all requests regardless of the incoming DNS that is mapped. You probably want to run with specific Ingress rules for specific hostnames.

Get the Contour ClusterIP

$ CLUSTER_IP=$(kubectl -n contour get svc | grep contour | awk '{print $3}')

Access Kuard application via internal Contour Service ClusterIP

docker exec -ti kind-control-plane curl $CLUSTER_IP