13 Commits

Author SHA1 Message Date
27bc608b4e docs(README): add section network policies
Some checks failed
Markdown linter / markdown-lint (push) Waiting to run
Generate README / generate-parameters (push) Successful in 29s
Helm / helm-lint (push) Successful in 14s
Helm / helm-unittest (push) Successful in 15s
Markdown linter / markdown-link-checker (push) Has been cancelled
Release / publish-chart (push) Successful in 19s
2025-02-15 19:51:53 +01:00
6e9548ba92 feat(networkPolicies): template custom network policies
Some checks failed
Generate README / generate-parameters (push) Failing after 28s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 17s
Markdown linter / markdown-link-checker (push) Successful in 31s
Markdown linter / markdown-lint (push) Successful in 27s
Release / publish-chart (push) Successful in 17s
2025-02-15 19:44:34 +01:00
da0daf74aa docs(README): hint of CPU limit lower than 1000m 2025-02-15 19:44:34 +01:00
7f921ff1eb chore(deps): lock file maintenance
All checks were successful
Helm / helm-lint (pull_request) Successful in 15s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 17s
2025-02-14 23:31:59 +00:00
f8cf436855 chore(deps): update docker.io/volkerraschek/helm docker tag to v3.17.1
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 17s
2025-02-14 20:27:07 +00:00
a17476a942 chore(deps): update dependency volker.raschek/prometheus-fail2ban-exporter-charts to v0.2.0
All checks were successful
Generate README / generate-parameters (pull_request) Successful in 34s
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 19s
Markdown linter / markdown-link-checker (pull_request) Successful in 54s
Markdown linter / markdown-lint (pull_request) Successful in 50s
Generate README / generate-parameters (push) Successful in 30s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 17s
Markdown linter / markdown-link-checker (push) Successful in 32s
Markdown linter / markdown-lint (push) Successful in 28s
2025-02-14 17:39:47 +00:00
f99a401095 chore(renovate): automerge lockFileMaintenance
All checks were successful
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 15s
2025-02-14 18:29:25 +01:00
76d6979ad3 chore(deps): update docker.io/library/node docker tag to v23
All checks were successful
Helm / helm-lint (pull_request) Successful in 17s
Helm / helm-unittest (pull_request) Successful in 16s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 16s
2025-02-13 23:31:39 +00:00
59a5f5ba0b chore(renovate): update configuration
All checks were successful
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 16s
2025-02-13 22:49:38 +01:00
203eea0181 chore(renovate): keep npm dependencies updated
All checks were successful
Helm / helm-lint (push) Successful in 41s
Helm / helm-unittest (push) Successful in 17s
2025-02-13 22:39:39 +01:00
d36990bcf1 chore(deps): update docker.io/library/node docker tag to v22.14.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 16s
Helm / helm-lint (push) Successful in 19s
Helm / helm-unittest (push) Successful in 20s
2025-02-13 17:31:28 +00:00
493e0b684e chore(deps): update dependency markdownlint-cli to ^0.44.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 17s
Helm / helm-unittest (pull_request) Successful in 16s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 16s
2025-02-03 02:31:32 +00:00
93de55e1a5 chore(deps): update dependency @bitnami/readme-generator-for-helm to v2.7.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 17s
Helm / helm-unittest (pull_request) Successful in 16s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 17s
2025-02-02 23:30:20 +00:00
12 changed files with 1310 additions and 250 deletions

View File

@ -15,7 +15,7 @@ on:
jobs:
generate-parameters:
container:
image: docker.io/library/node:22.13.1-alpine
image: docker.io/library/node:23.8.0-alpine
runs-on:
- ubuntu-latest
steps:

View File

@ -13,7 +13,7 @@ on:
jobs:
helm-lint:
container:
image: docker.io/volkerraschek/helm:3.16.4
image: docker.io/volkerraschek/helm:3.17.1
runs-on:
- ubuntu-latest
steps:
@ -28,7 +28,7 @@ jobs:
helm-unittest:
container:
image: docker.io/volkerraschek/helm:3.16.4
image: docker.io/volkerraschek/helm:3.17.1
runs-on:
- ubuntu-latest
steps:

View File

@ -15,7 +15,7 @@ on:
jobs:
markdown-link-checker:
container:
image: docker.io/library/node:22.13.1-alpine
image: docker.io/library/node:23.8.0-alpine
runs-on:
- ubuntu-latest
steps:
@ -31,7 +31,7 @@ jobs:
markdown-lint:
container:
image: docker.io/library/node:22.13.1-alpine
image: docker.io/library/node:23.8.0-alpine
runs-on:
- ubuntu-latest
steps:

View File

@ -8,7 +8,7 @@ on:
jobs:
publish-chart:
container:
image: docker.io/volkerraschek/helm:3.16.4
image: docker.io/volkerraschek/helm:3.17.1
runs-on: ubuntu-latest
steps:
- name: Install tooling

View File

@ -68,7 +68,7 @@ cannot use the available CPU time to perform computing operations.
The application must be informed that despite several CPUs only a part (limit) of the available computing time is
available. As this is a Golang application, this can be implemented using `GOMAXPROCS`. The following example is one way
of defining `GOMAXPROCS` automatically based on the defined CPU limit like `100m`. Please keep in mind, that the CFS
of defining `GOMAXPROCS` automatically based on the defined CPU limit like `1000m`. Please keep in mind, that the CFS
rate of `100ms` - default on each kubernetes node, is also very important to avoid CPU throttling.
Further information about this topic can be found [here](https://kanishk.io/posts/cpu-throttling-in-containerized-go-apps/).
@ -76,6 +76,8 @@ Further information about this topic can be found [here](https://kanishk.io/post
> [!NOTE]
> The environment variable `GOMAXPROCS` is set automatically, when a CPU limit is defined. An explicit configuration is
> not anymore required.
>
> Please take care the a CPU limit < `1000m` can also lead to CPU throttling. Please read the linked documentation carefully.
```bash
helm install prometheus-fail2ban-exporter prometheus-exporters/prometheus-fail2ban-exporter \
@ -83,7 +85,7 @@ helm install prometheus-fail2ban-exporter prometheus-exporters/prometheus-fail2b
--set 'prometheus.metrics.serviceMonitor.enabled=true' \
--set 'daemonSet.fail2banExporter.env.name=GOMAXPROCS' \
--set 'daemonSet.fail2banExporter.env.valueFrom.resourceFieldRef.resource=limits.cpu' \
--set 'daemonSet.fail2banExporter.resources.limits.cpu=100m'
--set 'daemonSet.fail2banExporter.resources.limits.cpu=1000m'
```
<!--
@ -146,6 +148,61 @@ helm install prometheus-fail2ban-exporter prometheus-exporters/prometheus-fail2b
--set 'grafana.enabled=true'
```
### Network policies
Network policies can only take effect, when the used CNI plugin support network policies. The chart supports no custom
network policy implementation of CNI plugins. It's support only the official API resource of `networking.k8s.io/v1`.
The object networkPolicies can contains multiple networkPolicy definitions. There is currently only one example
predefined - it's named `default`. Further networkPolicy rules can easy be added by defining additional objects. For example:
> [!NOTE]
> The structure of each custom network policy must be equal like that of default. For this reason don't forget to define
> `annotations`, `labels` and the other properties as well.
```yaml
networkPolicies:
enabled: false
default: {}
my-custom-network-policy: {}
```
The example below is an excerpt of the `values.yaml` file. The network policy `default` contains ingress rules to allow
incoming traffic from Prometheus.
> [!IMPORTANT]
> Please keep in mind, that the namespace and pod selector labels can be different from environment to environment. For
> this reason, there is are not default network policy rules defined.
```yaml
networkPolicies:
enabled: true
default:
enabled: true
annotations: {}
labels: {}
policyTypes:
- Egress
- Ingress
egress: []
ports:
- port: 53
protocol: TCP
- port: 53
protocol: UDP
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: monitoring
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus
ports:
- port: http
protocol: TCP
```
## Parameters
### Global
@ -229,11 +286,17 @@ helm install prometheus-fail2ban-exporter prometheus-exporters/prometheus-fail2b
| --------------------- | ---------------------- | ----- |
| `podDisruptionBudget` | Pod disruption budget. | `{}` |
### Network
### NetworkPolicies
| Name | Description | Value |
| ----------------- | ------------------------------------------------------------------------------------------------------------------ | ----- |
| `networkPolicies` | Deploy network policies based on the used container network interface (CNI) implementation - like calico or weave. | `{}` |
| Name | Description | Value |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------- |
| `networkPolicies.enabled` | Enable network policies in general. | `false` |
| `networkPolicies.default.enabled` | Enable the network policy for accessing the application by default. For example to scape the metrics. | `false` |
| `networkPolicies.default.annotations` | Additional network policy annotations. | `{}` |
| `networkPolicies.default.labels` | Additional network policy labels. | `{}` |
| `networkPolicies.default.policyTypes` | List of policy types. Supported is ingress, egress or ingress and egress. | `[]` |
| `networkPolicies.default.egress` | Concrete egress network policy implementation. | `[]` |
| `networkPolicies.default.ingress` | Concrete ingress network policy implementation. | `[]` |
### Prometheus

1194
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,6 @@
"devDependencies": {
"@bitnami/readme-generator-for-helm": "^2.5.0",
"markdown-link-check": "^3.13.6",
"markdownlint-cli": "^0.43.0"
"markdownlint-cli": "^0.44.0"
}
}

View File

@ -1,6 +1,8 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"assignees": [ "volker.raschek" ],
"assignees": [
"volker.raschek"
],
"customManagers": [
{
"fileMatch": [
@ -25,24 +27,45 @@
"versioningTemplate": "semver"
}
],
"labels": [ "renovate" ],
"labels": [
"renovate"
],
"lockFileMaintenance": {
"addLabels": [
"renovate/automerge",
"renovate/lockFileMaintenance"
],
"automerge": true,
"enabled": true
},
"npm": {
"enabled": true
},
"packageRules": [
{
"addLabels": [ "renovate/automerge", "renovate/npm" ],
"addLabels": [
"renovate/automerge",
"renovate/npm"
],
"automerge": true,
"matchPackageNames": [
"@bitnami/readme-generator-for-helm",
"markdownlint-cli",
"markdown-link-check",
"@bitnami/readme-generator-for-helm"
"markdown-link-check"
],
"matchManagers": [ "npm" ],
"matchUpdateTypes": [ "minor", "patch"]
"matchManagers": [
"npm"
],
"matchUpdateTypes": [
"minor",
"patch"
]
},
{
"addLabels": [ "renovate/automerge", "renovate/container" ],
"addLabels": [
"renovate/automerge",
"renovate/container"
],
"automerge": true,
"excludePackagePatterns": [
"volker.raschek/prometheus-fail2ban-exporter"
@ -54,6 +77,21 @@
"minor",
"patch"
]
},
{
"addLabels": [
"renovate/automerge",
"renovate/documentation"
],
"automerge": true,
"matchDepNames": [
"volker.raschek/prometheus-fail2ban-exporter-charts"
],
"matchUpdateTypes": [
"major",
"minor",
"patch"
]
}
],
"rebaseLabel": "renovate/rebase",

View File

@ -0,0 +1,19 @@
{{/* vim: set filetype=mustache: */}}
{{/* annotations */}}
{{- define "prometheus-fail2ban-exporter.networkPolicies.annotations" -}}
{{ include "prometheus-fail2ban-exporter.annotations" .context }}
{{- if .networkPolicy.annotations }}
{{ toYaml .networkPolicy.annotations }}
{{- end }}
{{- end }}
{{/* labels */}}
{{- define "prometheus-fail2ban-exporter.networkPolicies.labels" -}}
{{ include "prometheus-fail2ban-exporter.labels" .context }}
{{- if .networkPolicy.labels }}
{{ toYaml .networkPolicy.labels }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,36 @@
{{- if .Values.networkPolicies.enabled }}
{{- range $key, $value := .Values.networkPolicies -}}
{{- if and (not (eq $key "enabled")) $value.enabled }}
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
{{- with (include "prometheus-fail2ban-exporter.networkPolicies.annotations" (dict "networkPolicy" $value "context" $) | fromYaml) }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with (include "prometheus-fail2ban-exporter.networkPolicies.labels" (dict "networkPolicy" $value "context" $) | fromYaml) }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
name: {{ printf "%s-%s" (include "prometheus-fail2ban-exporter.fullname" $ ) $key }}
namespace: {{ $.Release.Namespace }}
spec:
podSelector:
matchLabels:
{{- include "prometheus-fail2ban-exporter.pod.selectorLabels" $ | nindent 6 }}
{{- with $value.policyTypes }}
policyTypes:
{{- toYaml . | nindent 2 }}
{{- end }}
{{- with $value.egress }}
egress:
{{- toYaml . | nindent 2 }}
{{- end }}
{{- with $value.ingress }}
ingress:
{{- toYaml . | nindent 2 }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,118 @@
chart:
appVersion: 0.1.0
version: 0.1.0
suite: NetworkPolicies template (basic)
release:
name: prometheus-fail2ban-exporter-unittest
namespace: testing
templates:
- templates/prometheus-fail2ban-exporter/networkPolicies.yaml
tests:
- it: Skip networkPolicies in general disabled.
set:
networkPolicies.enabled: false
asserts:
- hasDocuments:
count: 0
- it: Skip networkPolicy 'default' when disabled.
set:
networkPolicies.enabled: true
networkPolicies.default.enabled: false
asserts:
- hasDocuments:
count: 0
- it: Loop over networkPolicies
set:
networkPolicies.enabled: true
networkPolicies.default.enabled: false
networkPolicies.nginx.enabled: true
networkPolicies.prometheus.enabled: true
asserts:
- hasDocuments:
count: 2
- it: Template networkPolicy 'default' without policyTypes, egress and ingress configuration
set:
networkPolicies.enabled: true
networkPolicies.default.enabled: true
asserts:
- hasDocuments:
count: 1
- containsDocument:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
name: prometheus-fail2ban-exporter-unittest-default
namespace: testing
- notExists:
path: metadata.annotations
- equal:
path: metadata.labels
value:
app.kubernetes.io/instance: prometheus-fail2ban-exporter-unittest
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-fail2ban-exporter
app.kubernetes.io/version: 0.1.0
helm.sh/chart: prometheus-fail2ban-exporter-0.1.0
- equal:
path: spec.podSelector.matchLabels
value:
app.kubernetes.io/instance: prometheus-fail2ban-exporter-unittest
app.kubernetes.io/name: prometheus-fail2ban-exporter
- notExists:
path: spec.policyTypes
- notExists:
path: spec.egress
- notExists:
path: spec.ingress
- it: Template networkPolicy 'default' with policyTypes, egress and ingress configuration
set:
networkPolicies.enabled: true
networkPolicies.default.enabled: true
networkPolicies.default.policyTypes:
- Egress
- Ingress
networkPolicies.default.ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: khv-production
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus
networkPolicies.default.egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: database
podSelector:
matchLabels:
app.kubernetes.io/name: oracle
asserts:
- equal:
path: spec.policyTypes
value:
- Egress
- Ingress
- equal:
path: spec.egress
value:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: database
podSelector:
matchLabels:
app.kubernetes.io/name: oracle
- equal:
path: spec.ingress
value:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: khv-production
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus

View File

@ -270,9 +270,53 @@ podDisruptionBudget: {}
# maxUnavailable: 1
# minAvailable: 1
## @section Network
## @param networkPolicies Deploy network policies based on the used container network interface (CNI) implementation - like calico or weave.
networkPolicies: {}
## @section NetworkPolicies
## @param networkPolicies.enabled Enable network policies in general.
networkPolicies:
enabled: false
## @param networkPolicies.default.enabled Enable the network policy for accessing the application by default. For example to scape the metrics.
## @param networkPolicies.default.annotations Additional network policy annotations.
## @param networkPolicies.default.labels Additional network policy labels.
## @param networkPolicies.default.policyTypes List of policy types. Supported is ingress, egress or ingress and egress.
## @param networkPolicies.default.egress Concrete egress network policy implementation.
## @skip networkPolicies.default.egress Skip individual egress configuration.
## @param networkPolicies.default.ingress Concrete ingress network policy implementation.
## @skip networkPolicies.default.ingress Skip individual ingress configuration.
default:
enabled: false
annotations: {}
labels: {}
policyTypes: []
# - Egress
# - Ingress
egress: []
ingress: []
# Allow incoming HTTP traffic from prometheus.
#
# - from:
# - namespaceSelector:
# matchLabels:
# kubernetes.io/metadata.name: monitoring
# podSelector:
# matchLabels:
# app.kubernetes.io/name: prometheus
# ports:
# - port: http
# protocol: TCP
# Allow incoming HTTP traffic from ingress-nginx.
#
# - from:
# - namespaceSelector:
# matchLabels:
# kubernetes.io/metadata.name: ingress-nginx
# podSelector:
# matchLabels:
# app.kubernetes.io/name: ingress-nginx
# ports:
# - port: http
# protocol: TCP
## @section Prometheus
prometheus: