Getting Started
Based on the official quickstart. Commands assume a running Kubernetes cluster with a
LoadBalancerprovider and a workingkubectl.
Prerequisites
- A Kubernetes cluster (kind, minikube, or a managed cluster).
kubectlconfigured against that cluster.- A
LoadBalancerService implementation so Envoy gets an external address (cloud LB, or MetalLB /cloud-provider-kindlocally).
Install
The official quickstart applies Contour, Envoy, the CRDs, and a LoadBalancer Service into the projectcontour namespace in one manifest:
kubectl apply -f https://projectcontour.io/quickstart/contour.yamlThis creates the Contour Deployment, the Envoy DaemonSet, a LoadBalancer Service, and the HTTPProxy CRDs. Helm charts (for example bitnami/contour) are an alternative install path.
A first working setup
Deploy a sample workload and expose it as a Service.
bashkubectl create deployment hello --image=nginxdemos/hello:plain-text --port=80 kubectl expose deployment hello --port=80Create an
HTTPProxythat routes a host to that Service.yamlapiVersion: projectcontour.io/v1 kind: HTTPProxy metadata: name: hello spec: virtualhost: fqdn: hello.local routes: - conditions: - prefix: / services: - name: hello port: 80Apply it.
bashkubectl apply -f hello-httpproxy.yaml
Verify it works
Find the external address of the Envoy Service and send a request with the configured host header:
kubectl -n projectcontour get service envoy -o wide
curl -H 'Host: hello.local' http://<envoy-external-ip>/A healthy setup returns HTTP 200 with the sample app's response. You can also confirm the HTTPProxy is valid:
kubectl get httpproxy hello -o wideThe STATUS column should read valid.
Where to go next
For TLS, TLS delegation, multi-team route inclusion, Gateway API support, external authorization, and rate limiting, see the documentation at https://projectcontour.io/docs/main/. Production concerns such as high availability, scaling Envoy, and hardening are covered there rather than re-documented here.