Skip to content

mittwald/harbor-operator

Repository files navigation

Harbor Operator

A Kubernetes operator for automated management of Goharbor instances

GitHub license Go Doc Release

Go Report Card Go

Table of contents

Installation

The helm chart of this operator can be found in this repository under ./deploy/chart Alternatively, you can use the helm.mittwald.de chart repository:

helm repo add mittwald https://helm.mittwald.de
helm repo update
helm install harbor-operator mittwald/harbor-operator --namespace my-namespace

Architecture

  • The operator manages the deployment of goharbor/harbor instances

  • Many components / features of Harbor can be accessed by creating Custom Resource Definitons. Resource changes are reconciled in the main controller loop.

    For a full list of Harbor's features, please refer to goharbor/harbor#features

  • The operator manages Harbor components by utilizing the mittwald/goharbor-client API client

  • Customized or private Harbor helm charts are supported via the InstanceChartRepository resource

    The official Harbor Helm chart can be found here

 0
/|\ User
/ \

 |
 |      creates         ┌───────────────────────────────┐
 ├────────────────────▶ |    InstanceChartRepository    |
 |                      |       (Custom Resource)       |
 |                      └───────────────────────────────┘
 |                                             ▲
 |      creates         ┌───────────────────┐  |
 ├────────────────────▶ |      Instance     |  |
 |                      | (Custom Resource) |  |
 |                      └───────────────────┘  | watches
 |                                    ▲        |
 |                                    |        |
 |                            watches |        |
 |                                    |        |           creates & updates
 |                                  ┌─┴────────┴──────┐      (via Instance)      
 |                                  │ Harbor Operator ├──────────────────────────┐
 |                                  └─────────┬─────┬─┘                          |
 |                                            ╎     |                            |
 |                                    watches ╎     |                            |
 |                                            ╎     |                            |
 |      creates         ┌─────────────────┐   ╎     |         ┌─────────┐  ┌─────┴──────┐
 ├────────────────────▶ |     Project     ├ - ┼ - - └─────── ▶| Harbor  ├──┤   Harbor   |
 |                      |(Custom Resource)|   ╎      perform  |   API   |  |Helm Release|
 |                      └─────────────────┘   ╎      CRUD     └─────────┘  └────────────┘
 |                              ▲             ╎      via the CRs on the left
 |                              |             ╎
 |           has access through |             ╎
 |               membership     |             ╎
 |                              |             ╎
 |      creates         ┌───────┴─────────┐   ╎
 ├────────────────────▶ |      User       ├ - ┤
 |                      |(Custom Resource)|   ╎
 |                      └─────────────────┘   ╎
 |      creates         ┌─────────────────┐   ╎
 ├────────────────────▶ |    Registry     ├ - ┤
 |                      |(Custom Resource)|   ╎
 |                      └─────────────────┘   ╎
 |                              ▲             ╎
 |                              |             ╎
 |                  is owned by |             ╎
 |                              |             ╎
 |      creates         ┌───────┴─────────┐   ╎
 └────────────────────▶ |    Replication  ├ - ┘
                        |(Custom Resource)|
                        └─────────────────┘

CRDs

The following Custom Resource Definitions can be used to create / configure Harbor components:

To get an overview of the individual resources that come with this operator, take a look at the samples directory.

Documentation

For more specific documentation, please refer to the godoc of this repository.

Local Development

To start the operator locally, run:

make run

To start a debug session using delve, run:

make debug

This will start a debugging server with the listen address localhost:2345.

Local installations can be accessed via http://

When making changes to API definitions (located in ./apis/registries/v1alpha2), make sure to re-generate manifests via:

make manifests

Testing

To test the operator, simply run:

make test

This will spin up a local envtest environment and execute the provided tests.

Alternatively, you can run tests by ginkgo via:

ginkgo test ./...

Or via the go test suite:

go test -v ./...

Some unit tests require a mocked controller-runtime client. This mock is generated using: make mock-runtime-client.

Example Deployment

Note: If you want to test a local setup using an URL, you will need to append it to your /etc/hosts:

127.0.0.1 core.harbor.domain

Example resources can be deployed using the files provided in the samples directory.

To start testing, simply apply these after the operator has started:

kubectl create -f config/samples/

After a successful installation, the Harbor portal may be accessed either by localhost:30002 or core.harbor.domain:30002.