# Overview

Nautes is a Kubernetes-native all-in-one Internal Developer Platform that combines the concepts and best practices of DevOps and GitOps. It integrates the industry's best cloud-native open-source projects in a pluggable manner.

# Features

  • a Kubernetes-native all-in-one Internal Developer Platform that covers the entire process, including agile development, CI/CD, automated testing, security, and operations.
  • Following the best practices of GitOps, with the version repository as the only trusted data source. When data in the repository changes, the Operator automatically detects the changes and performs incremental updates to the Kubernetes cluster.
  • A fully distributed multi-tenant architecture, where tenants serve as distributed computing and storage units that support horizontal scaling. The resources hosted by tenants also support horizontal scaling.
  • Good adaptability, In addition to the base Kubernetes and Git, other components can be replaced.
  • All features are provided with declarative REST APIs, supporting secondary development.
  • For all integrated open-source projects, their native features are maintained without any trimmed encapsulation, ensuring that there is no secondary binding for the hosted applications.
  • By constructing a higher-level data model, unified authentication and authorization are achieved for all integrated open-source projects.
  • Supports deployment modes for private cloud and hybrid cloud.

# Architecture

Nautes adopts a fully distributed multi-tenant architecture, where the platform management cluster is responsible for tenant allocation and recovery. Each tenant has exclusive access to a set of resources, including code repositories, key repositories, artifact repositories, authentication servers, and clusters. Resources within a tenant are managed by the tenant management cluster.

Tenants serve as the unit of resource management which can be divided by users based on their organization's characteristics, such as by product teams, departments, or subsidiaries.

Resources within a tenant can also be deployed with multiple instances, for example, multiple Harbor instances can be deployed within a single tenant to isolate container image data for different products.

# Open Source Projects

The current version of Nautes mainly integrates the following open source projects (the order does not represent ranking):

We express our sincere gratitude to the authors of these outstanding projects (including all projects used in Nautes but not listed in the table below)!

SN Projects Usage Version License URL
1 Terraform For building infrastructure v1.3.4 MPL-2.0 https://github.com/hashicorp/terraform
2 Ansible The scaffold of the installation program 2.12.5 GPL-3.0 https://github.com/ansible/ansible
3 Kubespray The installation program of Kubernetes v2.19.1 Apache-2.0 https://github.com/kubernetes-sigs/kubespray
4 Ansible Vault The installation program of Vault v2.5.8 BSD-2-Clause https://github.com/ansible-community/ansible-vault
5 Geerlingguy.Gitlab The installation program of Gitlab 3.2.0 MIT https://github.com/geerlingguy/ansible-role-gitlab
6 Kubebuilder The scaffold of Operator v3.2.0 Apache-2.0 https://github.com/kubernetes-sigs/kubebuilder
7 Kratos The scaffold of Microservice v2.5.4 MIT https://github.com/go-kratos/kratos
8 Vuepress The scaffold of document site 1.9.9 MIT https://github.com/vuejs/vuepress
9 Kubernetes Container platform, product base 1.23.7 Apache-2.0 https://github.com/kubernetes/kubernetes
10 K3s Lightweight Kubernetes Distribution v1.21.13-k3s1 Apache-2.0 https://github.com/k3s-io/k3s
11 Vcluster Multi-tenancy isolation for Kubernetes 0.10.1 Apache-2.0 https://github.com/loft-sh/vcluster
12 HNC Multi-tenancy isolation for Kubernetes v1.0.0 Apache-2.0 https://github.com/kubernetes-sigs/hierarchical-namespaces
13 Dex For SSO and unified authentication v2.32.0 Apache-2.0 https://github.com/dexidp/dex
14 Vault Secret repository 1.10.4 MPL-2.0 https://github.com/hashicorp/vault
15 External Secrets For synchronizing secrets to Kubernetes 0.5.7 Apache-2.0 https://github.com/external-secrets/external-secrets
16 Gitlab Code repository, IDP, and base-data provider 15.10 MIT https://gitlab.com/gitlab-org/gitlab
17 Nexus Package repository 3.39.0 EPL-1.0 https://github.com/sonatype/nexus-public
18 Harbor Container image repository v2.5.1 Apache-2.0 https://github.com/goharbor/harbor
19 Argocd For continuous deployment v2.4.0 Apache-2.0 https://github.com/argoproj/argo-cd
20 Argorollouts For progressive delivery. v1.2.1 Apache-2.0 https://github.com/argoproj/argo-rollouts
21 Argoevents Event listener v1.7.1 Apache-2.0 https://github.com/argoproj/argo-events
22 Tekton Pipeline Continuous Integration Pipeline v0.37.0 Apache-2.0 https://github.com/tektoncd/pipeline
23 Cert Manager For self-signed certificate v1.8.0 Apache-2.0 https://github.com/cert-manager/cert-manager
24 Traefik Ingress Controller v2.7.1 MIT https://github.com/traefik/traefik
25 Sonarqube For static code analysis 9.5 LGPL-3.0 https://github.com/SonarSource/sonarqube

# Entity Definition

  • Product: Corresponds to a software system, which includes teams, projects, environments, code repositories, artifact repositories, and runtimes. The tenant manager can authorize the product to use designated Kubernetes clusters.
  • Project: Corresponds to a microservice, and each project has its own code repositories. You can integrate and deploy projects using Kubernetes clusters, and store versioned artifacts in artifact repositories. A product can contain multiple projects.
  • Environment: A management unit that uses a cluster to host the integration and deployment of various microservices in the product. Currently, we only support the Kubernetes cluster type. A product contains multiple environments, such as development, testing, pre-production, and production environments.
  • Code Repository: A repository used for storing a project's source code, pipeline configurations, or deployment manifests. Only Git is supported.
  • Pipeline Runtime: The configuration declaration of a pipeline used to integrate projects, such as the storage location of pipeline configurations, the pipeline's triggering method and the target environment for running the pipeline, etc.
  • Deployment Runtime: The configuration declaration used to deploy projects, such as the storage location of deployment manifests and the target environment to deploy to, etc.