|
| 1 | +--- |
| 2 | +title: Requirements for container registry |
| 3 | +type: Decision Record |
| 4 | +status: Draft |
| 5 | +track: KaaS |
| 6 | +--- |
| 7 | + |
| 8 | +# Introduction |
| 9 | + |
| 10 | +A container registry is a repository or collection of repositories used to store and |
| 11 | +access container images. Container registries are used by the teams to store the |
| 12 | +results of build processes and to maintain freely available images. They're acting as |
| 13 | +the intermediary for sharing container images between systems. They could be connected |
| 14 | +directly to the container orchestration platforms like Docker and Kubernetes. |
| 15 | + |
| 16 | +There are 2 types of container registries: public and private. Public registries are |
| 17 | +commonly used by individuals and smaller teams. However, once teams begin to scale up, |
| 18 | +this can bring more complex security issues, e.g. privacy, and access control. |
| 19 | +A private container registry often comes with security scanning capabilities, |
| 20 | +role-based access control, and advanced management. These private registries could be |
| 21 | +either hosted remotely or on-premises. |
| 22 | + |
| 23 | +# Motivation |
| 24 | + |
| 25 | +Our motivation is that there are use cases, where cloud service providers (CSP) would |
| 26 | +like to be able to offer customers to store and access their container images using |
| 27 | +the SCS-compliant private container registry. The specific use cases should be discussed, |
| 28 | +but overall the CSPs could offer a private container registry as a service or the CSPs |
| 29 | +could offer a recipe for customers to deploy the private registry themselves utilizing |
| 30 | +the CSP infrastructure. In both cases, the private container registry should be |
| 31 | +SCS-compliant and should fulfill a set of needed requirements e.g. for security and |
| 32 | +privacy. |
| 33 | + |
| 34 | +The idea here and the purpose of this document is to specify what requirements a |
| 35 | +specific technical container registry implementation (i.e. software solution) needs to |
| 36 | +fulfill in the context of SCS. |
| 37 | + |
| 38 | +The purpose of this document is also to select an appropriate container registry |
| 39 | +implementation that meets all defined requirements and makes an architectural |
| 40 | +decision on what implementation is fully SCS-compliant and recommended by the SCS. |
| 41 | + |
| 42 | +# Design considerations |
| 43 | + |
| 44 | +There are numerous features to look for when evaluating a container registry solution. |
| 45 | +Our decision process goes through two main stages. |
| 46 | + |
| 47 | +1. [OSS health check](#oss-health-check) |
| 48 | +2. [Required and desirable features check](#required-and-desirable-features-check) |
| 49 | + |
| 50 | +The open-source software (OSS) health check does the first filter stage. This stage is |
| 51 | +crucial in the context of SCS and container registry implementation should pass it to |
| 52 | +promote itself to the second consideration stage. The second stage does an overview over |
| 53 | +the feature set of open source container registry implementations and map out |
| 54 | +requirements (and nice-to-haves) against it to have a well-documented decision. |
| 55 | + |
| 56 | +Note: Keep in mind that at the time of writing this document, we’ve made our best effort |
| 57 | + to survey the container registry landscape based on publicly available materials. |
| 58 | + If you find something outdated (with respect to the time of writing this document) or |
| 59 | + outright erroneous, please submit a PR or raise an issue, and we’ll fix it right away. |
| 60 | + |
| 61 | +## OSS health check |
| 62 | + |
| 63 | +This section evaluates the health of the open-source projects that were selected from |
| 64 | +the currently available solutions. SCS-compliant software must fulfill all OSS health |
| 65 | +checks defined by the [OSS-Health](https://github.com/SovereignCloudStack/standards/blob/main/Design-Docs/OSS-Health.md) |
| 66 | +document. The main health checks are: |
| 67 | +- Four Opens (code is fully open source, community is open and diverse, development |
| 68 | + process is open, design process is open) |
| 69 | +- Maturity |
| 70 | +- Security |
| 71 | +- Activity |
| 72 | +- Lock-in risk assessment |
| 73 | + |
| 74 | +Each selected OSS project is evaluated based on the above checks, and it is classified |
| 75 | +to one of three categories as follows: |
| 76 | + |
| 77 | +- :heavy_check_mark: The project passed all OSS health checks and will be considered |
| 78 | + further as a valid candidate. |
| 79 | + |
| 80 | +- :grey_question: The project passed almost all OSS health checks. |
| 81 | + There is a place for improvement, but the missing points are not crucial from the OSS |
| 82 | + health check perspective. The project will be considered further as a valid candidate. |
| 83 | + |
| 84 | +- :x: The project does not pass the OSS health checks. Some OSS health check |
| 85 | + showstoppers have been found (e.g. open core software, not actively maintained). |
| 86 | + The project is filtered at this stage and won't be considered further. |
| 87 | + |
| 88 | +Refer to the list of evaluated projects with their classified categories and comments. |
| 89 | + |
| 90 | +- :heavy_check_mark: [Harbor][harbor] |
| 91 | + - Harbor project meets all "four opens" |
| 92 | + - Source code is open and available under the [Apache 2 license](https://github.com/goharbor/harbor/blob/main/LICENSE) |
| 93 | + - Community is [open](https://github.com/goharbor/harbor#community, structured and |
| 94 | + well organized via [workgroups](https://github.com/goharbor/community) and |
| 95 | + various communications channels e.g. Slack, mailing lists, etc. |
| 96 | + (#harbor Slack channel contains 3k+ members) |
| 97 | + - The development process is open via GitHub issues and well described in the |
| 98 | + [contributing](https://github.com/goharbor/harbor/blob/main/CONTRIBUTING.md) |
| 99 | + document |
| 100 | + - The design process is open via GitHub issues. Proposals are [public](https://github.com/goharbor/community/tree/main/proposals). |
| 101 | + The decision process is well described as well. The project's roadmap is |
| 102 | + available in the [roadmap](https://github.com/goharbor/harbor/blob/main/ROADMAP.md) document |
| 103 | + - Maturity is on the CNCF [graduation](https://www.cncf.io/projects/harbor/) level. |
| 104 | + CNCF graduated project is considered stable, widely adopted and production-ready |
| 105 | + - Security |
| 106 | + - The security disclosure and response policy is well described in the project's |
| 107 | + [security](https://github.com/goharbor/harbor/blob/main/SECURITY.md) document |
| 108 | + - The code is reviewed within a standard PR process |
| 109 | + - Activity |
| 110 | + - 250+ contributors, 4k+ forks, 13k+ GitHub stars |
| 111 | + - The project has been [adopted](https://github.com/goharbor/harbor/blob/main/ADOPTERS.md) |
| 112 | + by many companies that run Harbor in their production environments |
| 113 | + - The project collaborates with other communities and projects |
| 114 | + (see [Partners of Harbor](https://goharbor.io/community/) section of the |
| 115 | + project's website) |
| 116 | + - The project is visible and actively contributes to various conferences, e.g. |
| 117 | + [FOSDEM 22](https://goharbor.io/blog/harbor-at-fosdem-2022/), |
| 118 | + [KubeCon Europe](https://www.youtube.com/watch?v=MGNtPHQYP14), etc. |
| 119 | + - Lock-in risk assessment |
| 120 | + - The project's [maintainers](https://github.com/goharbor/community/blob/main/MAINTAINERS.md) |
| 121 | + document shows that there are a sufficient number of core |
| 122 | + maintainers/contributors that differ over various companies, therefore the single |
| 123 | + point of failure is not a case here |
| 124 | + |
| 125 | +- :heavy_check_mark: [Dragonfly][dragonfly] |
| 126 | + - Dragonfly project meets all "four opens" |
| 127 | + - Source code is open and available under the [Apache 2 license](https://github.com/dragonflyoss/Dragonfly2/blob/main/LICENSE) |
| 128 | + - Community is [open](https://github.com/dragonflyoss/Dragonfly2#community) |
| 129 | + organized via multiple channels e.g. Slack, mailing lists, etc. |
| 130 | + (#dragonfly Slack channel contains ~50 members) |
| 131 | + - The development process is open via GitHub issues and well described in the |
| 132 | + [contributing](https://github.com/dragonflyoss/Dragonfly2/blob/main/CONTRIBUTING.md) document |
| 133 | + - The design process is open via GitHub issues. The project's roadmap is available in |
| 134 | + the project's [webpage](https://d7y.io/docs/others/roadmap/#2022-roadmap) |
| 135 | + - Maturity is on the CNCF [incubating](https://www.cncf.io/projects/dragonfly/) level |
| 136 | + CNCF incubating project is considered stable and used in production by users with |
| 137 | + the healthy pool of contributors |
| 138 | + - Security |
| 139 | + - The security disclosure is handled via a dedicated email address |
| 140 | + - The code is reviewed within a standard PR process |
| 141 | + - Activity |
| 142 | + - 30+ contributors, 100+ forks, 1k+ GitHub stars |
| 143 | + - The project has been [adopted](https://github.com/dragonflyoss/Dragonfly2/blob/main/ADOPTERS.md) |
| 144 | + by many companies that run Harbor in their production environments |
| 145 | + - The project is visible and actively contributes to various conferences, |
| 146 | + e.g. [KubeCon North America](https://www.youtube.com/watch?v=LcxBgmmeA80), |
| 147 | + [KubeCon Europe](https://www.youtube.com/watch?v=MGNtPHQYP14), etc. |
| 148 | + - Lock-in risk assessment |
| 149 | + - The list of the project's [maintainers](https://github.com/dragonflyoss/Dragonfly2/blob/main/MAINTAINERS.md |
| 150 | + includes contributors from various companies and the [companies contributing dashboard](https://dragonfly.devstats.cncf.io/d/7/companies-contributing-in-repository-groups) |
| 151 | + shows that ~10 companies are actively contributing to a repository group |
| 152 | + |
| 153 | +- :grey_question: [Project Quay][projectquay] |
| 154 | + - Project Quay meets all "four opens" |
| 155 | + - Source code is open and available under the [Apache 2 license](https://github.com/quay/quay/blob/master/LICENSE) |
| 156 | + - Community is [open](https://github.com/quay/quay#community) organized via mailing |
| 157 | + list and IRC |
| 158 | + - Development process is open via [JBoss JIRA](https://issues.redhat.com/projects/PROJQUAY/issues) |
| 159 | + issues and well described in the [governance](https://github.com/quay/quay/blob/master/GOVERNANCE.md) document |
| 160 | + - Design process is open via [JBoss JIRA](https://issues.redhat.com/projects/PROJQUAY/issues) |
| 161 | + issues. The project's roadmap is available on the project's [webpage](https://www.projectquay.io/#contribute) |
| 162 | + - Maturity |
| 163 | + - Project Quay is an open-source project that starts [~9 years ago](https://github.com/quay/quay/commit/0349af754204375d74ac5833713b607398981ff7). |
| 164 | + It powers Red Hat enterprise products Red Hat Quay and Quay.io, which are used in |
| 165 | + a productive way by many. Therefore, the project's maturity is at the good level |
| 166 | + - Security |
| 167 | + - The security disclosure is handled via a dedicated email address |
| 168 | + - The code is reviewed within a standard PR process |
| 169 | + - Activity |
| 170 | + - 50+ contributors, 200+ forks, 2k+ GitHub stars |
| 171 | + - The project has been used by many [companies](https://www.projectquay.io) that |
| 172 | + run Quay in their production environments |
| 173 | + - Lock-in risk assessment |
| 174 | + - The project's owners/maintainers list is not publicly available and is stored in |
| 175 | + the [downstream repository](https://github.com/quay/quay-docs#how-do-i-set-up). |
| 176 | + Therefore, it is hard to distinguish the risk of project failure caused by low |
| 177 | + diversity across the companies. This should be improved |
| 178 | + |
| 179 | +- :x: [Keppel](https://github.com/sapcc/keppel) |
| 180 | + - The project seems to be not widely used in a productive way and also the activity |
| 181 | + around is currently not on a good level (5+ contributors). The development |
| 182 | + process as well as the design process seem to be open, but not documented yet |
| 183 | + |
| 184 | +- :x: [Nexus](https://github.com/sonatype/nexus-public) |
| 185 | + - Nexus is an **open core** software that offers paid [pro version](https://www.sonatype.com/products/repository-oss-vs-pro-features) with advanced features |
| 186 | + |
| 187 | +- :x: [JFrog](https://jfrog.com/community/open-source/) |
| 188 | + - JFrog Artifactory is shipped as an **open core** [software](https://jfrog.com/community/open-source/) |
| 189 | + with limited features. The software is primarily offered as a paid [pro version](https://jfrog.com/pricing/#devops-onprem) |
| 190 | + |
| 191 | +- :x: [Kraken](https://github.com/uber/kraken) |
| 192 | + - It seems that the project is not actively maintained as is discussed in the related |
| 193 | + project's [issue](https://github.com/uber/kraken/issues/313) |
| 194 | + |
| 195 | +- :x: [Portus](https://github.com/SUSE/Portus) |
| 196 | + - It seems that the project is not actively maintained as is discussed in the related |
| 197 | + project's [issue](https://github.com/SUSE/Portus/issues/2352) |
| 198 | + |
| 199 | +## Required and desirable features check |
| 200 | + |
| 201 | +This section does an overview of the feature set of open source container registry |
| 202 | +implementations (which passed the OSS health stage above) and map out requirements |
| 203 | +(and nice-to-haves) against it. SCS-compliant software must be robust enough, to be able |
| 204 | +to operate under heavy load (e.g. high availability (HA) mode, federation, etc.) and |
| 205 | +the crucial feature is security. |
| 206 | +We defined a set of required features that the container registry implementation must |
| 207 | +have and also a set of desirable (nice to have) features are defined and evaluated here. |
| 208 | + |
| 209 | + |
| 210 | +**Required features** |
| 211 | + |
| 212 | +TODO |
| 213 | + |
| 214 | +## Conclusion |
| 215 | + |
| 216 | +A wide range of open-source container registry projects (Quay, Harbor, Dragonfly, |
| 217 | +Keppel, Portus, Kraken, etc.) has been carefully evaluated based on the two main |
| 218 | +factors that reviewed their open-source health as well as their range of supported |
| 219 | +features. |
| 220 | + |
| 221 | +TODO |
| 222 | + |
| 223 | +# Decision |
| 224 | + |
| 225 | +_Decision_ |
| 226 | + |
| 227 | + |
| 228 | +<!-- Frequently used references --> |
| 229 | + |
| 230 | +[harbor]: https://github.com/goharbor/harbor |
| 231 | +[dragonfly]: https://github.com/dragonflyoss/Dragonfly2 |
| 232 | +[projectquay]: https://github.com/quay/quay |
0 commit comments