Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1893741d78
|
||
|
|
000f65045e
|
||
|
|
556ef904b2
|
||
|
|
322800e4af
|
||
|
|
4a7c066777
|
||
|
|
e5cca09d32 | ||
|
|
e15cf6ee14
|
||
|
|
9c5544495e | ||
|
|
ef5168d379
|
||
|
|
6d08b8db8b | ||
|
|
8a568f7af7
|
||
|
|
c17634828f | ||
|
|
e9ea7792d8
|
||
|
|
c9322a9adc
|
||
|
|
f8bfa9141e
|
@@ -15,14 +15,14 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
generate-parameters:
|
generate-parameters:
|
||||||
container:
|
container:
|
||||||
image: docker.io/library/node:26.1.0-alpine
|
image: docker.io/library/node:26.3.0-alpine
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Install tooling
|
- name: Install tooling
|
||||||
run: |
|
run: |
|
||||||
apk update
|
apk update
|
||||||
apk add git npm
|
apk add git npm
|
||||||
- uses: actions/checkout@v6.0.2
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
- name: Generate parameter section in README
|
- name: Generate parameter section in README
|
||||||
run: |
|
run: |
|
||||||
npm install
|
npm install
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ jobs:
|
|||||||
helm-lint:
|
helm-lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6.0.2
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
- uses: azure/setup-helm@v5.0.0
|
- uses: azure/setup-helm@dda3372f752e03dde6b3237bc9431cdc2f7a02a2 # v5.0.0
|
||||||
with:
|
with:
|
||||||
version: v4.1.4 # renovate: datasource=github-releases depName=helm/helm
|
version: v4.1.4 # renovate: datasource=github-releases depName=helm/helm
|
||||||
- name: Lint helm files
|
- name: Lint helm files
|
||||||
@@ -25,8 +25,8 @@ jobs:
|
|||||||
helm-unittest:
|
helm-unittest:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6.0.2
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
- uses: azure/setup-helm@v5.0.0
|
- uses: azure/setup-helm@dda3372f752e03dde6b3237bc9431cdc2f7a02a2 # v5.0.0
|
||||||
with:
|
with:
|
||||||
version: v4.1.4 # renovate: datasource=github-releases depName=helm/helm
|
version: v4.1.4 # renovate: datasource=github-releases depName=helm/helm
|
||||||
- env:
|
- env:
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
markdown-link-checker:
|
markdown-link-checker:
|
||||||
container:
|
container:
|
||||||
image: docker.io/library/node:26.1.0-alpine
|
image: docker.io/library/node:26.3.0-alpine
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Install tooling
|
- name: Install tooling
|
||||||
run: |
|
run: |
|
||||||
apk update
|
apk update
|
||||||
apk add git npm
|
apk add git npm
|
||||||
- uses: actions/checkout@v6.0.2
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
- name: Verify links in markdown files
|
- name: Verify links in markdown files
|
||||||
run: |
|
run: |
|
||||||
npm install
|
npm install
|
||||||
@@ -30,14 +30,14 @@ jobs:
|
|||||||
|
|
||||||
markdown-lint:
|
markdown-lint:
|
||||||
container:
|
container:
|
||||||
image: docker.io/library/node:26.1.0-alpine
|
image: docker.io/library/node:26.3.0-alpine
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Install tooling
|
- name: Install tooling
|
||||||
run: |
|
run: |
|
||||||
apk update
|
apk update
|
||||||
apk add git
|
apk add git
|
||||||
- uses: actions/checkout@v6.0.2
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
- name: Lint markdown files
|
- name: Lint markdown files
|
||||||
run: |
|
run: |
|
||||||
npm install
|
npm install
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
apk update
|
apk update
|
||||||
apk add git npm jq yq
|
apk add git npm jq yq
|
||||||
|
|
||||||
- uses: actions/checkout@v6.0.2
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"yaml.schemas": {
|
"yaml.schemas": {
|
||||||
"https://raw.githubusercontent.com/helm-unittest/helm-unittest/v1.1.0/schema/helm-testsuite.json": [
|
"https://raw.githubusercontent.com/helm-unittest/helm-unittest/v1.1.1/schema/helm-testsuite.json": [
|
||||||
"/unittests/**/*.yaml"
|
"/unittests/**/*.yaml"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
# CONTAINER_RUNTIME
|
# CONTAINER_RUNTIME
|
||||||
CONTAINER_RUNTIME?=$(shell which podman)
|
CONTAINER_RUNTIME?=$(shell which podman)
|
||||||
|
|
||||||
# HELM_IMAGE
|
|
||||||
HELM_IMAGE_REGISTRY_HOST?=docker.io
|
|
||||||
HELM_IMAGE_REPOSITORY?=volkerraschek/helm
|
|
||||||
HELM_IMAGE_VERSION?=3.19.0 # renovate: datasource=docker registryUrl=https://docker.io depName=docker.io/volkerraschek/helm
|
|
||||||
HELM_IMAGE_FULLY_QUALIFIED=${HELM_IMAGE_REGISTRY_HOST}/${HELM_IMAGE_REPOSITORY}:${HELM_IMAGE_VERSION}
|
|
||||||
|
|
||||||
# NODE_IMAGE
|
# NODE_IMAGE
|
||||||
NODE_IMAGE_REGISTRY_HOST?=docker.io
|
NODE_IMAGE_REGISTRY_HOST?=docker.io
|
||||||
NODE_IMAGE_REPOSITORY?=library/node
|
NODE_IMAGE_REPOSITORY?=library/node
|
||||||
@@ -31,6 +25,12 @@ readme/lint:
|
|||||||
readme/parameters:
|
readme/parameters:
|
||||||
npm install && npm run readme:parameters
|
npm install && npm run readme:parameters
|
||||||
|
|
||||||
|
# HELM UNITTESTS
|
||||||
|
# ==============================================================================
|
||||||
|
PHONY+=helm/unittest
|
||||||
|
helm/unittest:
|
||||||
|
helm unittest --strict --file 'unittests/**/*.yaml' ./
|
||||||
|
|
||||||
# CONTAINER RUN - README
|
# CONTAINER RUN - README
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
PHONY+=container-run/readme
|
PHONY+=container-run/readme
|
||||||
@@ -60,32 +60,6 @@ container-run/readme/parameters:
|
|||||||
${NODE_IMAGE_FULLY_QUALIFIED} \
|
${NODE_IMAGE_FULLY_QUALIFIED} \
|
||||||
npm install && npm run readme:parameters
|
npm install && npm run readme:parameters
|
||||||
|
|
||||||
# CONTAINER RUN - HELM UNITTESTS
|
|
||||||
# ==============================================================================
|
|
||||||
PHONY+=container-run/helm-unittests
|
|
||||||
container-run/helm-unittests:
|
|
||||||
${CONTAINER_RUNTIME} run \
|
|
||||||
--env HELM_REPO_PASSWORD=${CHART_SERVER_PASSWORD} \
|
|
||||||
--env HELM_REPO_USERNAME=${CHART_SERVER_USERNAME} \
|
|
||||||
--rm \
|
|
||||||
--volume $(shell pwd):$(shell pwd) \
|
|
||||||
--workdir $(shell pwd) \
|
|
||||||
${HELM_IMAGE_FULLY_QUALIFIED} \
|
|
||||||
unittest --strict --file 'unittests/**/*.yaml' ./
|
|
||||||
|
|
||||||
# CONTAINER RUN - HELM UPDATE DEPENDENCIES
|
|
||||||
# ==============================================================================
|
|
||||||
PHONY+=container-run/helm-update-dependencies
|
|
||||||
container-run/helm-update-dependencies:
|
|
||||||
${CONTAINER_RUNTIME} run \
|
|
||||||
--env HELM_REPO_PASSWORD=${CHART_SERVER_PASSWORD} \
|
|
||||||
--env HELM_REPO_USERNAME=${CHART_SERVER_USERNAME} \
|
|
||||||
--rm \
|
|
||||||
--volume $(shell pwd):$(shell pwd) \
|
|
||||||
--workdir $(shell pwd) \
|
|
||||||
${HELM_IMAGE_FULLY_QUALIFIED} \
|
|
||||||
dependency update
|
|
||||||
|
|
||||||
# CONTAINER RUN - MARKDOWN-LINT
|
# CONTAINER RUN - MARKDOWN-LINT
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
PHONY+=container-run/helm-lint
|
PHONY+=container-run/helm-lint
|
||||||
|
|||||||
@@ -63,8 +63,9 @@ The following examples serve as individual configurations and as inspiration for
|
|||||||
#### TLS encryption
|
#### TLS encryption
|
||||||
|
|
||||||
The example describe how to deploy Reposilite with TLS encryption. If Reposilite is deployed behind reverse proxy, for
|
The example describe how to deploy Reposilite with TLS encryption. If Reposilite is deployed behind reverse proxy, for
|
||||||
example an ingress nginx controller, please instruct the ingress to establish an TLS encrypted connection to avoid
|
example an ingress nginx controller or Gateway API, please instruct the reserve proxy to establish an TLS encrypted
|
||||||
connection problems.
|
connection to avoid connection problems. The documentation describe configuring [ingress NGINX](#ingress-nginx) as well
|
||||||
|
as [NGINX Gateway Fabric](#gatewayapi-nginx-fabric).
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> The secret `reposilite-tls` containing the TLS certificate is already present. The keys `ca.crt`, `tls.key` and
|
> The secret `reposilite-tls` containing the TLS certificate is already present. The keys `ca.crt`, `tls.key` and
|
||||||
@@ -94,6 +95,108 @@ helm install --version "${CHART_VERSION}" reposilite volker.raschek/reposilite \
|
|||||||
--set 'service.port=8443'
|
--set 'service.port=8443'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### Ingress NGINX
|
||||||
|
|
||||||
|
The following changes must be applied to enable TLS encryption and authentication on-top between the ingress and backend
|
||||||
|
service.
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> The HTTP Version between the ingress nginx and backend must be set to `1.1`, as well as the TLS protocol must be set
|
||||||
|
> to `TLSv1.2`. Otherwise can't the nginx establish a TLS connection.
|
||||||
|
|
||||||
|
The secret `reposilite/ingress-nginx-controller-tls` contains TLS certificates for the nginx ingress controller. The TLS
|
||||||
|
certificate must be created manually, for example via [cert-manager](https://cert-manager.io/). It is used by the nginx
|
||||||
|
for TLS authentication.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: "nginx"
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
|
||||||
|
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
|
||||||
|
nginx.ingress.kubernetes.io/proxy-ssl-secret: reposilite/ingress-nginx-controller-tls
|
||||||
|
nginx.ingress.kubernetes.io/proxy-ssl-protocols: TLSv1.2
|
||||||
|
nginx.ingress.kubernetes.io/proxy-ssl-name: reposilite
|
||||||
|
nginx.ingress.kubernetes.io/proxy-ssl-verify: "on"
|
||||||
|
```
|
||||||
|
|
||||||
|
##### GatewayAPI: NGINX Fabric
|
||||||
|
|
||||||
|
The following changes must be applied to enable TLS encryption and authentication on-top between the ingress and backend
|
||||||
|
service.
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> The HTTP Version between the ingress nginx and backend must be set to `1.1`, as well as the TLS protocol must be set
|
||||||
|
> to `TLSv1.2`. Otherwise can't the nginx establish a TLS connection.
|
||||||
|
|
||||||
|
The `gatewayAPI.core.backendTLSPolicy.validation.caCertificateRefs` must contains at least one secret containing the
|
||||||
|
root or intermediate certificate of the issued TLS certificate used by reposilite to be able to validate the TLS certificate.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
gatewayAPI:
|
||||||
|
enabled: true
|
||||||
|
core:
|
||||||
|
backendTLSPolicy:
|
||||||
|
enabled: true
|
||||||
|
validation:
|
||||||
|
caCertificateRefs:
|
||||||
|
- group: ""
|
||||||
|
kind: Secret
|
||||||
|
name: "reposilite-ca"
|
||||||
|
hostname: "reposilite"
|
||||||
|
|
||||||
|
httpRoute:
|
||||||
|
hostnames:
|
||||||
|
- reposilite.example.local
|
||||||
|
parentRefs:
|
||||||
|
- name: nginx
|
||||||
|
kind: Gateway
|
||||||
|
group: gateway.networking.k8s.io
|
||||||
|
namespace: my-gateway-namespace
|
||||||
|
sectionName: reposilite-https
|
||||||
|
```
|
||||||
|
|
||||||
|
The Gateway resource is not part of the helm chart, but for illustrating the configuration example, here a GatewayAPI
|
||||||
|
resource with configured backend TLS certificate. The TLS certificates `gateway-frontend-tls` and `gateway-backend-tls`
|
||||||
|
must also be created manually, for example via [cert-manager](https://cert-manager.io/).
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
apiVersion: gateway.networking.k8s.io/v1
|
||||||
|
kind: Gateway
|
||||||
|
metadata:
|
||||||
|
name: nginx
|
||||||
|
namespace: my-gateway-namespace
|
||||||
|
spec:
|
||||||
|
gatewayClassName: nginx
|
||||||
|
listeners:
|
||||||
|
- allowedRoutes:
|
||||||
|
kinds:
|
||||||
|
- group: gateway.networking.k8s.io
|
||||||
|
kind: HTTPRoute
|
||||||
|
namespaces:
|
||||||
|
from: All
|
||||||
|
hostname: reposilite.example.local
|
||||||
|
name: https
|
||||||
|
port: 443
|
||||||
|
protocol: HTTPS
|
||||||
|
tls:
|
||||||
|
certificateRefs:
|
||||||
|
- group: ''
|
||||||
|
kind: Secret
|
||||||
|
name: gateway-frontend-tls
|
||||||
|
namespace: my-gateway-namespace
|
||||||
|
mode: Terminate
|
||||||
|
tls:
|
||||||
|
backend:
|
||||||
|
clientCertificateRef:
|
||||||
|
group: ''
|
||||||
|
kind: Secret
|
||||||
|
name: gateway-backend-tls
|
||||||
|
namespace: my-gateway-namespace
|
||||||
|
```
|
||||||
|
|
||||||
#### TLS certificate rotation
|
#### TLS certificate rotation
|
||||||
|
|
||||||
If Reposilite uses TLS certificates that are mounted as a secret in the container file system like the example
|
If Reposilite uses TLS certificates that are mounted as a secret in the container file system like the example
|
||||||
@@ -172,12 +275,20 @@ networkPolicies:
|
|||||||
|
|
||||||
ingress:
|
ingress:
|
||||||
- from:
|
- from:
|
||||||
|
# Ingress NGINX
|
||||||
- namespaceSelector:
|
- namespaceSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
kubernetes.io/metadata.name: ingress-nginx
|
kubernetes.io/metadata.name: ingress-nginx
|
||||||
podSelector:
|
podSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
|
# NGINX GatewayAPI Fabric
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
kubernetes.io/metadata.name: gateway-nginx
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: gateway-nginx
|
||||||
ports:
|
ports:
|
||||||
- port: http
|
- port: http
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
|
|||||||
+1
-31
@@ -4,6 +4,7 @@
|
|||||||
"local>volker.raschek/renovate-config:default#master",
|
"local>volker.raschek/renovate-config:default#master",
|
||||||
"local>volker.raschek/renovate-config:container#master",
|
"local>volker.raschek/renovate-config:container#master",
|
||||||
"local>volker.raschek/renovate-config:actions#master",
|
"local>volker.raschek/renovate-config:actions#master",
|
||||||
|
"local>volker.raschek/renovate-config:helm#master",
|
||||||
"local>volker.raschek/renovate-config:npm#master",
|
"local>volker.raschek/renovate-config:npm#master",
|
||||||
"local>volker.raschek/renovate-config:regexp#master"
|
"local>volker.raschek/renovate-config:regexp#master"
|
||||||
],
|
],
|
||||||
@@ -33,40 +34,9 @@
|
|||||||
"packageNameTemplate": "https://git.cryptic.systems/volker.raschek/reposilite-charts",
|
"packageNameTemplate": "https://git.cryptic.systems/volker.raschek/reposilite-charts",
|
||||||
"datasourceTemplate": "git-tags",
|
"datasourceTemplate": "git-tags",
|
||||||
"versioningTemplate": "semver"
|
"versioningTemplate": "semver"
|
||||||
},
|
|
||||||
{
|
|
||||||
"customType": "regex",
|
|
||||||
"datasourceTemplate": "github-releases",
|
|
||||||
"fileMatch": [
|
|
||||||
".vscode/settings\\.json$"
|
|
||||||
],
|
|
||||||
"matchStrings": [
|
|
||||||
"https:\\/\\/raw\\.githubusercontent\\.com\\/(?<depName>[^\\s]+?)\\/(?<currentValue>v[0-9.]+?)\\/schema\\/helm-testsuite\\.json"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packageRules": [
|
"packageRules": [
|
||||||
{
|
|
||||||
"groupName": "Update docker.io/volkerraschek/helm",
|
|
||||||
"matchDepNames": [
|
|
||||||
"docker.io/volkerraschek/helm",
|
|
||||||
"volkerraschek/helm"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"automerge": true,
|
|
||||||
"groupName": "Update helm plugin 'unittest'",
|
|
||||||
"matchDepNames": [
|
|
||||||
"helm-unittest/helm-unittest"
|
|
||||||
],
|
|
||||||
"matchDatasources": [
|
|
||||||
"github-releases"
|
|
||||||
],
|
|
||||||
"matchUpdateTypes": [
|
|
||||||
"minor",
|
|
||||||
"patch"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"groupName": "Update docker.io/library/node",
|
"groupName": "Update docker.io/library/node",
|
||||||
"matchDepNames": [
|
"matchDepNames": [
|
||||||
|
|||||||
Reference in New Issue
Block a user