contour

module
v0.15.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2019 License: Apache-2.0

README

Contour Build Status Go Report Card GitHub release License

Contour is fun at parties!

Overview

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.

Contour also introduces a new ingress API (IngressRoute) which is implemented via a Custom Resource Definition (CRD). Its goal is to expand upon the functionality of the Ingress API to allow for a richer user experience as well as solve shortcomings in the original design.

See the launch blog post for our vision of how Contour fits into the larger Kubernetes ecosystem.

Prerequisites

Contour is tested with Kubernetes clusters running version 1.10 and later, but should work with earlier versions where Custom Resource Definitions are supported (Kubernetes 1.7+).

RBAC must be enabled on your cluster.

Get started

You can try out Contour by creating a deployment from a hosted manifest -- no clone or local install necessary.

What you do need:

  • A Kubernetes cluster that supports Service objects of type: LoadBalancer (AWS Quickstart cluster or Minikube, for example)
  • kubectl configured with admin access to your cluster

See the deployment documentation for more deployment options if you don't meet these requirements.

Add Contour to your cluster

Run:

$ kubectl apply -f https://j.hept.io/contour-deployment-rbac

This command creates:

  • A new namespace heptio-contour with two instances of Contour in the namespace
  • A Service of type: LoadBalancer that points to the Contour instances
  • Depending on your configuration, new cloud resources -- for example, ELBs in AWS

See also TLS support for details on configuring TLS support. TLS is available in Contour version 0.3 and later.

Example workload

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

Run:

$ kubectl apply -f https://j.hept.io/contour-kuard-example

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.

Access your cluster

Now you can retrieve the external address of Contour's load balancer:

$ kubectl get -n heptio-contour service contour -o wide
NAME      CLUSTER-IP     EXTERNAL-IP                                                                    PORT(S)        AGE       SELECTOR
contour   10.106.53.14   a47761ccbb9ce11e7b27f023b7e83d33-2036788482.ap-southeast-2.elb.amazonaws.com   80:30274/TCP   3h        app=contour

Configuring DNS

How you configure DNS depends on your platform:

  • On AWS, create a CNAME record that maps the host in your Ingress object to the ELB address.
  • If you have an IP address instead (on GCE, for example), create an A record.
More information and documentation

For more deployment options, including uninstalling Contour, see the deployment documentation.

See also the Kubernetes documentation for Services, Ingress, and IngressRoutes.

The detailed documentation provides additional information, including an introduction to Envoy and an explanation of how Contour maps key Envoy concepts to Kubernetes.

We've also got an FAQ for short-answer questions and conceptual stuff that doesn't quite belong in the docs.

Troubleshooting

If you encounter issues, review the troubleshooting docs, file an issue, or talk to us on the #contour channel on the Kubernetes Slack server.

Contributing

Thanks for taking the time to join our community and start contributing!

  • Please familiarize yourself with the Code of Conduct before contributing.
  • See CONTRIBUTING.md for information about setting up your environment, the workflow that we expect, and instructions on the developer certificate of origin that we require.
  • Check out the open issues.
  • Read how we're using ZenHub for project and roadmap planning.

Changelog

See the list of releases to find out about feature changes.

Directories

Path Synopsis
apis
contour/v1beta1
Package v1beta1 is the v1beta1 version of the API.
Package v1beta1 is the v1beta1 version of the API.
generated/clientset/versioned
This package has the automatically generated clientset.
This package has the automatically generated clientset.
generated/clientset/versioned/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
generated/clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
generated/clientset/versioned/typed/contour/v1beta1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
generated/clientset/versioned/typed/contour/v1beta1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
cmd
internal
certgen
Package certgen contains the code that handles the `certgen` subcommand for the main `contour` binary.
Package certgen contains the code that handles the `certgen` subcommand for the main `contour` binary.
contour
Package contour contains the translation business logic that listens to Kubernetes ResourceEventHandler events and translates those into additions/deletions in caches connected to the Envoy xDS gRPC API server.
Package contour contains the translation business logic that listens to Kubernetes ResourceEventHandler events and translates those into additions/deletions in caches connected to the Envoy xDS gRPC API server.
dag
Package dag provides a data model, in the form of a directed acyclic graph, of the relationship between Kubernetes Ingress, Service, and Secret objects.
Package dag provides a data model, in the form of a directed acyclic graph, of the relationship between Kubernetes Ingress, Service, and Secret objects.
debug
Package debug provides http endpoints for healthcheck, metrics, and pprof debugging.
Package debug provides http endpoints for healthcheck, metrics, and pprof debugging.
e2e
Package e2e provides end-to-end tests.
Package e2e provides end-to-end tests.
envoy
Package envoy contains a configuration writer for v2 YAML config.
Package envoy contains a configuration writer for v2 YAML config.
grpc
Package grpc provides a gRPC implementation of the Envoy v2 xDS API.
Package grpc provides a gRPC implementation of the Envoy v2 xDS API.
httpsvc
Package httpsvc provides a HTTP/1.x Service which is compatible with the workgroup.Group API.
Package httpsvc provides a HTTP/1.x Service which is compatible with the workgroup.Group API.
k8s
Package k8s contains helpers for setting the IngressRoute status
Package k8s contains helpers for setting the IngressRoute status
metrics
Package metrics provides Prometheus metrics for Contour.
Package metrics provides Prometheus metrics for Contour.
workgroup
Package workgroup provides a mechanism for controlling the lifetime of a set of related goroutines.
Package workgroup provides a mechanism for controlling the lifetime of a set of related goroutines.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL