Documentation
Introduction
Configuration
- HTTPProxy Fundamentals
- Virtual Hosts
- Inclusion and Delegation
- TLS Termination
- Upstream TLS
- Request Routing
- External Service Routing
- Request Rewriting
- CORS
- Websockets
- Upstream Health Checks
- Client Authorization
- TLS Delegation
- Rate Limiting
- Annotations Reference
- API Reference
Deployment
- Deployment Options
- Contour Configuration
- Upgrading Contour
- Enabling TLS between Envoy and Contour
- Redeploy Envoy
Guides
- AWS with NLB
- Cert-Manager
- External Authorization
- JSON logging
- Migrating to HTTPProxy
- Prometheus Metrics
- PROXY Protocol Support
- Resource Limits
Troubleshooting
- Envoy Administration Access
- Contour Debug Logging
- Envoy Debug Logging
- Visualize the Contour Graph
- Show Contour xDS Resources
- Profiling Contour
- Contour Operator
Resources
- Support Policy
- Compatibility Matrix
- Contour Deprecation Policy
- Release Process
- Frequently Asked Questions
- Tagging
Contribute
Operator Troubleshooting
Contour Operator runs in a Kubernetes cluster and is managed by a Deployment resource. The following steps can be used to verify and troubleshoot the operator:
Verify the operator deployment is available:
$ kubectl get deploy/contour-operator -n contour-operator
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
contour-operator   1/1     1            1           39m
Check the logs of the operator:
$ kubectl logs deploy/contour-operator -n contour-operator -c contour-operator -f
2020-12-01T00:10:14.245Z	INFO	controller-runtime.metrics	metrics server is starting to listen	{"addr": "127.0.0.1:8080"}
2020-12-01T00:10:14.341Z	INFO	setup	starting contour-operator
I1201 00:10:14.343439       1 leaderelection.go:243] attempting to acquire leader lease  contour-operator/0d879e31.projectcontour.io...
2020-12-01T00:10:14.345Z	INFO	controller-runtime.manager	starting metrics server	{"path": "/metrics"}
I1201 00:10:14.442755       1 leaderelection.go:253] successfully acquired lease contour-operator/0d879e31.projectcontour.io
2020-12-01T00:10:14.447Z	INFO	controller	Starting EventSource	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "source": "kind source: /, Kind="}
2020-12-01T00:10:14.540Z	DEBUG	controller-runtime.manager.events	Normal	{"object": {"kind":"ConfigMap","namespace":"contour-operator","name":"0d879e31.projectcontour.io","uid":"40ebcf47-a105-4efc-b7e9-993df2070a07","apiVersion":"v1","resourceVersion":"33899"}, "reason": "LeaderElection", "message": "contour-operator-55d6c7b4b5-hkd78_e960056c-f959-45c9-8686-9b85e09e21d8 became leader"}
2020-12-01T00:10:14.842Z	INFO	controller	Starting EventSource	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "source": "kind source: /, Kind="}
2020-12-01T00:10:15.046Z	INFO	controller	Starting EventSource	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "source": "kind source: /, Kind="}
2020-12-01T00:10:15.340Z	INFO	controller	Starting Controller	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour"}
2020-12-01T00:10:15.341Z	INFO	controller	Starting workers	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "worker count": 1}
...
When a Contour is created, the operator should successfully reconcile the object:
...
2020-12-01T00:10:15.341Z	INFO	controllers.Contour	reconciling	{"request": "default/contour-sample"}
...
2020-12-01T00:10:15.442Z	DEBUG	controller	Successfully Reconciled	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "name": "contour-sample", "namespace": "default"}
Check the status of your Contour resource:
$ kubectl get contour/contour-sample -o yaml
apiVersion: operator.projectcontour.io/v1alpha1
kind: Contour
metadata:
  name: contour-sample
  namespace: default
...
status:
  availableContours: 2
  availableEnvoys: 1
  conditions:
  - lastTransitionTime: "2020-12-01T00:55:38Z"
    message: Contour has minimum availability.
    reason: ContourAvailable
    status: "True"
    type: Available
If the Contour does not become available, check the status of operands.
$ kubectl get po -n projectcontour
NAME                       READY   STATUS      RESTARTS   AGE
contour-7649c6f6cc-9hxn9   1/1     Running     0          6m18s
contour-7649c6f6cc-sb4nn   1/1     Running     0          6m18s
contour-certgen-vcsqd      0/1     Completed   0          6m18s
envoy-qshxf                2/2     Running     0          6m18s
Check the logs of the operands. The following example checks the logs of the contour deployment operand:
$ kubectl logs deploy/contour -n projectcontour -c contour -f
2020-12-01T00:10:14.245Z	INFO	controller-runtime.metrics	metrics server is starting to listen	{"addr": "127.0.0.1:8080"}
2020-12-01T00:10:14.341Z	INFO	setup	starting contour-operator
I1201 00:10:14.343439       1 leaderelection.go:243] attempting to acquire leader lease  contour-operator/0d879e31.projectcontour.io...
2020-12-01T00:10:14.345Z	INFO	controller-runtime.manager	starting metrics server	{"path": "/metrics"}
I1201 00:10:14.442755       1 leaderelection.go:253] successfully acquired lease contour-operator/0d879e31.projectcontour.io
2020-12-01T00:10:14.447Z	INFO	controller	Starting EventSource	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "source": "kind source: /, Kind="}
2020-12-01T00:10:14.540Z	DEBUG	controller-runtime.manager.events	Normal	{"object": {"kind":"ConfigMap","namespace":"contour-operator","name":"0d879e31.projectcontour.io","uid":"40ebcf47-a105-4efc-b7e9-993df2070a07","apiVersion":"v1","resourceVersion":"33899"}, "reason": "LeaderElection", "message": "contour-operator-55d6c7b4b5-hkd78_e960056c-f959-45c9-8686-9b85e09e21d8 became leader"}
2020-12-01T00:10:14.842Z	INFO	controller	Starting EventSource	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "source": "kind source: /, Kind="}
2020-12-01T00:10:15.046Z	INFO	controller	Starting EventSource	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "source": "kind source: /, Kind="}
2020-12-01T00:10:15.340Z	INFO	controller	Starting Controller	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour"}
2020-12-01T00:10:15.341Z	INFO	controller	Starting workers	{"reconcilerGroup": "operator.projectcontour.io", "reconcilerKind": "Contour", "controller": "contour", "worker count": 1}
...
Note: projectcontour is the default namespace used by operands of a Contour
when spec.namespace.name is unspecified.
 Twitter
Twitter Slack
Slack