Giter Club home page Giter Club logo

contour-operator's People

Contributors

amdonov avatar bostjanbozic avatar danehans avatar dependabot[bot] avatar dprotaso avatar erismaster avatar javsalgar avatar jpeach avatar nak3 avatar skriss avatar stevesloka avatar sunjaybhatia avatar tsaarni avatar vchrisb avatar youngnick avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

contour-operator's Issues

contour/envoy container images should come from CRD

The image version that is used for Contour/Envoy are taken from an command line arg to the operator, but the operator should be able to derive the information from the Contour-Operator CRD such than different instance of Contour can run their own version requested via the CRD.

Originally posted by @danehans in #44 (comment)

Incorporate projectcontour/contour-operator in to the Contour release process

We would like to incorporate contour-operator into the Contour release process.

Goals:

  • Enable us to make a new projectcontour/contour-operator release shortly after, or in tandem with, each new projectcontour/contour release.
  • Keep projectcontour/contour and projectcontour/contour-operator releases in sync as much as possible.
  • Automate the contour-operator release process.

To this end, we propose the following changes:

  • Define a GitHub action that triggers on each new projectcontour/contour release. This action would open a PR in projectcontour/contour-operator to update config/manager/kustomization.yaml to reference the new Contour image. CI would then automatically verify contour-operator with the new Contour release. The PR description could include instructions for reviewing the PR and completing the projectcontour/contour-operator release.

  • Update the Contour release process with an additional/follow-up step to do a manual review of the automatically created PR. If the PR is passing tests with the new Contour release and there are no outstanding issues in projectcontour/contour-operator, a maintainer would merge the PR and follow the instructions in the PR's description to create and push a tag, which would produce a new contour-operator release.

This would be very nice to have for v1alpha1, but it is more a stretch goal than a blocking issue.


As a long-term goal once contour-operator is more mature, it would make sense to use projectcontour/contour-operator to set up Contour in projectcontour/contour CI jobs, but we can track that as a separate issue.


@jpeach, @stevesloka, does this approach seem feasible to you?

Add PR action to run tests

Please describe the problem you have

Add a PR-scoped Github Action to run unit tests and kubebuilder integration tests.

Add Proxy Protocol Support

Please describe the problem you have
Currently, the Envoy Service is annotated with "service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp" that places the AWS ELB in TCP mode. This causes the ELB to masquerade the client IP. Adding proxy protocol support will allow the client IP to be preserved for ELB'd connections.

Another approach is to use AWS NLB instead of ELB since NLB natively preserves client IPs.

/cc @jpeach @stevesloka @michmike

xref: examples/contour/02-service-envoy

Decision: Versioning schema for API and software/image releases

As part of this project, we need to agree on the versioning schema both for the API objects and the software.

I propose initially:

  • API versioning uses the Kubernetes versioning standards. This doesn't seem controversial, but writing it down here seems like a net win.
  • Software versioning uses semver? Seems like that would make the most sense, given that's what mainline Contour does. A question I would have for everyone in this case is - do we have the operator version match the Contour version? I can see pros and cons there, but I don't want to prejudice the discussion too much.

Improve Namespace Support

Please describe the problem you have

  • As a cluster admin, I need the ability to run multiple instances of Contour in the same namespace.
  • As a cluster admin, I need the ability to run Contour in a namespace other than "projectcontour".

See this Slack thread of additional background.

Incorrect Contour Deployment Debug Port Name

What steps did you take and what happened:
xref: projectcontour/contour#3058. The port name should be metrics instead of debug:

...
time="2020-10-23T18:38:20Z" level=info msg="started HTTP server" address="0.0.0.0:8000" context=metricsvc
time="2020-10-23T18:38:20Z" level=info msg="started HTTP server" address="127.0.0.1:6060" context=debugsvc

Certgen Job Cleanup

Please describe the problem you have
Should the completed pods of the certgen Job be cleaned-up? For example, the completed pods can pile-up:

$ kubectl get po -n projectcontour
NAME                       READY   STATUS        RESTARTS   AGE
contour-57688bcf46-lzr8l   1/1     Running       0          36s
contour-57688bcf46-nrlhn   1/1     Running       0          36s
contour-certgen-7qh79      0/1     Completed     0          119m
contour-certgen-9bkg2      0/1     Completed     0          18h
contour-certgen-9fjwq      0/1     Completed     0          149m
contour-certgen-b28sx      0/1     Completed     0          109m
contour-certgen-gqhcm      0/1     Completed     0          36s
contour-certgen-gwj9z      0/1     Completed     0          25m
contour-certgen-ldbw5      0/1     Completed     0          114m
envoy-x8xbs                0/2     Pending       0          36s

The pods do provide some potentially valuable history:

$ kubectl logs contour-certgen-7qh79 -n projectcontour
Writing "compact" format Secrets to namespace "projectcontour"
secret/contourcert updated
secret/envoycert updated

xref: #36
xref: #34

/cc @jpeach @Miciah

Add Equality Comparison for RBAC Resources

Please describe the problem you have
Currently, RBAC resources are not being compared for equality. For example, a user can change a policy rule for the contour ClusterRole and the operator will not update the ClusterRole to the desired state.

Create Image Repo

Please describe the problem you have
As I work on contour-operator, I’ve been pushing the image to my own repo. An image repo should be created in the Docker Hub projectcontour org for this project.

/assign @jpeach

Configurable Certificate Generation

Please describe the problem you have
Currently, the contour-certgen is responsible for generating certificates used to secure Contour<>Envoy communication. Cert generation should be configurable, providing options for cert-gen, cert-manager, and contour-operator generated certs.

Additional Considerations:

  • Most clusters don't have the necessary feature gate turned on, so the operator could delete the certgen job if it is successful.
  • The operator generates certs and stores them in a secret that is referenced by contour/envoy
  • Expose cert generation through the Contour API.
  • Should the operator run contour certgen binary?

xref: #31

/cc @jpeach @stevesloka @Miciah

Remove endpoint RBAC

What steps did you take and what happened:

The operator doesn't manage endpoints so we can remove those from the RBAC config.

Restrict Contour by Namespace

Please describe the problem you have
Currently a Contour resource can be created in any namespace desired by a user with cluster credentials. A Contour is meant to be a resource exposed to cluster administrators and should be restricted. This issue proposes restricting Contour CRUD operations to the same namespace as the operator (i.e. contour-operator).

/cc @jpeach @stevesloka @Miciah

Update ensure funcs to compare/update resources.

Please describe the problem you have
Currently ensureFoo() funcs simply skip updating a resource if it exists. These funcs should compare the found resource to the desired resource and update said resource if current != desired.

Switch over to cobra

cobra is widely used and familiar, generally good enough, and has support for subcommands, generating docs, and other useful features. Let's use cobra for the command-line parsing and so-on (contour-authserver could be an example).

Update copyright headers and boilerplate.

We should update the copyright headers and boilerplate to match the standard Contour one:

// Copyright Project Contour Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

Status Subresource

Please describe the problem you have
Enable the status subresource for the contour API:

// +kubebuilder:subresource:status

Add Operator to Contour Docs Site

Please describe the problem you have
projectcontour.io is the home to Contour's official documentation. These docs should be updated to include the operator.

  • Operator installation, including any CRDs (if needed). Should the operator be an option in the Getting Started section?
  • Deploy an instance of Contour. Should the operator be an option in the Deployment Options section? Note: The uninstall step should include deleting ns/contour-operator when using the operator.
  • Contour configuration reference. Similar to Contour's config reference.
  • Update the supported versions matrix to include the operator.
  • Upgrades- Add content to this or this. Note: Contour will not support upgrades for the v1alpha1 release.
  • Generate Contour API reference similar to Contour's API reference docs.
  • Update the troubleshooting guide with steps on how to troubleshoot the operator.
  • Does the release process doc need to be updated with operator-specific steps/section?
  • Update the contributing guide with steps on how to contribute.

/cc @stevesloka @jpeach @Miciah

Make Envoy HTTP/HTTPS Listener Ports Configurable

Please describe the problem you have
Envoy containers are statically configured to listen on 80 for http and 443 for https. These ports should be configurable through a Contour resource to provide deployment flexibility. For example, a cluster may have other apps using these common port numbers.

Notes:

  • Contour needs to consume these ports for it's --envoy-service-http-port and --envoy-service-https-port config.
  • The Envoy service needs to reference the port definitions to configure the targetPort.
  • Default to existing 80/443 port definitions.

Add helper API to derive the owned resource names

Please describe the problem you have

Currently, the operator derives the names of the resources needed for a specific contour from a mixture of constants. Adding a single struct to capture all the names and an API to generate this struct from a Contour spec would make the code easier to follow and simplify how resources are created and tracked.

xref #18

Create an Equality Package

Please describe the problem you have
Currently Contour equality is being duplicated across managed dependent resources. Create a pkg that performs the equality matching that can be leveraged across the project.

Add Certgen Support

Please describe the problem you have
Add support for managing Contour certgen through a Job resource.

Validate Image Flags

Please describe the problem you have
The value of the --image flag is currently accepted as an opaque string. The image value should be validated according to the Docker reference type. The same should be accomplished for all image references.

/cc @jpeach

Add linter configuration.

Please describe the problem you have

Add a golangci-lint configuration to make it easier for contributors to match Go style. This reduces the number of nits that need to be addressed in code review.

Support Pluralized xDS Version in Contour Config

Please describe the problem you have
When projectcontour/contour#3047 is fixed (targeting v1.11), xds-server-version will become xds-server-versions. Update the configmap to support the pluralization with "v2" being the default and "v3" being a conditional option. Example:

server:
    xds-server-type: contour
    xds-server-versions:     # <--- change to "versions"
    - v2                               # <--- any in the list will be served
    - v3

Support the /scale subresource

The contour CRD should define the /scale subresource to enable the use of tools such as kubectl scale and HPA with contour CRs.

The CRD needs to provide the following information under its status field:

  • Label selector for the scalable resource (Contour pods).
  • Number of available replicas.

/scale therefore depends on the /status subresource (xref: #60).

The CRD also needs to provide the following under its spec field:

  • Number of desired replicas.

Once this information is available, the CRD can define the /status subresource as follows:

    subresources:
      scale:
        labelSelectorPath: .status.selector
        specReplicasPath: .spec.replicas
        statusReplicasPath: .status.contourReplicasAvailable

Post-v1alpha1.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.