diff --git a/assets/airlock/microgateway-4.4.1.tgz b/assets/airlock/microgateway-4.4.1.tgz
new file mode 100644
index 000000000..e68360649
Binary files /dev/null and b/assets/airlock/microgateway-4.4.1.tgz differ
diff --git a/assets/airlock/microgateway-cni-4.4.1.tgz b/assets/airlock/microgateway-cni-4.4.1.tgz
new file mode 100644
index 000000000..049ec58bb
Binary files /dev/null and b/assets/airlock/microgateway-cni-4.4.1.tgz differ
diff --git a/assets/kasten/k10-7.0.1401.tgz b/assets/kasten/k10-7.0.1401.tgz
new file mode 100644
index 000000000..9b923682f
Binary files /dev/null and b/assets/kasten/k10-7.0.1401.tgz differ
diff --git a/assets/kuma/kuma-2.9.1.tgz b/assets/kuma/kuma-2.9.1.tgz
new file mode 100644
index 000000000..511e017f7
Binary files /dev/null and b/assets/kuma/kuma-2.9.1.tgz differ
diff --git a/assets/netscaler/netscaler-cpx-with-ingress-controller-2.2.10.tgz b/assets/netscaler/netscaler-cpx-with-ingress-controller-2.2.10.tgz
new file mode 100644
index 000000000..36639a1fc
Binary files /dev/null and b/assets/netscaler/netscaler-cpx-with-ingress-controller-2.2.10.tgz differ
diff --git a/assets/netscaler/netscaler-ingress-controller-2.2.10.tgz b/assets/netscaler/netscaler-ingress-controller-2.2.10.tgz
new file mode 100644
index 000000000..eee5a0c91
Binary files /dev/null and b/assets/netscaler/netscaler-ingress-controller-2.2.10.tgz differ
diff --git a/assets/trilio/k8s-triliovault-operator-5.0.0.tgz b/assets/trilio/k8s-triliovault-operator-5.0.0.tgz
new file mode 100644
index 000000000..772f95f21
Binary files /dev/null and b/assets/trilio/k8s-triliovault-operator-5.0.0.tgz differ
diff --git a/charts/airlock/microgateway-cni/4.4.1/.helmignore b/charts/airlock/microgateway-cni/4.4.1/.helmignore
new file mode 100644
index 000000000..8561d2892
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/.helmignore
@@ -0,0 +1,27 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
+
+# Helm unit tests
+/tests
+/validation
diff --git a/charts/airlock/microgateway-cni/4.4.1/Chart.yaml b/charts/airlock/microgateway-cni/4.4.1/Chart.yaml
new file mode 100644
index 000000000..4abf51221
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/Chart.yaml
@@ -0,0 +1,43 @@
+annotations:
+ artifacthub.io/category: security
+ artifacthub.io/license: MIT
+ artifacthub.io/links: |
+ - name: Airlock Microgateway Documentation
+ url: https://docs.airlock.com/microgateway/4.4/
+ - name: Airlock Microgateway Labs
+ url: https://play.instruqt.com/airlock/invite/hyi9fy4b4jzc?icp_referrer=artifacthub.io
+ - name: Airlock Microgateway Forum
+ url: https://forum.airlock.com/
+ catalog.cattle.io/certified: partner
+ catalog.cattle.io/display-name: Airlock Microgateway CNI
+ catalog.cattle.io/kube-version: '>=1.25.0-0'
+ catalog.cattle.io/release-name: ""
+ charts.openshift.io/name: Airlock Microgateway CNI
+apiVersion: v2
+appVersion: 4.4.1
+description: A Helm chart for deploying the Airlock Microgateway CNI plugin
+home: https://www.airlock.com/en/microgateway
+icon: file://assets/icons/microgateway-cni.svg
+keywords:
+- WAF
+- Web Application Firewall
+- WAAP
+- Web Application and API protection
+- OWASP
+- Airlock
+- Microgateway
+- Security
+- Filtering
+- DevSecOps
+- shift left
+- CNI
+kubeVersion: '>=1.25.0-0'
+maintainers:
+- email: support@airlock.com
+ name: Airlock
+ url: https://www.airlock.com/
+name: microgateway-cni
+sources:
+- https://github.com/airlock/microgateway
+type: application
+version: 4.4.1
diff --git a/charts/airlock/microgateway-cni/4.4.1/README.md b/charts/airlock/microgateway-cni/4.4.1/README.md
new file mode 100644
index 000000000..77c0a31b4
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/README.md
@@ -0,0 +1,137 @@
+# Airlock Microgateway CNI
+
+![Version: 4.4.1](https://img.shields.io/badge/Version-4.4.1-informational?style=flat-square) ![AppVersion: 4.4.1](https://img.shields.io/badge/AppVersion-4.4.1-informational?style=flat-square)
+
+*Airlock Microgateway is a Kubernetes native WAAP (Web Application and API Protection) solution to protect microservices.*
+
+
+
+Modern application security is embedded in the development workflow and follows DevSecOps paradigms. Airlock Microgateway is the perfect fit for these requirements. It is a lightweight alternative to the Airlock Gateway appliance, optimized for Kubernetes environments. Airlock Microgateway protects your applications and microservices with the tried-and-tested Airlock security features against attacks, while also providing a high degree of scalability.
+__This Helm chart is part of Airlock Microgateway. See our [GitHub repo](https://github.com/airlock/microgateway/tree/4.4.1).__
+
+### Features
+* Kubernetes native integration with sidecar injection and Gateway API support
+* Reverse proxy functionality with request routing rules, TLS termination and remote IP extraction
+* Using native Envoy HTTP filters like Lua scripting, RBAC, ext_authz, JWT authentication
+* Content security filters for protecting against known attacks (OWASP Top 10)
+* Access control using OpenID Connect to allow only authenticated users to access the protected services
+* API security features like JSON parsing, OpenAPI specification enforcement or GraphQL schema validation
+
+For a list of all features, view the **[comparison of the community and premium edition](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html)**.
+
+## Documentation and links
+
+Check the official documentation at **[docs.airlock.com](https://docs.airlock.com/microgateway/latest/)** or the product website at **[airlock.com/microgateway](https://www.airlock.com/en/microgateway)**. The links below point out the most interesting documentation sites when starting with Airlock Microgateway.
+
+* [Getting Started](https://docs.airlock.com/microgateway/latest/#data/1660804708742.html)
+* [System Architecture](https://docs.airlock.com/microgateway/latest/#data/1660804709650.html)
+* [Installation](https://docs.airlock.com/microgateway/latest/#data/1660804708637.html)
+* [Troubleshooting](https://docs.airlock.com/microgateway/latest/#data/1659430054787.html)
+* [GitHub](https://github.com/airlock/microgateway)
+
+# Quick start guide
+
+The instructions below provide a quick start guide. Detailed information are provided in the **[manual](https://docs.airlock.com/microgateway/latest/)**.
+
+## Prerequisites
+* [helm](https://helm.sh/docs/intro/install/) (>= v3.8.0)
+
+## Deploy Airlock Microgateway CNI
+1. Install the CNI Plugin with Helm.
+ > **Note**: Certain environments such as OpenShift or GKE require non-default configurations when installing the CNI plugin. For the most common setups, values files are provided in the [chart folder](/deploy/charts/airlock-microgateway-cni).
+ ```bash
+ # Standard setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.4.1'
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ ```bash
+ # GKE setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.4.1' -f https://raw.githubusercontent.com/airlock/microgateway/4.4.1/deploy/charts/airlock-microgateway-cni/gke-values.yaml
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ ```bash
+ # OpenShift setup
+ helm install airlock-microgateway-cni -n openshift-operators oci://quay.io/airlockcharts/microgateway-cni --version '4.4.1' -f https://raw.githubusercontent.com/airlock/microgateway/4.4.1/deploy/charts/airlock-microgateway-cni/openshift-values.yaml
+ kubectl -n openshift-operators rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ > **Important:** On OpenShift, all pods which should be protected by Airlock Microgateway must explicitly reference the Airlock Microgateway CNI NetworkAttachmentDefinition via the annotation `k8s.v1.cni.cncf.io/networks` (see [documentation](https://docs.airlock.com/microgateway/latest/#data/1658483168033.html) for details).
+
+2. (Recommended) You can verify the correctness of the installation with `helm test`.
+ ```bash
+ # Standard and GKE setup
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.4.1'
+ helm test airlock-microgateway-cni -n kube-system --logs
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.4.1'
+ ```
+ ```bash
+ # OpenShift setup
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.4.1'
+ helm test airlock-microgateway-cni -n openshift-operators --logs
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.4.1'
+ ```
+
+ Consult our [documentation](https://docs.airlock.com/microgateway/latest/#data/1699611533587.html) in case of any installation error.
+
+## Support
+
+### Premium support
+If you have a paid license, please follow the [premium support process](https://techzone.ergon.ch/support-process).
+
+### Community support
+For the community edition, check our **[Airlock community forum](https://forum.airlock.com/)** for FAQs or register to post your question.
+## Values
+
+| Key | Type | Default | Description |
+|-----|------|---------|-------------|
+| affinity | object | `{}` | Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes. |
+| commonAnnotations | object | `{}` | Annotations to add to all resources. |
+| commonLabels | object | `{}` | Labels to add to all resources. |
+| config.cniBinDir | string | `"/opt/cni/bin"` | Directory where the CNI plugin binaries reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node. |
+| config.cniNetDir | string | `"/etc/cni/net.d"` | Directory where the CNI config files reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node. |
+| config.excludeNamespaces | list | `["kube-system"]` | Namespaces for which this CNI plugin should not apply any modifications. |
+| config.installMode | string | `"chained"` | Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers), as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. |
+| config.logLevel | string | `"info"` | Log level for the CNI installer and plugin. |
+| fullnameOverride | string | `""` | Allows overriding the name to use as full name of resources. |
+| image.digest | string | `"sha256:fa2f5d8587024f0d0b29505204c964002cfd7facf79748ccc98b8caf1a70f0d8"` | SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a"). Overrides tag when specified. |
+| image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| image.repository | string | `"quay.io/airlock/microgateway-cni"` | Image repository from which to pull the Airlock Microgateway CNI image. |
+| image.tag | string | `"4.4.1"` | Image tag to pull. |
+| imagePullSecrets | list | `[]` | ImagePullSecrets to use when pulling images. |
+| multusNetworkAttachmentDefinition.create | bool | `false` | Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods. |
+| multusNetworkAttachmentDefinition.namespace | string | `"default"` | Namespace in which the NetworkAttachmentDefinition is deployed. Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation |
+| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway-cni". |
+| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes. |
+| podAnnotations | object | `{}` | Annotations to add to all Pods. |
+| podLabels | object | `{}` | Labels to add to all Pods. |
+| privileged | bool | `false` | Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift). |
+| rbac.create | bool | `true` | Whether to create RBAC resources which are required for the CNI plugin to function. |
+| rbac.createSCCRole | OpenShift | `false` | Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint. |
+| resources | object | `{"requests":{"cpu":"10m","memory":"100Mi"}}` | Resource restrictions to apply to the CNI installer container. |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
+| serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
+| serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
+| tests.enabled | bool | `false` | Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts). If set to false, `helm test` will not run any tests. |
+
+## License
+View the [detailed license terms](https://www.airlock.com/en/airlock-license) for the software contained in this image.
+* Decompiling or reverse engineering is not permitted.
+* Using any of the deny rules or parts of these filter patterns outside of the image is not permitted.
+
+Airlock® is a security innovation by [ergon](https://www.ergon.ch/en)
+
+
+
+
+
diff --git a/charts/airlock/microgateway-cni/4.4.1/gke-values.yaml b/charts/airlock/microgateway-cni/4.4.1/gke-values.yaml
new file mode 100644
index 000000000..d6d5c21d1
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/gke-values.yaml
@@ -0,0 +1,4 @@
+# values for deploying on GKE
+
+config:
+ cniBinDir: "/home/kubernetes/bin"
diff --git a/charts/airlock/microgateway-cni/4.4.1/openshift-values.yaml b/charts/airlock/microgateway-cni/4.4.1/openshift-values.yaml
new file mode 100644
index 000000000..3b1d6cccd
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/openshift-values.yaml
@@ -0,0 +1,15 @@
+# values for deploying on OpenShift
+
+rbac:
+ createSCCRole: true
+
+privileged: true
+
+multusNetworkAttachmentDefinition:
+ create: true
+ namespace: default
+
+config:
+ installMode: "standalone"
+ cniNetDir: "/etc/cni/multus/net.d"
+ cniBinDir: "/var/lib/cni/bin"
diff --git a/charts/airlock/microgateway-cni/4.4.1/questions.yml b/charts/airlock/microgateway-cni/4.4.1/questions.yml
new file mode 100644
index 000000000..73ed44d64
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/questions.yml
@@ -0,0 +1,18 @@
+questions:
+ - variable: config.cniNetDir
+ required: true
+ type: string
+ label: CNI Network Configuration Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI config files reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your kubernetes host."
+ - variable: config.cniBinDir
+ required: true
+ type: string
+ label: CNI Plugin Binaries Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI plugin binaries reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your kubernetes host."
+ - variable: config.installMode
+ required: true
+ label: CNI Plugin Installation Mode
+ group: "CNI Settings"
+ description: "Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers) as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. Please refer to the CNI installation documentation (https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-cni) to correctly setup the CNI Plugin for your environment."
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/NOTES.txt b/charts/airlock/microgateway-cni/4.4.1/templates/NOTES.txt
new file mode 100644
index 000000000..bb94ff521
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/NOTES.txt
@@ -0,0 +1,15 @@
+Thank you for installing Airlock Microgateway CNI.
+
+Please ensure that the helm values'.config.cniNetDir' and '.config.cniBinDir' are configured for your Kubernetes distribution.
+For further information, consider our manual https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" . }}.
+The chapter 'Setup > Installation' describes how to set those settings correctly.
+
+Further information:
+* Documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" . }}
+* Airlock Microgateway Labs: https://play.instruqt.com/airlock/invite/hyi9fy4b4jzc?icp_referrer=helm
+
+Next steps:
+* Install Airlock Microgateway (if not done already)
+ https://artifacthub.io/packages/helm/airlock-microgateway/microgateway
+
+Your release version is {{ .Chart.Version }}.
\ No newline at end of file
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/_helpers.tpl b/charts/airlock/microgateway-cni/4.4.1/templates/_helpers.tpl
new file mode 100644
index 000000000..996491a87
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/_helpers.tpl
@@ -0,0 +1,101 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "airlock-microgateway-cni.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Convert an image configuration object into an image ref string.
+*/}}
+{{- define "airlock-microgateway-cni.image" -}}
+ {{- if .digest -}}
+ {{- printf "%s@%s" .repository .digest -}}
+ {{- else if .tag -}}
+ {{- printf "%s:%s" .repository .tag -}}
+ {{- else -}}
+ {{- printf "%s" .repository -}}
+ {{- end -}}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 50 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
+and the longest suffix is 13 characters.
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "airlock-microgateway-cni.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 50 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 50 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 50 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "airlock-microgateway-cni.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "airlock-microgateway-cni.labels" -}}
+helm.sh/chart: {{ include "airlock-microgateway-cni.chart" . }}
+{{ include "airlock-microgateway-cni.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- with .Values.commonLabels }}
+{{ toYaml .}}
+{{- end }}
+{{- end }}
+
+{{/*
+Common labels without component
+*/}}
+{{- define "airlock-microgateway-cni.labelsWithoutComponent" -}}
+{{- $labels := fromYaml (include "airlock-microgateway-cni.labels" .) -}}
+{{ unset $labels "app.kubernetes.io/component" | toYaml }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "airlock-microgateway-cni.selectorLabels" -}}
+app.kubernetes.io/component: cni-plugin-installer
+app.kubernetes.io/instance: {{ .Release.Name }}
+app.kubernetes.io/name: {{ include "airlock-microgateway-cni.name" . }}
+{{- end }}
+
+{{/*
+Create the name of the service account to use for the CNI Plugin
+*/}}
+{{- define "airlock-microgateway-cni.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "airlock-microgateway-cni.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{- define "airlock-microgateway-cni.isSemver" -}}
+{{- regexMatch `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` . -}}
+{{- end -}}
+
+{{- define "airlock-microgateway-cni.docsVersion" -}}
+{{- if and (eq "true" (include "airlock-microgateway-cni.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
+ {{- $version := (semver .Chart.AppVersion) -}}
+ {{- $version.Major }}.{{ $version.Minor -}}
+{{- else -}}
+ {{- print "latest" -}}
+{{- end -}}
+{{- end -}}
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/clusterrole.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/clusterrole.yaml
new file mode 100644
index 000000000..ef88ac783
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/clusterrole.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+ - patch
+{{- end -}}
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/clusterrolebinding.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/clusterrolebinding.yaml
new file mode 100644
index 000000000..04f87cb0f
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/clusterrolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end -}}
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/configmap.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/configmap.yaml
new file mode 100644
index 000000000..b880116ef
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/configmap.yaml
@@ -0,0 +1,22 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+data:
+ plugin-conf.json: |-
+ {
+ "type": "{{ include "airlock-microgateway-cni.fullname" . }}",
+ "debug": {{ eq .Values.config.logLevel "debug" }},
+ "logFilePath": "/var/log/{{ include "airlock-microgateway-cni.fullname" . }}.log",
+ "kubernetes": {
+ "kubeconfig": "{{ .Values.config.cniNetDir }}/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig",
+ "excludeNamespaces": {{ toJson .Values.config.excludeNamespaces }}
+ }
+ }
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/daemonset.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/daemonset.yaml
new file mode 100644
index 000000000..4ba9f2669
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/daemonset.yaml
@@ -0,0 +1,136 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "airlock-microgateway-cni.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ kubectl.kubernetes.io/default-container: cni-installer
+ {{- with mustMerge .Values.podAnnotations .Values.commonAnnotations}}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 8 }}
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ - args:
+ - --log-level
+ - "{{ .Values.config.logLevel }}"
+ env:
+ - name: CNI_NETWORK_CONFIG
+ valueFrom:
+ configMapKeyRef:
+ key: plugin-conf.json
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ - name: CNI_BIN_DIR
+ value: /host/opt/cni/bin
+ - name: CNI_NET_DIR
+ value: /host/etc/cni/net.d
+ - name: KUBECONFIG_FILE_NAME
+ value: "{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig"
+ - name: INSTALL_MODE
+ value: {{ .Values.config.installMode }}
+ - name: KUBERNETES_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ image: {{ include "airlock-microgateway-cni.image" .Values.image }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ name: cni-installer
+ {{- with .Values.resources }}
+ resources:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ startupProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 5
+ initialDelaySeconds: 3
+ periodSeconds: 3
+ timeoutSeconds: 3
+ readinessProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 1
+ periodSeconds: 60
+ timeoutSeconds: 3
+ securityContext:
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ - mountPath: /run/cni-installer
+ name: cni-installer-status
+ hostNetwork: true
+ priorityClassName: system-node-critical
+ restartPolicy: Always
+ securityContext:
+ fsGroup: 0
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ serviceAccountName: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ terminationGracePeriodSeconds: 5
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ tolerations:
+ - effect: NoSchedule
+ operator: Exists
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
+ - emptyDir: {}
+ name: cni-installer-status
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/network-attachment-definition.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/network-attachment-definition.yaml
new file mode 100644
index 000000000..5d657e309
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/network-attachment-definition.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.multusNetworkAttachmentDefinition.create -}}
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Values.multusNetworkAttachmentDefinition.namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/scc-role.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/scc-role.yaml
new file mode 100644
index 000000000..862748692
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/scc-role.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+- apiGroups:
+ - security.openshift.io
+ resourceNames:
+ - privileged
+ resources:
+ - securitycontextconstraints
+ verbs:
+ - use
+{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/scc-rolebinding.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/scc-rolebinding.yaml
new file mode 100644
index 000000000..ebd02982c
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/scc-rolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+subjects:
+- kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+{{- end -}}
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/serviceaccount.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/serviceaccount.yaml
new file mode 100644
index 000000000..3dc8d58ea
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/serviceaccount.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with mustMerge .Values.serviceAccount.annotations .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/tests/rbac.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/tests/rbac.yaml
new file mode 100644
index 000000000..744799333
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/tests/rbac.yaml
@@ -0,0 +1,64 @@
+{{- if .Values.tests.enabled -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+subjects:
+- kind: ServiceAccount
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
+rules:
+- apiGroups:
+ - "apps"
+ resources:
+ - daemonsets
+ resourceNames:
+ - {{ include "airlock-microgateway-cni.fullname" . }}
+ verbs:
+ - get
+ - watch
+ - list
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ - pods/log
+ verbs:
+ - get
+ - list
+{{- if .Values.rbac.createSCCRole }}
+- apiGroups:
+ - security.openshift.io
+ resourceNames:
+ - privileged
+ resources:
+ - securitycontextconstraints
+ verbs:
+ - use
+{{- end -}}
+{{- end -}}
diff --git a/charts/airlock/microgateway-cni/4.4.1/templates/tests/test-install.yaml b/charts/airlock/microgateway-cni/4.4.1/templates/tests/test-install.yaml
new file mode 100644
index 000000000..12d8c8de7
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/templates/tests/test-install.yaml
@@ -0,0 +1,103 @@
+{{- if .Values.tests.enabled -}}
+apiVersion: v1
+kind: Pod
+metadata:
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-test-install"
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: test-install
+ annotations:
+ helm.sh/hook: test
+ helm.sh/hook-delete-policy: before-hook-creation
+spec:
+ restartPolicy: Never
+ containers:
+ - name: test
+ image: "bitnami/kubectl:{{ .Capabilities.KubeVersion.Major }}.{{ .Capabilities.KubeVersion.Minor }}"
+ securityContext:
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ readOnly: true
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ readOnly: true
+ command:
+ - sh
+ - -c
+ - |
+ set -eu
+
+ fail() {
+ echo "Error: ${1}"
+ echo ""
+ echo 'CNI installer logs:'
+ kubectl logs -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}} -c cni-installer
+ exit 1
+ }
+
+ containsMGWCNIConf() {
+ cat "${1}" | grep -qe '"type":.*"{{ include "airlock-microgateway-cni.fullname" . }}"'
+ }
+
+ if ! kubectl rollout status --timeout=60s -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}}; then
+ fail 'CNI DaemonSet rollout did not complete within timeout'
+ fi
+
+ echo "Checking whether CNI binary was installed"
+ if ! [ -f "/host/opt/cni/bin/{{ include "airlock-microgateway-cni.fullname" . }}" ]; then
+ fail 'CNI binary was not installed'
+ fi
+
+ echo "Checking whether CNI kubeconfig was installed"
+ if ! [ -f "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig" ]; then
+ fail 'CNI kubeconfig was not created'
+ fi
+
+ echo "Checking whether CNI configuration was written"
+ case {{ .Values.config.installMode }} in
+ "chained")
+ for file in "/host/etc/cni/net.d/"*.conflist; do
+ if containsMGWCNIConf "${file}"; then
+ echo "Success"
+ exit 0
+ fi
+ done
+ ;;
+ "standalone")
+ if containsMGWCNIConf "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}.conflist"; then
+ echo "Success"
+ exit 0
+ fi
+ ;;
+ "manual")
+ echo "- Skipping because we are in 'manual' install mode"
+ echo "Success"
+ exit 0
+ ;;
+ esac
+
+ fail 'Configuration for plugin "{{ include "airlock-microgateway-cni.fullname" . }}" was not found'
+ serviceAccountName: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
+{{- end -}}
diff --git a/charts/airlock/microgateway-cni/4.4.1/values.schema.json b/charts/airlock/microgateway-cni/4.4.1/values.schema.json
new file mode 100644
index 000000000..e087bd700
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/values.schema.json
@@ -0,0 +1,225 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "properties": {
+ "nameOverride": {
+ "type": "string"
+ },
+ "fullnameOverride": {
+ "type": "string"
+ },
+ "commonLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "commonAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "imagePullSecrets": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "additionalProperties": true
+ }
+ },
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "podAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "podLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "resources": {
+ "type": "object"
+ },
+ "nodeSelector": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "affinity": {
+ "type": "object"
+ },
+ "rbac": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "createSCCRole": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "create",
+ "createSCCRole"
+ ],
+ "additionalProperties": false
+ },
+ "privileged": {
+ "type": "boolean"
+ },
+ "serviceAccount": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "annotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "annotations",
+ "create",
+ "name"
+ ],
+ "additionalProperties": false
+ },
+ "multusNetworkAttachmentDefinition": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "namespace": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "create",
+ "namespace"
+ ],
+ "additionalProperties": false
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "installMode": {
+ "type": "string",
+ "enum": [
+ "chained",
+ "standalone",
+ "manual"
+ ]
+ },
+ "logLevel": {
+ "type": "string",
+ "enum": [
+ "debug",
+ "info",
+ "warn",
+ "error"
+ ]
+ },
+ "cniNetDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "cniBinDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "excludeNamespaces": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "cniBinDir",
+ "cniNetDir",
+ "excludeNamespaces",
+ "installMode",
+ "logLevel"
+ ],
+ "additionalProperties": false
+ },
+ "tests": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "enabled"
+ ],
+ "additionalProperties": false
+ },
+ "global": {
+ "type": "object"
+ }
+ },
+ "required": [
+ "affinity",
+ "commonAnnotations",
+ "commonLabels",
+ "config",
+ "fullnameOverride",
+ "image",
+ "imagePullSecrets",
+ "multusNetworkAttachmentDefinition",
+ "nameOverride",
+ "nodeSelector",
+ "podAnnotations",
+ "podLabels",
+ "privileged",
+ "rbac",
+ "resources",
+ "serviceAccount",
+ "tests"
+ ],
+ "additionalProperties": false,
+ "definitions": {
+ "StringMap": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "Image": {
+ "type": "object",
+ "properties": {
+ "repository": {
+ "type": "string",
+ "minLength": 1
+ },
+ "tag": {
+ "type": "string"
+ },
+ "digest": {
+ "type": "string",
+ "pattern": "^$|^sha256:[a-f0-9]{64}$"
+ },
+ "pullPolicy": {
+ "type": "string",
+ "enum": [
+ "Always",
+ "IfNotPresent",
+ "Never"
+ ]
+ }
+ },
+ "required": [
+ "digest",
+ "pullPolicy",
+ "repository",
+ "tag"
+ ],
+ "additionalProperties": false
+ }
+ }
+}
diff --git a/charts/airlock/microgateway-cni/4.4.1/values.yaml b/charts/airlock/microgateway-cni/4.4.1/values.yaml
new file mode 100644
index 000000000..d1116802d
--- /dev/null
+++ b/charts/airlock/microgateway-cni/4.4.1/values.yaml
@@ -0,0 +1,85 @@
+# -- Allows overriding the name to use instead of "microgateway-cni".
+nameOverride: ""
+# -- Allows overriding the name to use as full name of resources.
+fullnameOverride: ""
+# -- Labels to add to all resources.
+commonLabels: {}
+# -- Annotations to add to all resources.
+commonAnnotations: {}
+# -- ImagePullSecrets to use when pulling images.
+imagePullSecrets: []
+# - name: myRegistryKeySecretName
+
+# Specifies the Airlock Microgateway CNI image.
+image:
+ # -- Image repository from which to pull the Airlock Microgateway CNI image.
+ repository: "quay.io/airlock/microgateway-cni"
+ # -- Image tag to pull.
+ tag: "4.4.1"
+ # -- SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a").
+ # Overrides tag when specified.
+ digest: "sha256:fa2f5d8587024f0d0b29505204c964002cfd7facf79748ccc98b8caf1a70f0d8"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+# -- Annotations to add to all Pods.
+podAnnotations: {}
+# -- Labels to add to all Pods.
+podLabels: {}
+# -- Resource restrictions to apply to the CNI installer container.
+resources:
+ requests:
+ cpu: 10m
+ memory: 100Mi
+# -- NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes.
+nodeSelector:
+ kubernetes.io/os: linux
+# -- Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes.
+affinity: {}
+# Configures the generation of RBAC Roles and RoleBindings.
+rbac:
+ # -- Whether to create RBAC resources which are required for the CNI plugin to function.
+ create: true
+ # -- (OpenShift) Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint.
+ createSCCRole: false
+# -- Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift).
+privileged: false
+# Configures the generation of the ServiceAccount.
+serviceAccount:
+ # -- Whether a ServiceAccount should be created.
+ create: true
+ # -- Annotations to add to the ServiceAccount.
+ annotations: {}
+ # -- Name of the ServiceAccount to use.
+ # If not set and create is true, a name is generated using the fullname template.
+ name: ""
+# Configures the generation of a NetworkAttachmentDefinition for use with Multus CNI (OpenShift)
+multusNetworkAttachmentDefinition:
+ # -- Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods.
+ create: false
+ # -- Namespace in which the NetworkAttachmentDefinition is deployed.
+ # Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces
+ # may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation
+ namespace: default
+# Parameters for the CNI installer configuration.
+config:
+ # -- Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers),
+ # as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift)
+ # or in `manual` mode, where no CNI network configuration is written.
+ installMode: "chained"
+ # -- Log level for the CNI installer and plugin.
+ logLevel: info
+ # -- Directory where the CNI config files reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node.
+ cniNetDir: "/etc/cni/net.d"
+ # -- Directory where the CNI plugin binaries reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node.
+ cniBinDir: "/opt/cni/bin"
+ # -- Namespaces for which this CNI plugin should not apply any modifications.
+ excludeNamespaces:
+ - kube-system
+tests:
+ # -- Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts).
+ # If set to false, `helm test` will not run any tests.
+ enabled: false
diff --git a/charts/airlock/microgateway/4.2.3/.helmignore b/charts/airlock/microgateway/4.2.3/.helmignore
index 101ff5ac5..8561d2892 100644
--- a/charts/airlock/microgateway/4.2.3/.helmignore
+++ b/charts/airlock/microgateway/4.2.3/.helmignore
@@ -21,8 +21,7 @@
.idea/
*.tmproj
.vscode/
-# CRDs kustomization.yaml
-/crds/kustomization.yaml
+
# Helm unit tests
/tests
/validation
diff --git a/charts/airlock/microgateway/4.2.3/Chart.yaml b/charts/airlock/microgateway/4.2.3/Chart.yaml
index a248008ae..f4d50752c 100644
--- a/charts/airlock/microgateway/4.2.3/Chart.yaml
+++ b/charts/airlock/microgateway/4.2.3/Chart.yaml
@@ -9,15 +9,15 @@ annotations:
- name: Airlock Microgateway Forum
url: https://forum.airlock.com/
catalog.cattle.io/certified: partner
- catalog.cattle.io/display-name: Airlock Microgateway
+ catalog.cattle.io/display-name: Airlock Microgateway CNI
catalog.cattle.io/kube-version: '>=1.25.0-0'
- catalog.cattle.io/release-name: microgateway
- charts.openshift.io/name: Airlock Microgateway
+ catalog.cattle.io/release-name: microgateway-cni
+ charts.openshift.io/name: Airlock Microgateway CNI
apiVersion: v2
appVersion: 4.2.3
-description: A Helm chart for deploying the Airlock Microgateway
+description: A Helm chart for deploying the Airlock Microgateway CNI plugin
home: https://www.airlock.com/en/microgateway
-icon: file://assets/icons/microgateway.svg
+icon: file://assets/icons/microgateway-cni.svg
keywords:
- WAF
- Web Application Firewall
@@ -30,14 +30,13 @@ keywords:
- Filtering
- DevSecOps
- shift left
-- control plane
-- Operator
+- CNI
kubeVersion: '>=1.25.0-0'
maintainers:
- email: support@airlock.com
name: Airlock
url: https://www.airlock.com/
-name: microgateway
+name: microgateway-cni
sources:
- https://github.com/airlock/microgateway
type: application
diff --git a/charts/airlock/microgateway/4.2.3/README.md b/charts/airlock/microgateway/4.2.3/README.md
index 1a75b9b2c..2c5823d06 100644
--- a/charts/airlock/microgateway/4.2.3/README.md
+++ b/charts/airlock/microgateway/4.2.3/README.md
@@ -1,4 +1,4 @@
-# Airlock Microgateway
+# Airlock Microgateway CNI
![Version: 4.2.3](https://img.shields.io/badge/Version-4.2.3-informational?style=flat-square) ![AppVersion: 4.2.3](https://img.shields.io/badge/AppVersion-4.2.3-informational?style=flat-square)
@@ -40,61 +40,43 @@ Check the official documentation at **[docs.airlock.com](https://docs.airlock.co
The instructions below provide a quick start guide. Detailed information are provided in the **[manual](https://docs.airlock.com/microgateway/latest/)**.
## Prerequisites
-* [Airlock Microgateway CNI](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni)
-* [Airlock Microgateway License](#obtain-airlock-microgateway-license)
-* [cert-manager](https://cert-manager.io/)
* [helm](https://helm.sh/docs/intro/install/) (>= v3.8.0)
-In order to use Airlock Microgateway you need a license and the cert-manager. You may either request a community license free of charge or purchase a premium license.
-For an easy start in non-production environments, you may deploy the same cert-manager we are using internally for testing.
-### Obtain Airlock Microgateway License
-1. Either request a community or premium license
- * Community license: [airlock.com/microgateway-community](https://airlock.com/en/microgateway-community)
- * Premium license: [airlock.com/microgateway-premium](https://airlock.com/en/microgateway-premium)
-2. Check your inbox and save the license file microgateway-license.txt locally.
-
-> See [Community vs. Premium editions in detail](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) to choose the right license type.
-### Deploy cert-manager
-```bash
-# Install cert-manager
-kubectl apply -k https://github.com/airlock/microgateway/examples/utilities/cert-manager/?ref=4.2.3
-
-# Wait for the cert-manager to be up and running
-kubectl -n cert-manager wait --for=condition=ready --timeout=600s pod -l app.kubernetes.io/instance=cert-manager
-```
-
-## Deploy Airlock Microgateway Operator
-
-> This guide assumes a microgateway-license.txt file is present in the working directory.
-
-1. Install CRDs and Operator.
+## Deploy Airlock Microgateway CNI
+1. Install the CNI Plugin with Helm.
+ > **Note**: Certain environments such as OpenShift or GKE require non-default configurations when installing the CNI plugin. For the most common setups, values files are provided in the [chart folder](/deploy/charts/airlock-microgateway-cni).
```bash
- # Create namespace
- kubectl create namespace airlock-microgateway-system
-
- # Install License
- kubectl -n airlock-microgateway-system create secret generic airlock-microgateway-license --from-file=microgateway-license.txt
-
- # Install Operator (CRDs are included via the standard Helm 3 mechanism, i.e. Helm will handle initial installation but not upgrades)
- helm install airlock-microgateway -n airlock-microgateway-system oci://quay.io/airlockcharts/microgateway --version '4.2.3' --wait
+ # Standard setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.2.3'
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
```
+ ```bash
+ # GKE setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.2.3' -f https://raw.githubusercontent.com/airlock/microgateway/4.2.3/deploy/charts/airlock-microgateway-cni/gke-values.yaml
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ ```bash
+ # OpenShift setup
+ helm install airlock-microgateway-cni -n openshift-operators oci://quay.io/airlockcharts/microgateway-cni --version '4.2.3' -f https://raw.githubusercontent.com/airlock/microgateway/4.2.3/deploy/charts/airlock-microgateway-cni/openshift-values.yaml
+ kubectl -n openshift-operators rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ **Important:** On OpenShift, all pods which should be protected by Airlock Microgateway must explicitly reference the Airlock Microgateway CNI NetworkAttachmentDefinition via the annotation `k8s.v1.cni.cncf.io/networks` (see [documentation](https://docs.airlock.com/microgateway/latest/#data/1658483168033.html) for details).
2. (Recommended) You can verify the correctness of the installation with `helm test`.
```bash
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.2.3'
- helm test airlock-microgateway -n airlock-microgateway-system --logs
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.2.3'
+ # Standard and GKE setup
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.2.3'
+ helm test airlock-microgateway-cni -n kube-system --logs
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.2.3'
+ ```
+ ```bash
+ # OpenShift setup
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.2.3'
+ helm test airlock-microgateway-cni -n openshift-operators --logs
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.2.3'
```
-### Upgrading CRDs
-
-The `helm install/upgrade` command currently does not support upgrading CRDs that already exist in the cluster.
-CRDs should instead be manually upgraded before upgrading the Operator itself via the following command:
-```bash
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=4.2.3 --server-side --force-conflicts
-```
-
-**Note**: Certain GitOps solutions such as e.g. Argo CD or Flux CD have their own mechanisms for automatically upgrading CRDs included with Helm charts.
+ Consult our [documentation](https://docs.airlock.com/microgateway/latest/#data/1699611533587.html) in case of any installation error.
## Support
@@ -107,45 +89,33 @@ For the community edition, check our **[Airlock community forum](https://forum.a
| Key | Type | Default | Description |
|-----|------|---------|-------------|
+| affinity | object | `{}` | Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes. |
| commonAnnotations | object | `{}` | Annotations to add to all resources. |
| commonLabels | object | `{}` | Labels to add to all resources. |
-| crds.skipVersionCheck | bool | `false` | Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs. The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster when performing a "helm install/upgrade". |
-| engine.image.digest | string | `"sha256:9b0debeef611172aa5ca79c6b8cd045e56a3c883763ec62c0fa211bb86d35304"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| engine.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| engine.image.repository | string | `"quay.io/airlock/microgateway-engine"` | Image repository from which to pull the Airlock Microgateway Engine image. |
-| engine.image.tag | string | `"4.2.3"` | Image tag to pull. |
-| engine.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Engine container. |
-| engine.sidecar.podMonitor.create | bool | `false` | Whether to create a PodMonitor resource for monitoring. |
-| engine.sidecar.podMonitor.labels | object | `{}` | Labels to add to the PodMonitor. |
+| config.cniBinDir | string | `"/opt/cni/bin"` | Directory where the CNI plugin binaries reside on the host. |
+| config.cniNetDir | string | `"/etc/cni/net.d"` | Directory where the CNI config files reside on the host. |
+| config.excludeNamespaces | list | `["kube-system"]` | Namespaces for which this CNI plugin should not apply any modifications. |
+| config.installMode | string | `"chained"` | Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers), as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. |
+| config.logLevel | string | `"info"` | Log level for the CNI installer and plugin. |
| fullnameOverride | string | `""` | Allows overriding the name to use as full name of resources. |
+| image.digest | string | `"sha256:82b5924866840f783cce2e9b4095b7710a0e1cbf555498e8723ca811ca916290"` | SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a"). Overrides tag when specified. |
+| image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| image.repository | string | `"quay.io/airlock/microgateway-cni"` | Image repository from which to pull the Airlock Microgateway CNI image. |
+| image.tag | string | `"4.2.3"` | Image tag to pull. |
| imagePullSecrets | list | `[]` | ImagePullSecrets to use when pulling images. |
-| license.secretName | string | `"airlock-microgateway-license"` | Name of the secret containing the "microgateway-license.txt" key. |
-| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway". |
-| networkValidator.image.digest | string | `"sha256:a212cef6665b2464a41307162fa96e9623aa45c3fa32c39d320eae8b730d81e0"` | SHA256 image digest to pull (in the format "sha256:a212cef6665b2464a41307162fa96e9623aa45c3fa32c39d320eae8b730d81e0"). Overrides tag when specified. |
-| networkValidator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| networkValidator.image.repository | string | `"cgr.dev/chainguard/busybox"` | Image repository from which to pull the busybox image for the Airlock Microgateway Network Validator init-container. |
-| networkValidator.image.tag | string | `""` | Image tag to pull. |
-| operator.affinity | object | `{}` | Custom affinity to apply to the operator Deployment. Used to influence the scheduling. |
-| operator.config.logLevel | string | `"info"` | Operator application log level. |
-| operator.image.digest | string | `"sha256:a429dfdb636e76bfbee7c59cfbe53d5f396c1f5603d5cb187f6283301ba4d7ba"` | SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63"). Overrides tag when specified. |
-| operator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| operator.image.repository | string | `"quay.io/airlock/microgateway-operator"` | Image repository from which to pull the Airlock Microgateway Operator image. |
-| operator.image.tag | string | `"4.2.3"` | Image tag to pull. |
-| operator.nodeSelector | object | `{}` | Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes. |
-| operator.podAnnotations | object | `{}` | Annotations to add to all Pods. |
-| operator.podLabels | object | `{}` | Labels to add to all Pods. |
-| operator.rbac.create | bool | `true` | Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function. |
-| operator.replicaCount | int | `2` | Number of replicas for the operator Deployment. |
-| operator.resources | object | `{}` | Resource restrictions to apply to the operator container. |
-| operator.serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
-| operator.serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
-| operator.serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
-| operator.serviceAnnotations | object | `{}` | Annotations to add to the Service. |
-| operator.serviceLabels | object | `{}` | Labels to add to the Service. |
-| operator.serviceMonitor.create | bool | `false` | Whether to create a ServiceMonitor resource for monitoring. |
-| operator.serviceMonitor.labels | object | `{}` | Labels to add to the ServiceMonitor. |
-| operator.tolerations | list | `[]` | Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes. |
-| operator.updateStrategy | object | `{"type":"RollingUpdate"}` | Specifies the operator update strategy. |
+| multusNetworkAttachmentDefinition.create | bool | `false` | Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods. |
+| multusNetworkAttachmentDefinition.namespace | string | `"default"` | Namespace in which the NetworkAttachmentDefinition is deployed. Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation |
+| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway-cni". |
+| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes. |
+| podAnnotations | object | `{}` | Annotations to add to all Pods. |
+| podLabels | object | `{}` | Labels to add to all Pods. |
+| privileged | bool | `false` | Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift). |
+| rbac.create | bool | `true` | Whether to create RBAC resources which are required for the CNI plugin to function. |
+| rbac.createSCCRole | OpenShift | `false` | Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint. |
+| resources | object | `{"requests":{"cpu":"10m","memory":"100Mi"}}` | Resource restrictions to apply to the CNI installer container. |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
+| serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
+| serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
| tests.enabled | bool | `false` | Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts). If set to false, `helm test` will not run any tests. |
## License
diff --git a/charts/airlock/microgateway/4.2.3/crds/accesscontrols.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/accesscontrols.microgateway.airlock.com.yaml
deleted file mode 100644
index dea146ba5..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/accesscontrols.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,124 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: accesscontrols.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: AccessControl
- listKind: AccessControlList
- plural: accesscontrols
- singular: accesscontrol
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: AccessControl specifies the options to perform access control with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies how the Airlock Microgateway Engine performs access control.
- properties:
- policies:
- description: Policies configures access control policies.
- items:
- properties:
- authorization:
- description: Authorization configures how requests are authorized. An empty object value {} disables authorization.
- properties:
- authentication:
- description: Authentication specifies that clients need to be authenticated with the provided method.
- properties:
- oidc:
- description: OIDC configures client authentication using OpenID Connect.
- properties:
- oidcRelyingPartyRef:
- description: OIDCRelyingPartyRef configures how the Airlock Microgateway Engine interacts with the OpenID provider.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - oidcRelyingPartyRef
- type: object
- type: object
- type: object
- identityPropagation:
- description: IdentityPropagation configures how the authenticated user's identity is communicated to the protected application.
- properties:
- actions:
- description: Actions specifies the propagation actions.
- items:
- properties:
- identityPropagationRef:
- description: IdentityPropagationRef selects an IdentityPropagation to apply.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - identityPropagationRef
- type: object
- type: array
- onFailure:
- description: |-
- OnFailure configures what should happen, if an identity propagation fails. Meaning of the possible values:
- _Pass_: The request should be forwarded to the upstream, without including the information from the failed identity propagations.
- enum:
- - Pass
- type: string
- required:
- - actions
- - onFailure
- type: object
- required:
- - authorization
- type: object
- maxItems: 1
- minItems: 1
- type: array
- required:
- - policies
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/contentsecurities.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/contentsecurities.microgateway.airlock.com.yaml
deleted file mode 100644
index e5f25bf30..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/contentsecurities.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,127 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: contentsecurities.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: ContentSecurity
- listKind: ContentSecurityList
- plural: contentsecurities
- singular: contentsecurity
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: ContentSecurity specifies the options to secure an upstream web application with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies the options to secure an upstream web application with a Microgateway Engine container.
- properties:
- apiProtection:
- description: |-
- APIProtection defines the relevant configurations to protect APIs.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- openAPIRef:
- description: |-
- OpenAPIRef selects the relevant OpenAPI configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- filter:
- description: |-
- Filter defines the set of filters, e.g. Airlock Deny Rules, to be applied to incoming requests
- to protect against various attack patterns.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- denyRulesRef:
- description: |-
- DenyRulesRef selects the relevant DenyRules configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- headerRewritesRef:
- description: |-
- HeaderRewritesRef selects the relevant HeaderRewrites.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- limitsRef:
- description: |-
- LimitsRef selects the relevant Limits configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- parserRef:
- description: |-
- ParserRef selects the relevant Parser configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/denyrules.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/denyrules.microgateway.airlock.com.yaml
deleted file mode 100644
index 00e680b58..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/denyrules.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,1508 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: denyrules.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: DenyRules
- listKind: DenyRulesList
- plural: denyrules
- singular: denyrules
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- DenyRules configures request filtering using Airlock built-in and custom deny rules.
- Deny rules establish a negative security model. They define prohibited patterns which, when a match is found in a request, lead to it being blocked from reaching the upstream web application.
- To handle possible false positives, lower the security level or define fine-granular deny rule exceptions
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired deny rules behavior.
- properties:
- request:
- description: Request configures deny rules for downstream requests.
- properties:
- builtIn:
- description: BuiltIn configures the built-in deny rules.
- properties:
- exceptions:
- description: Exceptions allows to define exceptions for specific requests and deny rules.
- items:
- description: |-
- DenyRulesException defines an exception for deny rules. Exceptions may be defined by any or a combination of the following elements: blockedData (the request data causing a block) or requestConditions (properties of a request without taking into consideration the reason why a request has been blocked).
- At least one of blockedData and requestConditions must be set.
- properties:
- blockedData:
- description: BlockedData defines an exception based on the request data causing the block.
- properties:
- header:
- description: |-
- Header defines an exception based on a blocked header.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: |-
- JSON defines an exception based on a blocked JSON property.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- jsonPath:
- description: |-
- JSONPath defines the JSONPath pattern to match the path within the JSON.
- Expressions in JSONPath i.e. `?(expr)` are not supported.
- minLength: 1
- type: string
- key:
- description: |-
- Key defines the key of the JSON property.
- At most one of key and value can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of the JSON property.
- At most one of key and value can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- parameter:
- description: |-
- Parameter defines an exception based on a blocked parameter.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- source:
- default: Any
- description: Source defines the source of the parameter.
- enum:
- - Query
- - Post
- - Any
- type: string
- value:
- description: Value defines the value of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- path:
- description: |-
- Path defines an exception based on the blocked path.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- pathSegment:
- description: |-
- PathSegment defines an exception based on a blocked path segment.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- segments:
- description: Segments defines the position of a segment within the path.
- properties:
- index:
- description: Index specifies an exact path segment position by index (0-based).
- minimum: 0
- type: integer
- type: object
- value:
- description: Value defines the value of a path segment.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines an exception based on a property of a request without taking into consideration the reason why a request has been blocked.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- ruleKeys:
- description: RuleKeys restricts the exception to a set of deny rules.
- items:
- description: |-
- A deny rule name can be any of the following values:
- ENCODING |
- EXPLOIT |
- HPP |
- HTML |
- IDOR |
- LDAP |
- NOSQL |
- OGNL |
- PHP |
- PROTOCOL |
- SANITY |
- SCANNING |
- SQL |
- TEMPLATE |
- UNIXCMD |
- WINCMD |
- XSS
- enum:
- - ENCODING
- - EXPLOIT
- - HPP
- - HTML
- - IDOR
- - LDAP
- - NOSQL
- - OGNL
- - PHP
- - PROTOCOL
- - SANITY
- - SCANNING
- - SQL
- - TEMPLATE
- - UNIXCMD
- - WINCMD
- - XSS
- type: string
- minItems: 1
- type: array
- type: object
- type: array
- overrides:
- description: Overrides allows to override the builtIn settings for specific deny rules.
- items:
- description: DenyRulesOverride allows to override the builtIn settings for specific deny rules.
- properties:
- conditions:
- description: Conditions select which built-in deny rules' settings will be adjusted.
- properties:
- ruleKeys:
- description: RuleKeys is a list of built-in deny rule names.
- items:
- description: |-
- A deny rule name can be any of the following values:
- ENCODING |
- EXPLOIT |
- HPP |
- HTML |
- IDOR |
- LDAP |
- NOSQL |
- OGNL |
- PHP |
- PROTOCOL |
- SANITY |
- SCANNING |
- SQL |
- TEMPLATE |
- UNIXCMD |
- WINCMD |
- XSS
- enum:
- - ENCODING
- - EXPLOIT
- - HPP
- - HTML
- - IDOR
- - LDAP
- - NOSQL
- - OGNL
- - PHP
- - PROTOCOL
- - SANITY
- - SCANNING
- - SQL
- - TEMPLATE
- - UNIXCMD
- - WINCMD
- - XSS
- type: string
- minItems: 1
- type: array
- types:
- description: Types defines the type of attributes the override should be applied on. If Types are defined without any RuleKeys the override is applied to all deny rules.
- items:
- description: |-
- A deny rule override type name can be any of the following values:
- Header |
- Parameter |
- Path |
- JSON
- enum:
- - Header
- - Parameter
- - Path
- - PathSegment
- - JSON
- type: string
- minItems: 0
- type: array
- type: object
- settings:
- description: Settings override the corresponding properties for the selected rules.
- properties:
- level:
- description: Level specifies the filter strength.
- enum:
- - Unfiltered
- - Basic
- - Standard
- - Strict
- type: string
- threatHandlingMode:
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: array
- settings:
- description: Settings contains the keys which will be adjusted.
- properties:
- level:
- default: Standard
- description: Level represents a set of deny rules with different filter strengths.
- enum:
- - Unfiltered
- - Basic
- - Standard
- - Strict
- type: string
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a deny rule matches.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- custom:
- description: Custom allows configuring additional deny rules.
- properties:
- rules:
- description: Rules defines list of additional deny rules.
- items:
- properties:
- blockData:
- description: BlockData specifies the request data which should cause a block.
- properties:
- header:
- description: |-
- Header specifies to block requests containing a matching header.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: |-
- JSON specifies to block requests containing a matching JSON property in the body.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- key:
- description: Key defines the key of a JSON object.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a JSON object.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- parameter:
- description: |-
- Parameter specifies to block requests containing a matching parameter.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- path:
- description: |-
- Path specifies to block requests with a matching path.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- matcher:
- description: Matcher specifies which path to block.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- pathSegment:
- description: |-
- PathSegment specifies to block requests containing a matching path segment.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- segments:
- description: |-
- Segments restricts which path segments are filtered by this rule.
- If not specified, all segments of a path are filtered.
- properties:
- index:
- description: Index restricts the rule to the path segment at this index (0-based).
- minimum: 0
- type: integer
- type: object
- value:
- description: Value specifies which path segment values to block.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- required:
- - value
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this rule to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- ruleKey:
- description: RuleKey defines a technical key for the deny rule. Must be unique.
- minLength: 1
- pattern: ^[A-Z][A-Z0-9_]*$
- type: string
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a deny rule matches.
- enum:
- - Block
- - LogOnly
- type: string
- required:
- - blockData
- - ruleKey
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - ruleKey
- x-kubernetes-list-type: map
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/envoyclusters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/envoyclusters.microgateway.airlock.com.yaml
deleted file mode 100644
index 90983db5d..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/envoyclusters.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: envoyclusters.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyCluster
- listKind: EnvoyClusterList
- plural: envoyclusters
- singular: envoycluster
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: EnvoyCluster is an additional Envoy Cluster resource which is added to those defined by the Airlock Microgateway.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired additional Envoy cluster.
- properties:
- value:
- description: Value defines the Envoy Cluster which is added to those configured by the Airlock Microgateway.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/envoyconfigurations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/envoyconfigurations.microgateway.airlock.com.yaml
deleted file mode 100644
index 6b73e0bfc..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/envoyconfigurations.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,182 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: envoyconfigurations.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyConfiguration
- listKind: EnvoyConfigurationList
- plural: envoyconfigurations
- singular: envoyconfiguration
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .status.status
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- EnvoyConfiguration is the Schema for the envoyconfigurations API
- {{% notice warning %}} EnvoyConfiguration resources may contain sensitive information and thus RBAC permissions should be granted with care. {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: EnvoyConfigurationSpec defines the desired state of EnvoyConfiguration
- properties:
- envoyResources:
- description: EnvoyResources defines the desired state for each resource type.
- properties:
- clusters:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- endpoints:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- extensions:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- listeners:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- routes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- runtimes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- scopedRoutes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- secrets:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- type: object
- nodeID:
- description: NodeID defines the ID of the envoy node
- type: string
- required:
- - nodeID
- type: object
- status:
- description: EnvoyConfigurationStatus defines the observed state of EnvoyConfiguration
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- description: Last time the condition transitioned from one status to another.
- format: date-time
- type: string
- message:
- description: A human-readable message indicating details about the transition.
- type: string
- reason:
- description: The reason for the condition's last transition.
- type: string
- status:
- description: Status of the condition, one of True, False, Unknown.
- type: string
- type:
- description: Type of EnvoyConfiguration condition.
- type: string
- required:
- - status
- - type
- type: object
- type: array
- status:
- type: string
- xds:
- properties:
- resourceTypes:
- additionalProperties:
- description: XdsResourceTypeSyncStatus defines the sync status of xDS for a specific resource type
- properties:
- errorMessage:
- description: ErrorMessage defines an optional message why the currently served resources of this resource type are rejected by the client.
- type: string
- resources:
- additionalProperties:
- description: XdsResourceStatus defines the status of xDS for a specific resource
- properties:
- version:
- description: Version defines the version which is currently served for this resource.
- type: string
- required:
- - version
- type: object
- description: Resources defines the resources which are currently served for this resource type.
- type: object
- status:
- description: Status defines the current sync status of this resource type.
- type: string
- version:
- description: Version defines the version which is currently served for this resource type.
- type: string
- required:
- - resources
- - status
- - version
- type: object
- description: ResourceTypes defines the sync statuses for each resource type.
- type: object
- version:
- description: Version defines the version of the underlying xDS snapshot.
- type: integer
- required:
- - version
- type: object
- required:
- - status
- - xds
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/headerrewrites.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/headerrewrites.microgateway.airlock.com.yaml
deleted file mode 100644
index 9df1a1db2..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/headerrewrites.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,759 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: headerrewrites.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: HeaderRewrites
- listKind: HeaderRewritesList
- plural: headerrewrites
- singular: headerrewrites
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: HeaderRewrites is the Schema for the headerrewrites API
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired header rewriting behavior.
- properties:
- request:
- description: Request defines manipulations on upstream request headers.
- properties:
- add:
- description: Add defines which request headers will be added before forwarding to the upstream.
- properties:
- custom:
- description: |-
- Custom allows configuring additional upstream request headers.
- Add selected headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which request headers will be forwarded to the upstream.
- This can either be allHeaders or matchingHeaders.
- Default: matchingHeaders: {...}
- properties:
- allHeaders:
- description: AllHeaders specifies that all request headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which request headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- standardHeaders:
- default: true
- description: StandardHeaders defines whether the request headers which are forwarded to the upstream will be restricted to a set of common request headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which request headers will be removed before forwarding to the upstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- alternativeForwardedHeaders:
- default: true
- description: |-
- AlternativeForwardedHeaders removes downstream request headers which could potentially
- be abused to alter the upstream's view of the remote connection.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- response:
- description: Response defines manipulations on upstream response headers.
- properties:
- add:
- description: Add defines which response headers will be added before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- csp:
- default: true
- description: |-
- CSP sets a content security policy which allows only same-origin requests except for images
- if the 'Content-Security-Policy' header is not set by the upstream.
- type: boolean
- featurePolicy:
- default: false
- description: |-
- FeaturePolicy sets a feature policy which prevents cross-origin use of several browser features
- if the 'Feature-Policy' header is not set by the upstream.
- **Deprecated:** Use permissionsPolicy instead.
- type: boolean
- hsts:
- default: true
- description: HSTS enforces the use of HTTPS if the 'Strict-Transport-Security' header is not already set by the upstream.
- type: boolean
- hstsPreload:
- default: false
- description: HSTSPreload enforces the use of HTTPS including for subdomains and enables HSTS preload.
- type: boolean
- permissionsPolicy:
- default: true
- description: |-
- PermissionsPolicy sets a permissions policy which prevents cross-origin use of several browser features
- if the 'Permissions-Policy' header is not set by the upstream.
- type: boolean
- referrerPolicy:
- default: true
- description: |-
- ReferrerPolicy ensures that no 'Referer' header is sent for cross-origin requests
- if the 'Referrer-Policy' header is not set by the upstream.
- type: boolean
- xContentTypeOptions:
- default: true
- description: XContentTypeOptions sets 'X-Content-Type-Options' to 'nosniff' if it is not set by the upstream.
- type: boolean
- xFrameOptions:
- default: true
- description: XFrameOptions sets 'X-Frame-Options' to SAMEORIGIN if it is not set by the upstream.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which response headers will be forwarded to the downstream.
- This can either be allHeaders or matchingHeaders.
- Default: allHeaders: {}
- properties:
- allHeaders:
- description: AllHeaders specifies that all response headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which response headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response header.
- properties:
- standardHeaders:
- default: false
- description: StandardHeaders defines whether the response headers which are forwarded to the downstream will be restricted to a set of common response headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which response headers will be removed before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- auth:
- description: Auth defines the categories of headers concerning authentication.
- properties:
- basic:
- default: false
- description: Basic removes upstream response headers that advise clients to authenticate with Basic Authentication.
- type: boolean
- negotiate:
- default: true
- description: Negotiate removes upstream response headers that advise clients to authenticate with Negotiate.
- type: boolean
- ntlm:
- default: true
- description: |-
- NTLM removes upstream response headers that advise clients to authenticate with NTLM.
- By default, these headers are removed, because NTLM pass-through is not supported.
- type: boolean
- type: object
- informationLeakage:
- description: InformationLeakage defines the categories of headers concerning information leakage.
- properties:
- application:
- default: true
- description: Application removes upstream response headers that leak information about the deployed software.
- type: boolean
- server:
- default: true
- description: Server removes upstream response headers that leak information about the server.
- type: boolean
- type: object
- permissiveCors:
- default: true
- description: PermissiveCORS removes upstream response headers for CORS (Cross-Origin Resource Sharing) which have no restrictions and therefore reduce client-side security.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured remove operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- settings:
- description: Settings configures the HeaderRewrites filter.
- properties:
- operationalMode:
- default: Production
- description: OperationalMode defines the behavior of the filter. In integration mode more information is logged about the requests and responses.
- enum:
- - Production
- - Integration
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.2.3/crds/identitypropagations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/identitypropagations.microgateway.airlock.com.yaml
deleted file mode 100644
index 9b8c69599..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/identitypropagations.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: identitypropagations.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: IdentityPropagation
- listKind: IdentityPropagationList
- plural: identitypropagations
- singular: identitypropagation
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: IdentityPropagation specifies the desired identity propagation.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired identity propagation.
- properties:
- header:
- description: Header configures identity propagation via a request header.
- properties:
- name:
- description: Name of the header to set.
- minLength: 1
- type: string
- value:
- description: Value to propagate to the application.
- properties:
- source:
- description: Source from which to extract the value.
- properties:
- metadata:
- description: Metadata specifies to extract a value from an Envoy dynamic filter metadata key.
- properties:
- key:
- description: Key specifies the metadata key from which to load the value, e.g. `some_payload.aud`.
- minLength: 1
- type: string
- namespace:
- description: Namespace specifies the metadata namespace within which the lookup should be performed, e.g. `envoy.filters.http.jwt_authn`.
- minLength: 1
- type: string
- required:
- - key
- - namespace
- type: object
- oidc:
- description: OIDC specifies to extract a value from the result of an OpenID Connect flow.
- properties:
- idToken:
- description: IDToken specifies to extract the value from the OpenID Connect ID Token.
- properties:
- claim:
- description: Claim selects the JWT claim from which to extract the value.
- minLength: 1
- type: string
- required:
- - claim
- type: object
- required:
- - idToken
- type: object
- type: object
- required:
- - source
- type: object
- required:
- - name
- - value
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/limits.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/limits.microgateway.airlock.com.yaml
deleted file mode 100644
index 23adafe3b..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/limits.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,453 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: limits.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Limits
- listKind: LimitsList
- plural: limits
- singular: limits
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Limits contains the configuration for limits.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired limits behavior.
- properties:
- request:
- description: Request defines the limits for requests.
- properties:
- limited:
- description: Limited enables limits on request scope.
- properties:
- exceptions:
- description: Exceptions defines limit exceptions.
- items:
- description: LimitsException defines an exception for limits.
- properties:
- length:
- description: Length defines an exception for length limits based on the data element exceeding the limit.
- properties:
- json:
- description: JSON defines a key and value length limit exception for a JSON property.
- properties:
- jsonPath:
- description: |-
- JSONPath restricts the exception to JSON properties with a matching JSONPath.
- Expressions in JSONPath i.e. `?(expr)` are not supported.
- minLength: 1
- type: string
- required:
- - jsonPath
- type: object
- parameter:
- description: Parameter defines a name and value length limit exception for a parameter.
- properties:
- name:
- description: Name restricts the exception to parameters with a matching name.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- source:
- default: Any
- description: Source restricts the exception to parameters of this kind.
- enum:
- - Query
- - Post
- - Any
- type: string
- required:
- - name
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this exception to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- type: object
- type: array
- general:
- description: General defines general request limits.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Ki
- description: BodySize limits the total size of the request body. It specifies the number of bytes (0 = unlimited). This limit is effective only for requests that are parsed (e.g. JSON data). File uploads are not affected by this limit.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- pathLength:
- anyOf:
- - type: integer
- - type: string
- default: 1Ki
- description: PathLength defines the maximum path length for requests.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- json:
- description: JSON defines the limits for JSON requests.
- properties:
- elementCount:
- default: 10000
- description: ElementCount defines the maximum number of keys and array items in the whole JSON document (recursive).
- format: int64
- type: integer
- keyCount:
- default: 250
- description: KeyCount defines the maximum number of keys of a single JSON object (non-recursive).
- format: int64
- type: integer
- keyLength:
- anyOf:
- - type: integer
- - type: string
- default: "128"
- description: KeyLength defines the maximum length for JSON keys.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- nestingDepth:
- default: 100
- description: NestingDepth defines the maximum depth of nesting for JSON objects and JSON arrays.
- format: int64
- type: integer
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: 8Ki
- description: ValueLength defines the maximum length for JSON values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- parameter:
- description: Parameter defines the limits for request parameters.
- properties:
- count:
- default: 128
- description: Count defines the maximum number of request parameters.
- format: int64
- type: integer
- nameLength:
- anyOf:
- - type: integer
- - type: string
- default: "128"
- description: NameLength defines the maximum length for parameter names.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: 8Ki
- description: ValueLength defines the maximum length for parameter values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- unlimited:
- description: Unlimited disables all limits on request scope.
- type: object
- type: object
- settings:
- description: Settings configures the limits filter.
- properties:
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a limit hits.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.2.3/crds/oidcproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/oidcproviders.microgateway.airlock.com.yaml
deleted file mode 100644
index 69116b40a..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/oidcproviders.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,301 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: oidcproviders.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OIDCProvider
- listKind: OIDCProviderList
- plural: oidcproviders
- singular: oidcprovider
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- OIDCProvider specifies an OpenID Provider (OP).
-
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - ID token and access token are stored in cookies and are thus sent to the accessing client.
- {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of an OpenID Provider.
- properties:
- static:
- description: Static configures an OpenID Provider by explicitly specifying all endpoints.
- properties:
- endpoints:
- description: Endpoints specifies the OpenID Provider endpoints.
- properties:
- authorization:
- description: Authorization specifies the endpoint to which the authorization request is sent.
- properties:
- uri:
- description: URI specifies the endpoint address.
- format: uri
- minLength: 1
- pattern: ^(http|https)://.*$
- type: string
- required:
- - uri
- type: object
- token:
- description: Token configures the endpoint from which the access, ID and refresh tokens are obtained.
- properties:
- tls:
- description: TLS defines TLS settings.
- properties:
- certificateVerification:
- description: CertificateVerification specifies how the certificate presented by the server is verified.
- properties:
- custom:
- description: |-
- Custom explicitly specifies how the server certificate should be verified.
- Typical use cases include specifying a custom CA and SAN match when working with self-signed certificates or pinning a specific public key.
- properties:
- allowedSANs:
- description: |-
- AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
- that is to say, the SAN is verified if at least one matcher is matched.
- AllowedSANs requires trustedCA to be set.
- items:
- description: |-
- TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers.
- properties:
- matcher:
- description: Matcher defines the string matcher for the SAN value.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- sanType:
- description: SanType defines the type of SAN matcher.
- enum:
- - DNS
- - Email
- - URI
- - IPAddress
- type: string
- required:
- - matcher
- - sanType
- type: object
- minItems: 1
- type: array
- certificatePinning:
- description: |-
- CertificatePinning defines constraints the presented certificate must fulfill.
- If more than one constraint is configured only one must be satisfied.
- At least one of allowedSPKIs and allowedHashes must be set.
- properties:
- allowedHashes:
- description: |-
- AllowedHashes is a list of hex-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- allowedSPKIs:
- description: |-
- AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- type: object
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- type: object
- disabled:
- description: |-
- Disabled specifies to trust any certificate without verification.
- THIS IS INSECURE AND SHOULD ONLY BE USED FOR TESTING.
- type: object
- publicCAs:
- description: PublicCAs specifies to only accept certificates with a SAN matching "uri" and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Engine's base image.
- type: object
- type: object
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- type: object
- uri:
- description: URI specifies the endpoint address.
- format: uri
- minLength: 1
- pattern: ^(http|https)://.*$
- type: string
- required:
- - uri
- type: object
- required:
- - authorization
- - token
- type: object
- required:
- - endpoints
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/oidcrelyingparties.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/oidcrelyingparties.microgateway.airlock.com.yaml
deleted file mode 100644
index 708e48aaf..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/oidcrelyingparties.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,219 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: oidcrelyingparties.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OIDCRelyingParty
- listKind: OIDCRelyingPartyList
- plural: oidcrelyingparties
- singular: oidcrelyingparty
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- OIDCRelyingParty specifies how the Airlock Microgateway Engine interacts with an OpenID Provider (OP).
-
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - ID token and access token are stored in cookies and are thus sent to the accessing client.
- {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the OIDC Relying Party configuration.
- properties:
- clientID:
- description: ClientID specifies the OIDCRelyingParty "client_id".
- minLength: 1
- type: string
- credentials:
- description: Credentials used for client authentication on the back-channel with the authorization server.
- properties:
- clientSecret:
- description: ClientSecret authenticates with the client password issued by the OpenID Provider (OP).
- properties:
- method:
- default: BasicAuth
- description: Method specifies in which format the client secret is sent with the authorization request.
- enum:
- - BasicAuth
- - FormURLEncoded
- type: string
- secretRef:
- description: SecretRef specifies the kubernetes secret containing the client password with key "client.secret".
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- required:
- - clientSecret
- type: object
- oidcProviderRef:
- description: OIDCProviderRef selects the OpenID Provider (OP) used to authenticate users.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- pathMapping:
- description: PathMapping configures the action matching.
- properties:
- logoutPath:
- description: LogoutPath specifies which request paths should initiate a logout.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- redirectPath:
- description: RedirectPath specifies which request paths should be interpreted as a response from the authorization endpoint.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- required:
- - logoutPath
- - redirectPath
- type: object
- redirectURI:
- description: |-
- RedirectURI configures the "redirect_uri" parameter included in the authorization request.
- May contain envoy command operators, e.g. '%REQ(:x-forwarded-proto)%://%REQ(:authority)%/callback'.
- minLength: 1
- type: string
- required:
- - clientID
- - credentials
- - oidcProviderRef
- - pathMapping
- - redirectURI
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/openapis.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/openapis.microgateway.airlock.com.yaml
deleted file mode 100644
index fafda725e..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/openapis.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,167 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: openapis.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OpenAPI
- listKind: OpenAPIList
- plural: openapis
- singular: openapi
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: OpenAPI contains the configuration for the OpenAPI specification.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired OpenAPI specification.
- properties:
- response:
- description: Response defines the validation behaviour for responses.
- properties:
- secured:
- description: Secured enables response checking.
- properties:
- validation:
- default: Lax
- description: Validation defines the validation mode for responses.
- enum:
- - Lax
- - Strict
- type: string
- type: object
- unsecured:
- description: Unsecured disables response checking.
- type: object
- type: object
- settings:
- description: Settings defines the settings to configure OpenAPI specification enforcement.
- properties:
- logging:
- description: Logging specifies the access log behavior.
- properties:
- maxFailedSubvalidations:
- default: 10
- description: MaxFailedSubvalidations defines the maximum number of failed subvalidations being logged.
- format: int64
- type: integer
- type: object
- schema:
- description: Schema configures the OpenAPI specification.
- properties:
- source:
- description: Source specifies the OpenAPI specification to be enforced.
- properties:
- configMapRef:
- description: ConfigMapRef references the configmap by its name containing the well-known key 'openapi.json'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- required:
- - source
- type: object
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- validation:
- description: Validation specifies the patterns for the validation behavior.
- properties:
- authentication:
- description: Authentication defines the settings for the authentication scheme.
- properties:
- oAuth2:
- description: OAuth2 specifies the OAuth2 parameters.
- properties:
- allowedParameters:
- description: AllowedParameters specifies the allowed parameters for the authentication scheme.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined allowed parameters.
- properties:
- standardParameters:
- default: true
- description: StandardParameters defines whether the allowed parameters should be expanded by the set of common parameters.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional allowed parameters.
- items:
- minLength: 1
- type: string
- minItems: 1
- type: array
- type: object
- type: object
- oidc:
- description: Oidc specifies the OIDC parameters.
- properties:
- allowedParameters:
- description: AllowedParameters specifies the allowed parameters for the authentication scheme.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined allowed parameters.
- properties:
- standardParameters:
- default: true
- description: StandardParameters defines whether the allowed parameters should be expanded by the set of common parameters.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional allowed parameters.
- items:
- minLength: 1
- type: string
- minItems: 1
- type: array
- type: object
- type: object
- type: object
- type: object
- required:
- - schema
- type: object
- required:
- - settings
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.2.3/crds/parsers.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/parsers.microgateway.airlock.com.yaml
deleted file mode 100644
index b450d488b..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/parsers.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,358 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: parsers.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Parser
- listKind: ParserList
- plural: parsers
- singular: parser
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Parser contains the configuration for content parsers (default and custom).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired parser behavior.
- properties:
- request:
- description: Request defines the parsing for downstream requests.
- properties:
- custom:
- description: Custom allows configuring additional rules for parser selection.
- properties:
- rules:
- description: |-
- Rules defines a custom set prepended before built-in rules of enabled request parsers.
- Disable all built-in parsers to overrule them completely.
- items:
- properties:
- action:
- description: |-
- Action specifies what should happen when a request condition matches.
- Only one of parse or skip can be set.
- properties:
- parse:
- description: Parse activates the configured parser.
- properties:
- form:
- description: Form activates the Form parser.
- type: object
- json:
- description: JSON activates the JSON parser.
- type: object
- multipart:
- description: Multipart activates the multipart parser.
- type: object
- type: object
- skip:
- description: Skip disables any content parsing
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this rule to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- required:
- - action
- - requestConditions
- type: object
- type: array
- type: object
- defaultContentType:
- default: application/x-www-form-urlencoded
- description: DefaultContentType specifies the content-type header which should be injected into the request before parser selection if it is not already present and the request has a body.
- minLength: 1
- type: string
- parsers:
- description: Parsers defines the configuration for the available content parsers.
- properties:
- form:
- description: Form defines the configuration for the form parser.
- properties:
- enable:
- default: true
- description: Enable defines whether form payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*urlencoded.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as form arguments.
- minLength: 1
- type: string
- type: object
- json:
- description: JSON defines the configuration for the JSON parser.
- properties:
- enable:
- default: true
- description: Enable defines whether json payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*json.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as JSON.
- minLength: 1
- type: string
- type: object
- multipart:
- description: Multipart defines the configuration for the multipart parser.
- properties:
- enable:
- default: true
- description: Enable defines whether multipart payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*multipart.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as a multipart payload.
- minLength: 1
- type: string
- type: object
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.2.3/crds/sidecargateways.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/sidecargateways.microgateway.airlock.com.yaml
deleted file mode 100644
index 04b5f45d3..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/sidecargateways.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,731 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: sidecargateways.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: SidecarGateway
- listKind: SidecarGatewayList
- plural: sidecargateways
- singular: sidecargateway
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .status.status
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: SidecarGateway contains the configuration how to configure the Airlock Microgateway Engine when used as Sidecar Container within the Pod of an application.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired sidecar gateway behavior.
- properties:
- applications:
- description: Applications defines applications which run on different ports.
- items:
- properties:
- containerPort:
- default: 8080
- description: |-
- ContainerPort refers to the container port.
- This must be a valid port number, 0 < x < 65536.
- format: int32
- maximum: 65535
- minimum: 1
- type: integer
- downstream:
- description: Downstream defines the downstream configuration for this application
- properties:
- protocol:
- description: |-
- Protocol defines the exposed HTTP protocol version. At most one of http1, http2 and auto can be set.
- Default: auto: {}
- properties:
- auto:
- description: Auto specifies that the protocol should be inferred.
- properties:
- http2:
- description: HTTP2 specifies the settings for when HTTP/2 is inferred.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- http1:
- description: HTTP1 specifies that the client is assumed to speak HTTP/1.1.
- type: object
- http2:
- description: HTTP2 specifies that the client is assumed to speak HTTP/2.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- remoteIP:
- description: |-
- RemoteIP defines how the remote IP of a client is propagated.
- Default: xff: {...}
- properties:
- connectionIP:
- description: ConnectionIP configures to use the source IP address of the direct downstream connection.
- type: object
- customHeader:
- description: CustomHeader specifies to use a custom header for remote IP extraction.
- properties:
- headerName:
- description: HeaderName specifies the name of the custom header containing the remote IP.
- minLength: 1
- type: string
- required:
- default: true
- description: Required specifies if the custom header is required. If true and not available the request will be rejected with 403.
- type: boolean
- required:
- - headerName
- type: object
- xff:
- description: XFF configures to use the standard 'X-Forwarded-For' header for IP extraction.
- properties:
- numTrustedHops:
- default: 1
- description: NumTrustedHops specifies to extract the client's originating IP from the nth rightmost entry in the X-Forwarded-For header. With the default value of 1, the IP is extracted from the rightmost entry.
- format: int32
- minimum: 1
- type: integer
- type: object
- type: object
- requestNormalizations:
- description: RequestNormalizations defines a set of normalization actions which are applied to the request before route matching.
- properties:
- mergeSlashes:
- default: true
- description: MergeSlashes ensures that adjacent slashes in the path are merged into one.
- type: boolean
- normalizePath:
- default: true
- description: NormalizePath ensures normalization according to RFC 3986 without case normalization.
- type: boolean
- type: object
- restrictions:
- description: Restrictions defines restrictions for downstream.
- properties:
- http:
- description: HTTP defines limits for the HTTP protocol.
- properties:
- headersLength:
- anyOf:
- - type: integer
- - type: string
- default: 60Ki
- description: HeadersLength defines maximum size of all request headers combined. Requests that exceed this limit will receive a 431 response.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- timeouts:
- description: Timeouts defines timeouts for downstream
- properties:
- http:
- description: HTTP defines the settings for HTTP timeouts.
- properties:
- idle:
- default: 5m
- description: |-
- Idle defines the settings for the idle timeout when no data is sent or received.
- A value of 0 will completely disable the timeout.
- Default: 5m
- type: string
- maxDuration:
- default: 5m
- description: |-
- MaxDuration defines the total duration for a HTTP request/response stream.
- A value of 0 will completely disable the timeout.
- Default: 5m
- type: string
- requestHeaders:
- default: 10s
- description: |-
- RequestHeaders defines the duration before all request headers must be received.
- A value of 0 will completely disable the timeout.
- Default: 10s
- type: string
- type: object
- type: object
- tls:
- description: TLS defines the TLS settings.
- properties:
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- clientCertificate:
- description: |-
- ClientCertificate defines the TLS settings for verification of client certificates.
- At most one of ignored, optional and required can be set.
- Default: ignored: {}
- properties:
- ignored:
- description: Ignored disables verification of the client certificate.
- type: object
- optional:
- description: |-
- Optional enables verification of the client certificate if one is presented.
- In this mode only trustedCA and crl settings can be configured since certificatePinning and allowedSANs require a client certificate.
- properties:
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- required:
- - trustedCA
- type: object
- required:
- description: |-
- Required contains settings for client certificate verification. A client must present a valid certificate.
- At least one of trustedCA and certificatePinning must be set.
- properties:
- allowedSANs:
- description: |-
- AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
- that is to say, the SAN is verified if at least one matcher is matched.
- AllowedSANs requires trustedCA to be set.
- items:
- description: |-
- TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers.
- properties:
- matcher:
- description: Matcher defines the string matcher for the SAN value.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- sanType:
- description: SanType defines the type of SAN matcher.
- enum:
- - DNS
- - Email
- - URI
- - IPAddress
- type: string
- required:
- - matcher
- - sanType
- type: object
- minItems: 1
- type: array
- certificatePinning:
- description: |-
- CertificatePinning defines the constraints a client certificate must fulfill.
- If more than one constraint is configured only one must be satisfied.
- At least one of allowedSPKIs and allowedHashes must be set.
- properties:
- allowedHashes:
- description: |-
- AllowedHashes is a list of hex-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- allowedSPKIs:
- description: |-
- AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- type: object
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- type: object
- type: object
- enable:
- default: false
- description: Enable defines if the downstream connection is encrypted.
- type: boolean
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- secretRef:
- description: SecretRef defines the reference to the TLS server certificate (secret of type kubernetes.io/tls).
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- xfcc:
- description: |-
- XFCC defines the handling of X-Forwarded-Client-Cert header. Meaning of the possible values:
- _Sanitize_: Do not send the XFCC header to the next hop. This is the default value.
- _ForwardOnly_: When the client connection is mTLS (Mutual TLS), forward the XFCC header in the request.
- _AppendAndForward_: When the client connection is mTLS, append the client certificate information to the request’s XFCC header and forward it.
- _SanitizeAndSet_: When the client connection is mTLS, reset the XFCC header with the client certificate information and send it to the next hop.
- _AlwaysForwardOnly_: Always forward the XFCC header in the request, regardless of whether the client connection is mTLS.
- Note: When forwarding the XFCC header in the request you might have to adjust the header length restrictions (See sidecargateway.spec.applications.downstream.restrictions.http)
- enum:
- - Sanitize
- - ForwardOnly
- - AppendAndForward
- - SanitizeAndSet
- - AlwaysForwardOnly
- type: string
- type: object
- type: object
- envoyHTTPFilterRefs:
- description: EnvoyHTTPFilterRefs selects the relevant EnvoyHTTPFilters.
- properties:
- prepend:
- description: Prepend selects the relevant EnvoyHTTPFilters which are added before those configured by the Airlock Microgateway.
- items:
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: array
- type: object
- routes:
- description: Routes defines the security configurations for different paths. The first matching route (from top to bottom) applies.
- items:
- description: |-
- SidecarGatewayApplicationRoute defines the security configurations for different paths.
- At most one of secured and unsecured can be set.
- Default: secured: {...}
- properties:
- pathPrefix:
- default: /
- description: PathPrefix defines the path prefix used during route selection.
- minLength: 1
- type: string
- secured:
- description: Secured enables WAF processing for this route.
- properties:
- accessControlRef:
- description: |-
- AccessControlRef selects the relevant AccessControl configuration resource.
- If undefined, Airlock Microgateway does not perform any access control.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- contentSecurityRef:
- description: |-
- ContentSecurityRef selects the relevant ContentSecurity configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- unsecured:
- description: |-
- Unsecured disables all WAF functionality and therefore protection for this route.
- WARNING: Using this setting when the application is exposed to untrusted downstream traffic is highly discouraged.
- type: object
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - pathPrefix
- x-kubernetes-list-type: map
- telemetryRef:
- description: |-
- TelemetryRef selects the relevant Telemetry configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- upstream:
- description: Upstream defines the upstream configuration for this application
- properties:
- protocol:
- description: |-
- Protocol defines HTTP protocol version used to communicate with the upstream. At most one of http1, http2 and auto can be set.
- Default: auto: {}
- properties:
- auto:
- description: Auto specifies to use the protocol negotiated via TLS ALPN (if supported) or HTTP/1.1 as fallback.
- properties:
- http2:
- description: HTTP2 specifies the settings for when HTTP/2 is inferred.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- http1:
- description: HTTP1 specifies to use HTTP/1.1.
- type: object
- http2:
- description: HTTP2 specifies to use HTTP/2.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- timeouts:
- description: Timeouts defines the timeout settings.
- properties:
- http:
- description: HTTP defines the settings for HTTP timeouts.
- properties:
- idle:
- description: |-
- Timeout defines the settings for http timeouts. If this setting is not specified, the value of applications[].downstream.timeouts.http.idle is inherited.
- A value of 0 will completely disable the timeout.
- type: string
- maxDuration:
- default: 15s
- description: |-
- MaxDuration defines the total duration for a HTTP request/response stream.
- Default: 15s
- type: string
- type: object
- type: object
- tls:
- description: TLS defines the TLS settings.
- properties:
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- enable:
- default: false
- description: Enable defines if the upstream connection is encrypted.
- type: boolean
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- type: object
- type: object
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - containerPort
- x-kubernetes-list-type: map
- envoyClusterRefs:
- description: EnvoyClusterRefs selects the relevant EnvoyClusters.
- items:
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- podSelector:
- description: PodSelector defines to which Pods the configuration will be applied to.
- properties:
- matchLabels:
- additionalProperties:
- type: string
- description: MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels.
- type: object
- type: object
- required:
- - applications
- type: object
- status:
- description: Most recently observed status of the SidecarGateway which is populated by the system. This data is read-only and may not be up to date.
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- description: Last time the condition transitioned from one status to another.
- format: date-time
- type: string
- message:
- description: A human-readable message indicating details about the transition.
- type: string
- reason:
- description: The reason for the condition's last transition.
- type: string
- status:
- description: Status of the condition, one of True, False, Unknown.
- type: string
- type:
- description: Type of SidecarGateway condition.
- type: string
- required:
- - status
- - type
- type: object
- type: array
- pods:
- items:
- properties:
- envoyConfig:
- description: EnvoyConfig indicates the name of the EnvoyConfig CR which references the SidecarGateway.
- type: string
- name:
- description: Name indicates the name of the Pod which references the SidecarGateway.
- type: string
- required:
- - name
- type: object
- type: array
- status:
- type: string
- required:
- - status
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/charts/airlock/microgateway/4.2.3/crds/telemetries.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.2.3/crds/telemetries.microgateway.airlock.com.yaml
deleted file mode 100644
index b55fcba21..000000000
--- a/charts/airlock/microgateway/4.2.3/crds/telemetries.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,81 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
- name: telemetries.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Telemetry
- listKind: TelemetryList
- plural: telemetries
- singular: telemetry
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Telemetry contains the configuration for telemetry (logging, metrics & tracing).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired telemetry behavior.
- properties:
- correlation:
- description: Correlation defines the correlation aspects of Telemetry.
- properties:
- request:
- description: Request defines the request related correlation settings of Telemetry.
- properties:
- allowDownstreamRequestID:
- default: true
- description: AllowDownstreamRequestID defines whether trace sampling will consider a provided x-request-id.
- type: boolean
- alterRequestID:
- default: true
- description: AlterRequestID defines whether to alter the UUID to reflect the trace sampling decision. If disabled no modification to the UUID will be performed, this may break tracing in the upstream.
- type: boolean
- type: object
- type: object
- logging:
- description: Logging defines the logging aspects of Telemetry.
- properties:
- accessLog:
- description: AccessLog defines the access log settings of Telemetry.
- properties:
- format:
- description: Format defines the Access Log format of the sidecar.
- properties:
- json:
- description: JSON defines the Access Log format as JSON.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.2.3/gke-values.yaml b/charts/airlock/microgateway/4.2.3/gke-values.yaml
new file mode 100644
index 000000000..d6d5c21d1
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/gke-values.yaml
@@ -0,0 +1,4 @@
+# values for deploying on GKE
+
+config:
+ cniBinDir: "/home/kubernetes/bin"
diff --git a/charts/airlock/microgateway/4.2.3/openshift-values.yaml b/charts/airlock/microgateway/4.2.3/openshift-values.yaml
new file mode 100644
index 000000000..3b1d6cccd
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/openshift-values.yaml
@@ -0,0 +1,15 @@
+# values for deploying on OpenShift
+
+rbac:
+ createSCCRole: true
+
+privileged: true
+
+multusNetworkAttachmentDefinition:
+ create: true
+ namespace: default
+
+config:
+ installMode: "standalone"
+ cniNetDir: "/etc/cni/multus/net.d"
+ cniBinDir: "/var/lib/cni/bin"
diff --git a/charts/airlock/microgateway/4.2.3/questions.yml b/charts/airlock/microgateway/4.2.3/questions.yml
new file mode 100644
index 000000000..73ed44d64
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/questions.yml
@@ -0,0 +1,18 @@
+questions:
+ - variable: config.cniNetDir
+ required: true
+ type: string
+ label: CNI Network Configuration Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI config files reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your kubernetes host."
+ - variable: config.cniBinDir
+ required: true
+ type: string
+ label: CNI Plugin Binaries Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI plugin binaries reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your kubernetes host."
+ - variable: config.installMode
+ required: true
+ label: CNI Plugin Installation Mode
+ group: "CNI Settings"
+ description: "Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers) as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. Please refer to the CNI installation documentation (https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-cni) to correctly setup the CNI Plugin for your environment."
diff --git a/charts/airlock/microgateway/4.2.3/templates/NOTES.txt b/charts/airlock/microgateway/4.2.3/templates/NOTES.txt
index 8e7d84a8f..e8aa45888 100644
--- a/charts/airlock/microgateway/4.2.3/templates/NOTES.txt
+++ b/charts/airlock/microgateway/4.2.3/templates/NOTES.txt
@@ -1,22 +1,3 @@
-Thank you for installing Airlock Microgateway.
-If you have not already done so, make sure that Airlock Microgateway CNI is also installed on the cluster.
+Thank you for installing Airlock Microgateway CNI.
-For further information, please visit our documentation at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" .}}.
-Detailed CRD API reference documentation is also available at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" .}}/api/crds.
-{{ if .Values.crds.skipVersionCheck }}
-- CRD version check skipped
-{{- else }}
-{{- $outdatedCRDs := (include "airlock-microgateway.outdatedCRDs" .) -}}
-{{- if $outdatedCRDs -}}
- {{- fail (printf `
-
-Helm does not automatically upgrade CRDs from the chart's 'crds/' directory during 'helm install/upgrade'.
-Therefore, the CRDs must be manually upgraded with the following command before deploying this chart:
-
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=%s --server-side --force-conflicts
-
-If you are not using the helm install/upgrade command and instead rely on some other mechanism which is able to upgrade CRDs for deploying this chart, you can suppress this error by setting the helm value 'crds.skipVersionCheck=true'.`
- .Chart.AppVersion)
- -}}
-{{- end -}}
-{{- end -}}
+For further information, please visit our documentation at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" .}}.
diff --git a/charts/airlock/microgateway/4.2.3/templates/_helpers.tpl b/charts/airlock/microgateway/4.2.3/templates/_helpers.tpl
index 1c3bb34a2..996491a87 100644
--- a/charts/airlock/microgateway/4.2.3/templates/_helpers.tpl
+++ b/charts/airlock/microgateway/4.2.3/templates/_helpers.tpl
@@ -1,16 +1,14 @@
{{/*
Expand the name of the chart.
-We truncate at 49 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest explicit suffix is 14 characters.
*/}}
-{{- define "airlock-microgateway.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 49 | trimSuffix "-" }}
+{{- define "airlock-microgateway-cni.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Convert an image configuration object into an image ref string.
*/}}
-{{- define "airlock-microgateway.image" -}}
+{{- define "airlock-microgateway-cni.image" -}}
{{- if .digest -}}
{{- printf "%s@%s" .repository .digest -}}
{{- else if .tag -}}
@@ -22,19 +20,19 @@ Convert an image configuration object into an image ref string.
{{/*
Create a default fully qualified app name.
-We truncate at 36 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest implicit suffix is 27 characters.
+We truncate at 50 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
+and the longest suffix is 13 characters.
If release name contains chart name it will be used as a full name.
*/}}
-{{- define "airlock-microgateway.fullname" -}}
+{{- define "airlock-microgateway-cni.fullname" -}}
{{- if .Values.fullnameOverride }}
-{{- .Values.fullnameOverride | trunc 36 | trimSuffix "-" }}
+{{- .Values.fullnameOverride | trunc 50 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
-{{- .Release.Name | trunc 36 | trimSuffix "-" }}
+{{- .Release.Name | trunc 50 | trimSuffix "-" }}
{{- else }}
-{{- printf "%s-%s" .Release.Name $name | trunc 36 | trimSuffix "-" }}
+{{- printf "%s-%s" .Release.Name $name | trunc 50 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
@@ -42,88 +40,59 @@ If release name contains chart name it will be used as a full name.
{{/*
Create chart name and version as used by the chart label.
*/}}
-{{- define "airlock-microgateway.chart" -}}
+{{- define "airlock-microgateway-cni.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
-{{- define "airlock-microgateway.sharedLabels" -}}
-helm.sh/chart: {{ include "airlock-microgateway.chart" . }}
+{{- define "airlock-microgateway-cni.labels" -}}
+helm.sh/chart: {{ include "airlock-microgateway-cni.chart" . }}
+{{ include "airlock-microgateway-cni.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
-app.kubernetes.io/part-of: {{ .Chart.Name }}
{{- with .Values.commonLabels }}
{{ toYaml .}}
{{- end }}
{{- end }}
{{/*
-Common Selector labels
+Common labels without component
*/}}
-{{- define "airlock-microgateway.sharedSelectorLabels" -}}
-app.kubernetes.io/instance: {{ .Release.Name }}
+{{- define "airlock-microgateway-cni.labelsWithoutComponent" -}}
+{{- $labels := fromYaml (include "airlock-microgateway-cni.labels" .) -}}
+{{ unset $labels "app.kubernetes.io/component" | toYaml }}
{{- end }}
{{/*
-Restricted Container Security Context
+Selector labels
*/}}
-{{- define "airlock-microgateway.restrictedSecurityContext" -}}
-allowPrivilegeEscalation: false
-privileged: false
-runAsNonRoot: true
-capabilities:
- drop: ["ALL"]
-readOnlyRootFilesystem: true
-seccompProfile:
- type: RuntimeDefault
+{{- define "airlock-microgateway-cni.selectorLabels" -}}
+app.kubernetes.io/component: cni-plugin-installer
+app.kubernetes.io/instance: {{ .Release.Name }}
+app.kubernetes.io/name: {{ include "airlock-microgateway-cni.name" . }}
{{- end }}
-{{/* Precondition: May only be used if AppVersion is isSemver */}}
-{{- define "airlock-microgateway.supportedCRDVersionPattern" -}}
-{{- $version := (semver .Chart.AppVersion) -}}
-{{- if $version.Prerelease -}}
->= {{ $version.Major }}.{{ $version.Minor }}.{{ $version.Patch }}-{{ $version.Prerelease }}
-{{- else -}}
->= {{ $version.Major }}.{{ $version.Minor }}.0 || >= {{ $version.Major }}.{{ $version.Minor }}.{{ add1 $version.Patch }}-0
-{{- end -}}
-{{- end -}}
+{{/*
+Create the name of the service account to use for the CNI Plugin
+*/}}
+{{- define "airlock-microgateway-cni.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "airlock-microgateway-cni.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
-{{- define "airlock-microgateway.outdatedCRDs" -}}
-{{- if (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) -}}
- {{- $supportedVersion := (include "airlock-microgateway.supportedCRDVersionPattern" .) -}}
- {{- range $path, $_ := .Files.Glob "crds/*.yaml" -}}
- {{- $api := ($.Files.Get $path | fromYaml).metadata.name -}}
- {{- $crd := (lookup "apiextensions.k8s.io/v1" "CustomResourceDefinition" "" $api) -}}
- {{- $isOutdated := false -}}
- {{- if $crd -}}
- {{/* If CRD is already present in the cluster, it must have the minimum supported version */}}
- {{- $isOutdated = true -}}
- {{- if hasKey $crd.metadata "labels" -}}
- {{- $crdVersion := get $crd.metadata.labels "app.kubernetes.io/version" -}}
- {{- if (eq "true" (include "airlock-microgateway.isSemver" $crdVersion)) -}}
- {{- if (semverCompare $supportedVersion $crdVersion) }}
- {{- $isOutdated = false -}}
- {{- end }}
- {{- end -}}
- {{- end -}}
- {{- end -}}
- {{- if $isOutdated }}
-{{ base $path }}
- {{- end }}
- {{- end -}}
-{{- end -}}
-{{- end -}}
-
-{{- define "airlock-microgateway.isSemver" -}}
+{{- define "airlock-microgateway-cni.isSemver" -}}
{{- regexMatch `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` . -}}
{{- end -}}
-{{- define "airlock-microgateway.docsVersion" -}}
-{{- if and (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
+{{- define "airlock-microgateway-cni.docsVersion" -}}
+{{- if and (eq "true" (include "airlock-microgateway-cni.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
{{- $version := (semver .Chart.AppVersion) -}}
{{- $version.Major }}.{{ $version.Minor -}}
{{- else -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/clusterrole.yaml b/charts/airlock/microgateway/4.2.3/templates/clusterrole.yaml
new file mode 100644
index 000000000..ef88ac783
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/templates/clusterrole.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+ - patch
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/clusterrolebinding.yaml b/charts/airlock/microgateway/4.2.3/templates/clusterrolebinding.yaml
new file mode 100644
index 000000000..04f87cb0f
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/templates/clusterrolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/configmap.yaml b/charts/airlock/microgateway/4.2.3/templates/configmap.yaml
new file mode 100644
index 000000000..b880116ef
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/templates/configmap.yaml
@@ -0,0 +1,22 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+data:
+ plugin-conf.json: |-
+ {
+ "type": "{{ include "airlock-microgateway-cni.fullname" . }}",
+ "debug": {{ eq .Values.config.logLevel "debug" }},
+ "logFilePath": "/var/log/{{ include "airlock-microgateway-cni.fullname" . }}.log",
+ "kubernetes": {
+ "kubeconfig": "{{ .Values.config.cniNetDir }}/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig",
+ "excludeNamespaces": {{ toJson .Values.config.excludeNamespaces }}
+ }
+ }
diff --git a/charts/airlock/microgateway/4.2.3/templates/daemonset.yaml b/charts/airlock/microgateway/4.2.3/templates/daemonset.yaml
new file mode 100644
index 000000000..4ba9f2669
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/templates/daemonset.yaml
@@ -0,0 +1,136 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "airlock-microgateway-cni.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ kubectl.kubernetes.io/default-container: cni-installer
+ {{- with mustMerge .Values.podAnnotations .Values.commonAnnotations}}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 8 }}
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ - args:
+ - --log-level
+ - "{{ .Values.config.logLevel }}"
+ env:
+ - name: CNI_NETWORK_CONFIG
+ valueFrom:
+ configMapKeyRef:
+ key: plugin-conf.json
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ - name: CNI_BIN_DIR
+ value: /host/opt/cni/bin
+ - name: CNI_NET_DIR
+ value: /host/etc/cni/net.d
+ - name: KUBECONFIG_FILE_NAME
+ value: "{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig"
+ - name: INSTALL_MODE
+ value: {{ .Values.config.installMode }}
+ - name: KUBERNETES_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ image: {{ include "airlock-microgateway-cni.image" .Values.image }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ name: cni-installer
+ {{- with .Values.resources }}
+ resources:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ startupProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 5
+ initialDelaySeconds: 3
+ periodSeconds: 3
+ timeoutSeconds: 3
+ readinessProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 1
+ periodSeconds: 60
+ timeoutSeconds: 3
+ securityContext:
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ - mountPath: /run/cni-installer
+ name: cni-installer-status
+ hostNetwork: true
+ priorityClassName: system-node-critical
+ restartPolicy: Always
+ securityContext:
+ fsGroup: 0
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ serviceAccountName: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ terminationGracePeriodSeconds: 5
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ tolerations:
+ - effect: NoSchedule
+ operator: Exists
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
+ - emptyDir: {}
+ name: cni-installer-status
diff --git a/charts/airlock/microgateway/4.2.3/templates/network-attachment-definition.yaml b/charts/airlock/microgateway/4.2.3/templates/network-attachment-definition.yaml
new file mode 100644
index 000000000..5d657e309
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/templates/network-attachment-definition.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.multusNetworkAttachmentDefinition.create -}}
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Values.multusNetworkAttachmentDefinition.namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/_webhooks.gen.tpl b/charts/airlock/microgateway/4.2.3/templates/operator/_webhooks.gen.tpl
deleted file mode 100644
index 3c12e34e7..000000000
--- a/charts/airlock/microgateway/4.2.3/templates/operator/_webhooks.gen.tpl
+++ /dev/null
@@ -1,299 +0,0 @@
-{{/* AUTOGENERATED FILE DO NOT EDIT */}}
-
-{{/*
-Operator mutating webhooks
-*/}}
-{{- define "airlock-microgateway-operator.mutatingWebhooks" -}}
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /mutate-v1-pod
- failurePolicy: Fail
- name: mutate-pod.microgateway.airlock.com
- reinvocationPolicy: IfNeeded
- rules:
- - apiGroups:
- - ""
- apiVersions:
- - v1
- operations:
- - CREATE
- resources:
- - pods
- sideEffects: None
- objectSelector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
-{{- end }}
-
-{{/*
-Operator validating webhooks
-*/}}
-{{- define "airlock-microgateway-operator.validatingWebhooks" -}}
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-accesscontrol
- failurePolicy: Fail
- name: validate-accesscontrol.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - accesscontrols
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-denyrules
- failurePolicy: Fail
- name: validate-denyrules.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - denyrules
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-envoycluster
- failurePolicy: Fail
- name: validate-envoycluster.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - envoyclusters
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-envoyhttpfilter
- failurePolicy: Fail
- name: validate-envoyhttpfilter.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - envoyhttpfilters
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-headerrewrites
- failurePolicy: Fail
- name: validate-headerrewrites.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - headerrewrites
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-identitypropagation
- failurePolicy: Fail
- name: validate-identitypropagation.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - identitypropagations
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-limits
- failurePolicy: Fail
- name: validate-limits.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - limits
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-oidcprovider
- failurePolicy: Fail
- name: validate-oidcprovider.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - oidcproviders
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-oidcrelyingparty
- failurePolicy: Fail
- name: validate-oidcrelyingparty.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - oidcrelyingparties
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-openapi
- failurePolicy: Fail
- name: validate-openapi.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - openapis
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-parser
- failurePolicy: Fail
- name: validate-parser.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - parsers
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-sidecargateway
- failurePolicy: Fail
- name: validate-sidecargateway.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - sidecargateways
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-v1-pod
- failurePolicy: Fail
- name: validate-pod.microgateway.airlock.com
- rules:
- - apiGroups:
- - ""
- apiVersions:
- - v1
- operations:
- - CREATE
- - UPDATE
- resources:
- - pods
- sideEffects: None
- objectSelector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
-{{- end }}
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/configmap.yaml b/charts/airlock/microgateway/4.2.3/templates/operator/configmap.yaml
deleted file mode 100644
index 113d8a47b..000000000
--- a/charts/airlock/microgateway/4.2.3/templates/operator/configmap.yaml
+++ /dev/null
@@ -1,322 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-config
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-data:
- engine_bootstrap_config_template.yaml: |
- # Base configuration, admin interface on port 19000
- admin:
- address:
- socket_address:
- address: 127.0.0.1
- port_value: 19000
- dynamic_resources:
- cds_config:
- initial_fetch_timeout: 10s
- resource_api_version: V3
- api_config_source:
- api_type: GRPC
- transport_api_version: V3
- grpc_services:
- - envoy_grpc:
- cluster_name: xds_cluster
- set_node_on_first_message_only: true
- # Prevent Envoy Node from overloading the xDS server due to rejected configuration when using xDS SotW gRPC
- rate_limit_settings:
- max_tokens: 5
- fill_rate: 0.2
- lds_config:
- resource_api_version: V3
- initial_fetch_timeout: 10s
- api_config_source:
- api_type: GRPC
- transport_api_version: V3
- grpc_services:
- - envoy_grpc:
- cluster_name: xds_cluster
- set_node_on_first_message_only: true
- # Prevent Envoy Node from overloading the xDS server due to rejected configuration when using xDS SotW gRPC
- rate_limit_settings:
- max_tokens: 5
- fill_rate: 0.2
- static_resources:
- listeners:
- - name: probe
- address:
- socket_address:
- address: 0.0.0.0
- port_value: 19001
- filter_chains:
- - filters:
- - name: http_connection_manager
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- stat_prefix: http
- codec_type: AUTO
- http2_protocol_options:
- initial_connection_window_size: 1048576
- initial_stream_window_size: 65536
- max_concurrent_streams: 100
- route_config:
- name: probe
- virtual_hosts:
- - name: probe
- domains:
- - '*'
- routes:
- - name: ready
- match:
- path: /ready
- headers:
- - name: ':method'
- string_match:
- exact: 'GET'
- route:
- cluster: airlock_microgateway_engine_admin
- http_filters:
- - name: envoy.filters.http.router
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- - name: metrics
- address:
- socket_address:
- address: 0.0.0.0
- port_value: 19002
- filter_chains:
- - filters:
- - name: http_connection_manager
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- stat_prefix: http
- codec_type: AUTO
- http2_protocol_options:
- initial_connection_window_size: 1048576
- initial_stream_window_size: 65536
- max_concurrent_streams: 100
- route_config:
- name: metrics
- virtual_hosts:
- - name: metrics
- domains:
- - '*'
- routes:
- - name: metrics
- match:
- path: /metrics
- headers:
- - name: ':method'
- string_match:
- exact: 'GET'
- route:
- prefix_rewrite: '/stats/prometheus'
- cluster: airlock_microgateway_engine_admin
- http_filters:
- - name: envoy.filters.http.router
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- clusters:
- - name: xds_cluster
- connect_timeout: 1s
- type: STRICT_DNS
- load_assignment:
- cluster_name: xds_cluster
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: airlock-microgateway-operator-xds.$(OPERATOR_NAMESPACE).svc.cluster.local
- port_value: 13377
- typed_extension_protocol_options:
- envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
- '@type': type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
- explicit_http_config:
- http2_protocol_options:
- connection_keepalive:
- interval: 360s
- timeout: 5s
- transport_socket:
- name: envoy.transport_sockets.tls
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
- common_tls_context:
- tls_params:
- tls_minimum_protocol_version: TLSv1_3
- tls_maximum_protocol_version: TLSv1_3
- validation_context_sds_secret_config:
- name: validation_context_sds
- sds_config:
- resource_api_version: V3
- path_config_source:
- path: /etc/envoy/validation_context_sds_secret.yaml
- watched_directory:
- path: /etc/envoy/
- tls_certificate_sds_secret_configs:
- - name: tls_certificate_sds
- sds_config:
- resource_api_version: V3
- path_config_source:
- path: /etc/envoy/tls_certificate_sds_secret.yaml
- watched_directory:
- path: /etc/envoy/
- - name: airlock_microgateway_engine_admin
- connect_timeout: 1s
- type: STATIC
- load_assignment:
- cluster_name: airlock_microgateway_engine_admin
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: 127.0.0.1
- port_value: 19000
- typed_extension_protocol_options:
- envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
- '@type': type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
- explicit_http_config:
- http2_protocol_options:
- connection_keepalive:
- interval: 360s
- timeout: 5s
- stats_config:
- stats_tags:
- - tag_name: "category"
- regex: "\\.(category\\.([^.]+))"
- - tag_name: "rule_name"
- regex: "\\.(rule\\.([^.]+))"
- - tag_name: "limit_name"
- regex: "\\.(limit\\.([^.]+))"
- - tag_name: "threat_handling_mode"
- regex: "\\.(threat_handling_mode\\.([^.]+))"
- - tag_name: "envoy_cluster_name"
- regex: "\\.(cluster\\.([^.]+))"
- - tag_name: "version"
- regex: "\\.(version\\.([^.]+))"
- use_all_default_tags: true
- bootstrap_extensions:
- - name: airlock.bootstrap.engine_build_info
- typed_config:
- '@type': type.googleapis.com/airlock.extensions.bootstrap.stats.v1alpha.Stats
- application_log_config:
- log_format:
- text_format: '{"@timestamp":"%Y-%m-%dT%T.%e%z","log":{"logger":"%n","level":"%l","origin":{"file":{"name":"%g","line":%#},"function":"%!"}},"event":{"module":"envoy","dataset":"envoy.application"},"process":{"pid":%P,"thread":{"id":%t}},"ecs":{"version":"8.5"},"message":"%j"}'
- engine_container_template.yaml: |
- name: "$(ENGINE_NAME)"
- image: "$(ENGINE_IMAGE)"
- imagePullPolicy: {{ .Values.engine.image.pullPolicy }}
- args:
- - "--config-path"
- - "/etc/envoy/bootstrap_config.yaml"
- - "--base-id"
- - "$(BASE_ID)"
- - "--file-flush-interval-msec"
- - '1000'
- - "--drain-time-s"
- - '60'
- - "--service-node"
- - "$(POD_NAME).$(POD_NAMESPACE)"
- - "--service-cluster"
- - "$(APP_NAME).$(POD_NAMESPACE)"
- - "--log-path"
- - "/dev/stdout"
- - "--log-level"
- - "$(LOG_LEVEL)"
- volumeMounts:
- - name: airlock-microgateway-bootstrap-secret-volume
- mountPath: /etc/envoy
- readOnly: true
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.namespace
- - name: POD_IP
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: status.podIP
- ports:
- - containerPort: 13378
- protocol: TCP
- - containerPort: 19001
- protocol: TCP
- - containerPort: 19002
- protocol: TCP
- livenessProbe:
- httpGet:
- path: /ready
- port: 19001
- scheme: HTTP
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 5
- successThreshold: 1
- timeoutSeconds: 1
- readinessProbe:
- httpGet:
- path: /ready
- port: 19001
- scheme: HTTP
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 3
- successThreshold: 1
- timeoutSeconds: 1
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- {{- with .Values.engine.resources }}
- resources:
- {{- toYaml . | nindent 6 }}
- {{- end }}
- network_validator_container_template.yaml: |
- name: "$(NETWORK_VALIDATOR_NAME)"
- image: "$(NETWORK_VALIDATOR_IMAGE)"
- imagePullPolicy: {{ .Values.networkValidator.image.pullPolicy }}
- command: ["/bin/sh", "-c"]
- args:
- - |-
- echo 'pong' | nc -v -l 127.0.0.1 -p 13378 &
- for i in 1 2 3; do
- sleep 1s
- if r=$(echo 'ping' | nc 127.0.0.1 19003) && [ $r == pong ]; then
- echo -n 'Traffic redirection to Airlock Microgateway Engine is working.' > /dev/termination-log
- exit 0
- fi
- done
- echo -en 'Traffic redirection to Airlock Microgateway Engine is not working.\nRestart the pod after ensuring that hostNetwork is disabled and a compatible Airlock Microgateway CNI version is installed on the node.\nCertain environments may also require additional configuration (see docs.airlock.com for more information).' > /dev/termination-log
- exit 1
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- operator_config.yaml: |
- apiVersion: config.airlock.com/v1alpha1
- kind: OperatorConfig
- health:
- healthProbeBindAddress: :8081
- metrics:
- bindAddress: 0.0.0.0:8080
- webhook:
- port: 9443
- deployment:
- sidecar:
- engineContainerTemplate: "/sidecar/engine_container_template.yaml"
- networkValidatorContainerTemplate: "/sidecar/network_validator_container_template.yaml"
- engine:
- bootstrapConfigTemplate: "/engine_bootstrap_config_template.yaml"
- log:
- level: {{ .Values.operator.config.logLevel }}
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/deployment.yaml b/charts/airlock/microgateway/4.2.3/templates/operator/deployment.yaml
deleted file mode 100644
index a14cd9bd3..000000000
--- a/charts/airlock/microgateway/4.2.3/templates/operator/deployment.yaml
+++ /dev/null
@@ -1,138 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- replicas: {{ .Values.operator.replicaCount }}
- {{- with .Values.operator.updateStrategy }}
- strategy:
- {{- toYaml . | trim | nindent 4 }}
- {{- end }}
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- template:
- metadata:
- annotations:
- checksum/config: {{ include (print $.Template.BasePath "/operator/configmap.yaml") . | sha256sum }}
- kubectl.kubernetes.io/default-container: manager
- {{- with mustMerge .Values.operator.podAnnotations .Values.commonAnnotations}}
- {{- toYaml . | nindent 8 }}
- {{- end }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 8 }}
- {{- with .Values.operator.podLabels }}
- {{- toYaml . | nindent 8 }}
- {{- end }}
- spec:
- containers:
- - args:
- - --config=operator_config.yaml
- env:
- - name: ENGINE_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.engine.image }}
- - name: NETWORK_VALIDATOR_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.networkValidator.image }}
- - name: OPERATOR_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: OPERATOR_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- image: {{ include "airlock-microgateway.image" .Values.operator.image }}
- imagePullPolicy: {{ .Values.operator.image.pullPolicy }}
- livenessProbe:
- httpGet:
- path: /healthz
- port: 8081
- initialDelaySeconds: 15
- periodSeconds: 20
- timeoutSeconds: 5
- name: manager
- ports:
- - containerPort: 9443
- name: webhook-server
- protocol: TCP
- - containerPort: 13377
- name: xds-server
- protocol: TCP
- - containerPort: 8080
- protocol: TCP
- - containerPort: 8081
- protocol: TCP
- readinessProbe:
- httpGet:
- path: /readyz
- port: 8081
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- {{- with .Values.operator.resources }}
- resources:
- {{- toYaml . | nindent 10 }}
- {{- end }}
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 10 }}
- terminationMessagePath: /dev/termination-log
- terminationMessagePolicy: FallbackToLogsOnError
- volumeMounts:
- - mountPath: /tmp/k8s-webhook-server/serving-certs
- name: cert
- readOnly: true
- - mountPath: /opt/airlock/license/
- name: airlock-microgateway-license
- readOnly: true
- - mountPath: /operator_config.yaml
- name: operator-config
- subPath: operator_config.yaml
- - mountPath: /sidecar/engine_container_template.yaml
- name: operator-config
- subPath: engine_container_template.yaml
- - mountPath: /sidecar/network_validator_container_template.yaml
- name: operator-config
- subPath: network_validator_container_template.yaml
- - mountPath: /engine_bootstrap_config_template.yaml
- name: operator-config
- subPath: engine_bootstrap_config_template.yaml
- securityContext:
- runAsNonRoot: true
- serviceAccountName: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- terminationGracePeriodSeconds: 10
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.nodeSelector }}
- nodeSelector:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.tolerations }}
- tolerations:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.affinity }}
- affinity:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - name: cert
- secret:
- defaultMode: 420
- secretName: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-server-cert
- - name: airlock-microgateway-license
- secret:
- defaultMode: 292
- optional: true
- secretName: {{ .Values.license.secretName }}
- - configMap:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-config
- name: operator-config
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/manager-clusterrole.yaml b/charts/airlock/microgateway/4.2.3/templates/operator/manager-clusterrole.yaml
deleted file mode 100644
index d3ce5540c..000000000
--- a/charts/airlock/microgateway/4.2.3/templates/operator/manager-clusterrole.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-{{- if .Values.operator.rbac.create }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
-{{ include "airlock-microgateway-operator.rbacRules" . -}}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/manager-clusterrolebinding.yaml b/charts/airlock/microgateway/4.2.3/templates/operator/manager-clusterrolebinding.yaml
deleted file mode 100644
index 059c161ea..000000000
--- a/charts/airlock/microgateway/4.2.3/templates/operator/manager-clusterrolebinding.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- namespace: {{ .Release.Namespace }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/mutating-webhook.yaml b/charts/airlock/microgateway/4.2.3/templates/operator/mutating-webhook.yaml
deleted file mode 100644
index 4583e1452..000000000
--- a/charts/airlock/microgateway/4.2.3/templates/operator/mutating-webhook.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-{{ .Release.Namespace }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- annotations:
- cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- {{- with .Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-webhooks:
-{{ include "airlock-microgateway-operator.mutatingWebhooks" . -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/podmonitor.yaml b/charts/airlock/microgateway/4.2.3/templates/operator/podmonitor.yaml
deleted file mode 100644
index f84031633..000000000
--- a/charts/airlock/microgateway/4.2.3/templates/operator/podmonitor.yaml
+++ /dev/null
@@ -1,26 +0,0 @@
-{{- if .Values.engine.sidecar.podMonitor.create }}
-apiVersion: monitoring.coreos.com/v1
-kind: PodMonitor
-metadata:
- name: {{ include "airlock-microgateway.fullname" . }}-engine
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.engine.sidecar.podMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- namespaceSelector:
- any: true
- selector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
- podMetricsEndpoints:
- - targetPort: 19002
- path: /metrics
- scheme: http
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/validating-webhook.yaml b/charts/airlock/microgateway/4.2.3/templates/operator/validating-webhook.yaml
deleted file mode 100644
index 6332a0296..000000000
--- a/charts/airlock/microgateway/4.2.3/templates/operator/validating-webhook.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-{{ .Release.Namespace }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- annotations:
- cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- {{- with .Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-webhooks:
-{{ include "airlock-microgateway-operator.validatingWebhooks" . -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.2.3/templates/scc-role.yaml b/charts/airlock/microgateway/4.2.3/templates/scc-role.yaml
new file mode 100644
index 000000000..862748692
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/templates/scc-role.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+- apiGroups:
+ - security.openshift.io
+ resourceNames:
+ - privileged
+ resources:
+ - securitycontextconstraints
+ verbs:
+ - use
+{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.2.3/templates/scc-rolebinding.yaml b/charts/airlock/microgateway/4.2.3/templates/scc-rolebinding.yaml
new file mode 100644
index 000000000..ebd02982c
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/templates/scc-rolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+subjects:
+- kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/serviceaccount.yaml b/charts/airlock/microgateway/4.2.3/templates/serviceaccount.yaml
new file mode 100644
index 000000000..3dc8d58ea
--- /dev/null
+++ b/charts/airlock/microgateway/4.2.3/templates/serviceaccount.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with mustMerge .Values.serviceAccount.annotations .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/tests/rbac.yaml b/charts/airlock/microgateway/4.2.3/templates/tests/rbac.yaml
index a067a4304..744799333 100644
--- a/charts/airlock/microgateway/4.2.3/templates/tests/rbac.yaml
+++ b/charts/airlock/microgateway/4.2.3/templates/tests/rbac.yaml
@@ -2,106 +2,63 @@
apiVersion: v1
kind: ServiceAccount
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
subjects:
- kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
rules:
- apiGroups:
- - microgateway.airlock.com
+ - "apps"
resources:
- - sidecargateways
+ - daemonsets
resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway"
+ - {{ include "airlock-microgateway-cni.fullname" . }}
verbs:
- - get
- - list
- - watch
- - delete
+ - get
+ - watch
+ - list
- apiGroups:
- - microgateway.airlock.com
+ - ""
resources:
- - sidecargateways
+ - pods
+ - pods/log
verbs:
- - create
+ - get
+ - list
+{{- if .Values.rbac.createSCCRole }}
- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - list
-- apiGroups:
- - "apps"
- resources:
- - deployments
+ - security.openshift.io
resourceNames:
- - "{{ include "airlock-microgateway.operator.fullname" . }}"
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - "apps"
+ - privileged
resources:
- - statefulsets
- - statefulsets/scale
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend"
+ - securitycontextconstraints
verbs:
- - get
- - list
- - watch
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- - pods/log
- - pods/status
- - pods/attach
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend-0"
- - "{{ include "airlock-microgateway.fullname" . }}-test-valid-request"
- - "{{ include "airlock-microgateway.fullname" . }}-test-injection-request"
- verbs:
- - get
- - list
- - create
- - watch
- - delete
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - create
+ - use
+{{- end -}}
{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/tests/test-install.yaml b/charts/airlock/microgateway/4.2.3/templates/tests/test-install.yaml
index 35fd0f4e1..12d8c8de7 100644
--- a/charts/airlock/microgateway/4.2.3/templates/tests/test-install.yaml
+++ b/charts/airlock/microgateway/4.2.3/templates/tests/test-install.yaml
@@ -2,13 +2,11 @@
apiVersion: v1
kind: Pod
metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-install"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-test-install"
namespace: {{ .Release.Namespace }}
labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
annotations:
helm.sh/hook: test
helm.sh/hook-delete-policy: before-hook-creation
@@ -18,183 +16,88 @@ spec:
- name: test
image: "bitnami/kubectl:{{ .Capabilities.KubeVersion.Major }}.{{ .Capabilities.KubeVersion.Minor }}"
securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ readOnly: true
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ readOnly: true
command:
- sh
- -c
- |
set -eu
- clean_up() {
- echo ""
- echo "### Clean up test resources"
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- echo ""
- echo "### Scale down '{{ include "airlock-microgateway.fullname" . }}-test-backend'"
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=30s
- sleep 3s
- echo ""
- }
-
fail() {
+ echo "Error: ${1}"
echo ""
- echo "### Error: ${1}"
- echo ""
- echo 'Microgateway Sidecargateway status:'
- kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway -o jsonpath-as-json='{.status}' || true
- echo ""
- echo ""
- echo "Pod '{{ include "airlock-microgateway.fullname" . }}-test-backend-0':"
- kubectl describe -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 || true
- echo ""
- echo ""
- echo 'Logs of Nginx container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c nginx --tail 5 || true
- echo ""
- echo ""
- # Wait for engine logs
- sleep 10s
- echo 'Logs of Microgateway Engine container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c airlock-microgateway-engine --tail 5 || true
+ echo 'CNI installer logs:'
+ kubectl logs -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}} -c cni-installer
exit 1
}
- create_sidecargateway() {
- # create SidecarGateway resource for testing purposes
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- kubectl apply -f - </dev/null 2>&1; do sleep 1s; i=$((i+1)); done
- kubectl logs -f -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- kubectl delete pod --ignore-not-found=true -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- }
-
- trap clean_up EXIT
-
- echo "### Waiting for Microgateway Deployments to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} --timeout=90s \
- deployments/{{ include "airlock-microgateway.operator.fullname" . }}; then
- fail 'Timout occurred'
+ if ! kubectl rollout status --timeout=60s -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}}; then
+ fail 'CNI DaemonSet rollout did not complete within timeout'
fi
- echo ""
- echo "### Scale '{{ include "airlock-microgateway.fullname" . }}-test-backend' to '1' replica"
- # scale to zero replicas to ensure no pods are present from previous runs
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=10s
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=1 --timeout=10s
- echo ""
-
- echo "### Waiting for backend pod"
- i=0
- while true; do
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0; then
- break
- elif [ $i -gt 3 ]; then
- fail 'Pod not ready'
- fi
- sleep 2s
- i=$((i+1))
- done
-
- echo "### Checking Microgateway Engine sidecar container was injected"
- if ! kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.spec.containers[?(@.name=="airlock-microgateway-engine")]}' | grep -q "airlock-microgateway-engine"; then
- fail 'Microgateway Engine sidecar container not injected'
+ echo "Checking whether CNI binary was installed"
+ if ! [ -f "/host/opt/cni/bin/{{ include "airlock-microgateway-cni.fullname" . }}" ]; then
+ fail 'CNI binary was not installed'
fi
- echo "True"
- echo ""
- echo "### Checking for valid license"
- i=0
- while true; do
- if [ "$(kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.metadata.labels.sidecar\.microgateway\.airlock\.com/licensed}')" = 'true' ]; then
- break
- elif [ $i -gt 30 ]; then
- fail 'Microgateway license is missing or invalid'
- fi
- sleep 2s
- i=$((i+1))
- done
- echo "True"
- echo ""
-
- echo "### Create SidecarGateway resource for testing"
- if ! create_sidecargateway ; then
- fail 'Creation of SidecarGateway resource failed'
+ echo "Checking whether CNI kubeconfig was installed"
+ if ! [ -f "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig" ]; then
+ fail 'CNI kubeconfig was not created'
fi
- echo ""
- echo "### Waiting for '{{ include "airlock-microgateway.fullname" . }}-test-backend' to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --timeout=90s; then
- fail 'Timout occurred'
- fi
- echo ""
+ echo "Checking whether CNI configuration was written"
+ case {{ .Values.config.installMode }} in
+ "chained")
+ for file in "/host/etc/cni/net.d/"*.conflist; do
+ if containsMGWCNIConf "${file}"; then
+ echo "Success"
+ exit 0
+ fi
+ done
+ ;;
+ "standalone")
+ if containsMGWCNIConf "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}.conflist"; then
+ echo "Success"
+ exit 0
+ fi
+ ;;
+ "manual")
+ echo "- Skipping because we are in 'manual' install mode"
+ echo "Success"
+ exit 0
+ ;;
+ esac
- echo "### Waiting for 'engine-config-valid' condition"
- if ! kubectl wait -n {{ .Release.Namespace }} pods --field-selector=metadata.name={{ include "airlock-microgateway.fullname" . }}-test-backend-0 --timeout=90s --for=condition=microgateway.airlock.com/engine-config-valid=True; then
- fail 'Configuration was never accepted by the Microgateway Engine'
- fi
- sleep 5s
- echo ""
- echo ""
-
- echo "### Checking whether a valid request is successful and returns HTTP status code '200'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "200 OK"; then
- fail 'A valid request was not successful'
- fi
- echo ""
- echo ""
-
- echo "### Checking whether a request with an injection attack is blocked and returns HTTP status code '400'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/?token='%20UnION%20all%20select%20A" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "400 Bad Request"; then
- fail 'A malicious request was not blocked'
- fi
- echo ""
- echo ""
-
- echo "### Installation of '{{ include "airlock-microgateway.fullname" . }}' succeeded"
- exit 0
- serviceAccountName: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ fail 'Configuration for plugin "{{ include "airlock-microgateway-cni.fullname" . }}" was not found'
+ serviceAccountName: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/values.schema.json b/charts/airlock/microgateway/4.2.3/values.schema.json
index 208521ded..e087bd700 100644
--- a/charts/airlock/microgateway/4.2.3/values.schema.json
+++ b/charts/airlock/microgateway/4.2.3/values.schema.json
@@ -14,15 +14,6 @@
"commonAnnotations": {
"$ref": "#/definitions/StringMap"
},
- "crds": {
- "type": "object",
- "properties": {
- "skipVersionCheck": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
"imagePullSecrets": {
"type": "array",
"items": {
@@ -39,194 +30,120 @@
"additionalProperties": true
}
},
- "operator": {
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "podAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "podLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "resources": {
+ "type": "object"
+ },
+ "nodeSelector": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "affinity": {
+ "type": "object"
+ },
+ "rbac": {
"type": "object",
"properties": {
- "replicaCount": {
- "type": "integer",
- "minimum": 0
+ "create": {
+ "type": "boolean"
},
- "updateStrategy": {
- "$ref": "#/definitions/UpdateStrategy"
- },
- "image": {
- "$ref": "#/definitions/Image"
- },
- "podAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "podLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "resources": {
- "type": "object"
- },
- "nodeSelector": {
- "$ref": "#/definitions/StringMap"
- },
- "tolerations": {
- "type": "array",
- "items": {
- "type": "object"
- }
- },
- "affinity": {
- "type": "object"
- },
- "config": {
- "type": "object",
- "properties": {
- "logLevel": {
- "type": "string",
- "enum": [
- "debug",
- "info",
- "warn",
- "error"
- ]
- }
- },
- "required": [
- "logLevel"
- ],
- "additionalProperties": false
- },
- "serviceAccount": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "annotations": {
- "$ref": "#/definitions/StringMap"
- },
- "name": {
- "type": "string"
- }
- },
- "required": [
- "annotations",
- "create",
- "name"
- ],
- "additionalProperties": false
- },
- "rbac": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- },
- "serviceMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
+ "createSCCRole": {
+ "type": "boolean"
}
},
"required": [
- "affinity",
- "config",
- "image",
- "updateStrategy",
- "nodeSelector",
- "podAnnotations",
- "podLabels",
- "rbac",
- "replicaCount",
- "resources",
- "serviceAccount",
- "serviceAnnotations",
- "serviceLabels",
- "serviceMonitor",
- "tolerations"
+ "create",
+ "createSCCRole"
],
"additionalProperties": false
},
- "engine": {
+ "privileged": {
+ "type": "boolean"
+ },
+ "serviceAccount": {
"type": "object",
"properties": {
- "image": {
- "$ref": "#/definitions/Image"
+ "create": {
+ "type": "boolean"
},
- "resources": {
- "type": "object"
+ "annotations": {
+ "$ref": "#/definitions/StringMap"
},
- "sidecar": {
- "type": "object",
- "properties":{
- "podMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "podMonitor"
- ],
- "additionalProperties": false
+ "name": {
+ "type": "string"
}
},
"required": [
- "image",
- "resources",
- "sidecar"
+ "annotations",
+ "create",
+ "name"
],
"additionalProperties": false
},
- "networkValidator": {
+ "multusNetworkAttachmentDefinition": {
"type": "object",
"properties": {
- "image": {
- "$ref": "#/definitions/Image"
+ "create": {
+ "type": "boolean"
+ },
+ "namespace": {
+ "type": "string"
}
},
"required": [
- "image"
+ "create",
+ "namespace"
],
"additionalProperties": false
},
- "license": {
+ "config": {
"type": "object",
"properties": {
- "secretName": {
+ "installMode": {
+ "type": "string",
+ "enum": [
+ "chained",
+ "standalone",
+ "manual"
+ ]
+ },
+ "logLevel": {
+ "type": "string",
+ "enum": [
+ "debug",
+ "info",
+ "warn",
+ "error"
+ ]
+ },
+ "cniNetDir": {
"type": "string",
"minLength": 1
+ },
+ "cniBinDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "excludeNamespaces": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
}
},
"required": [
- "secretName"
+ "cniBinDir",
+ "cniNetDir",
+ "excludeNamespaces",
+ "installMode",
+ "logLevel"
],
"additionalProperties": false
},
@@ -247,16 +164,22 @@
}
},
"required": [
+ "affinity",
"commonAnnotations",
"commonLabels",
- "crds",
- "engine",
+ "config",
"fullnameOverride",
+ "image",
"imagePullSecrets",
- "license",
+ "multusNetworkAttachmentDefinition",
"nameOverride",
- "operator",
- "networkValidator",
+ "nodeSelector",
+ "podAnnotations",
+ "podLabels",
+ "privileged",
+ "rbac",
+ "resources",
+ "serviceAccount",
"tests"
],
"additionalProperties": false,
@@ -297,68 +220,6 @@
"tag"
],
"additionalProperties": false
- },
- "UpdateStrategy": {
- "type": "object",
- "oneOf" : [
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RecreateType"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RollingUpdateType"
- },
- "rollingUpdate": {
- "$ref": "#/definitions/RollingUpdate"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- }
- ]
- },
- "RecreateType": {
- "type": "string",
- "enum": [
- "Recreate"
- ]
- },
- "RollingUpdateType": {
- "type": "string",
- "enum": [
- "RollingUpdate"
- ]
- },
- "RollingUpdate": {
- "type": "object",
- "properties": {
- "maxSurge": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- },
- "maxUnavailable": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- }
- },
- "anyOf": [
- {"required": ["maxSurge"]},
- {"required": ["maxUnavailable"]}
- ],
- "additionalProperties": false
}
}
}
diff --git a/charts/airlock/microgateway/4.2.3/values.yaml b/charts/airlock/microgateway/4.2.3/values.yaml
index 24772bb69..ba8acd686 100644
--- a/charts/airlock/microgateway/4.2.3/values.yaml
+++ b/charts/airlock/microgateway/4.2.3/values.yaml
@@ -1,4 +1,4 @@
-# -- Allows overriding the name to use instead of "microgateway".
+# -- Allows overriding the name to use instead of "microgateway-cni".
nameOverride: ""
# -- Allows overriding the name to use as full name of resources.
fullnameOverride: ""
@@ -10,127 +10,71 @@ commonAnnotations: {}
imagePullSecrets: []
# - name: myRegistryKeySecretName
-crds:
- # -- Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs.
- # The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster
- # when performing a "helm install/upgrade".
- skipVersionCheck: false
-operator:
- # -- Number of replicas for the operator Deployment.
- replicaCount: 2
- # -- Specifies the operator update strategy.
- updateStrategy:
- type: RollingUpdate
- # Specifies the Airlock Microgateway Operator image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Operator image.
- repository: "quay.io/airlock/microgateway-operator"
- # -- Image tag to pull.
- tag: "4.2.3"
- # -- SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63").
- # Overrides tag when specified.
- digest: "sha256:a429dfdb636e76bfbee7c59cfbe53d5f396c1f5603d5cb187f6283301ba4d7ba"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Annotations to add to all Pods.
- podAnnotations: {}
- # -- Labels to add to all Pods.
- podLabels: {}
- # -- Annotations to add to the Service.
- serviceAnnotations: {}
- # prometheus.io/scrape: "true"
- # prometheus.io/port: "8080"
-
- # -- Labels to add to the Service.
- serviceLabels: {}
- # -- Resource restrictions to apply to the operator container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 1000m
- # memory: 512Mi
- # requests:
- # cpu: 100m
- # memory: 512Mi
-
- # -- Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes.
- nodeSelector: {}
- # -- Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes.
- tolerations: []
- # -- Custom affinity to apply to the operator Deployment. Used to influence the scheduling.
- affinity: {}
- # Parameters for the operator configuration.
- config:
- # -- Operator application log level.
- logLevel: "info"
- # Configures the generation of the ServiceAccount.
- serviceAccount:
- # -- Whether a ServiceAccount should be created.
- create: true
- # -- Annotations to add to the ServiceAccount.
- annotations: {}
- # -- Name of the ServiceAccount to use.
- # If not set and create is true, a name is generated using the fullname template.
- name: ""
- # Configures the generation of Role and RoleBinding as well ClusterRoles and ClusterRoleBinding pairs for the ServiceAccount specified above.
- rbac:
- # -- Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function.
- create: true
- # Configures the generation of a Prometheus Operator ServiceMonitor.
- serviceMonitor:
- # -- Whether to create a ServiceMonitor resource for monitoring.
- create: false
- # -- Labels to add to the ServiceMonitor.
- labels: {}
- # release: ""
-engine:
- # Specifies the Airlock Microgateway Engine image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Engine image.
- repository: "quay.io/airlock/microgateway-engine"
- # -- Image tag to pull.
- tag: "4.2.3"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:9b0debeef611172aa5ca79c6b8cd045e56a3c883763ec62c0fa211bb86d35304"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Engine container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 500m
- # memory: 128Mi
- # requests:
- # cpu: 10m
- # memory: 40Mi
-
- # Additional configuration when deployed as a sidecar.
- sidecar:
- # Configures the generation of a Prometheus Operator PodMonitor.
- podMonitor:
- # -- Whether to create a PodMonitor resource for monitoring.
- create: false
- # -- Labels to add to the PodMonitor.
- labels: {}
- # release: ""
-networkValidator:
- # Specifies the Airlock Microgateway Network Validator image to be injected as an init-container.
- image:
- # -- Image repository from which to pull the busybox image for the Airlock Microgateway Network Validator init-container.
- repository: "cgr.dev/chainguard/busybox"
- # -- Image tag to pull.
- tag: ""
- # -- SHA256 image digest to pull (in the format "sha256:a212cef6665b2464a41307162fa96e9623aa45c3fa32c39d320eae8b730d81e0").
- # Overrides tag when specified.
- digest: "sha256:a212cef6665b2464a41307162fa96e9623aa45c3fa32c39d320eae8b730d81e0"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
-license:
- # -- Name of the secret containing the "microgateway-license.txt" key.
- secretName: "airlock-microgateway-license"
-# Check whether the installation of the Airlock Microgateway Helm Chart was successful.
-# Requires a secret with a valid Airlock Microgateway license key already to be present.
+# Specifies the Airlock Microgateway CNI image.
+image:
+ # -- Image repository from which to pull the Airlock Microgateway CNI image.
+ repository: "quay.io/airlock/microgateway-cni"
+ # -- Image tag to pull.
+ tag: "4.2.3"
+ # -- SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a").
+ # Overrides tag when specified.
+ digest: "sha256:82b5924866840f783cce2e9b4095b7710a0e1cbf555498e8723ca811ca916290"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+# -- Annotations to add to all Pods.
+podAnnotations: {}
+# -- Labels to add to all Pods.
+podLabels: {}
+# -- Resource restrictions to apply to the CNI installer container.
+resources:
+ requests:
+ cpu: 10m
+ memory: 100Mi
+# -- NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes.
+nodeSelector:
+ kubernetes.io/os: linux
+# -- Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes.
+affinity: {}
+# Configures the generation of RBAC Roles and RoleBindings.
+rbac:
+ # -- Whether to create RBAC resources which are required for the CNI plugin to function.
+ create: true
+ # -- (OpenShift) Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint.
+ createSCCRole: false
+# -- Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift).
+privileged: false
+# Configures the generation of the ServiceAccount.
+serviceAccount:
+ # -- Whether a ServiceAccount should be created.
+ create: true
+ # -- Annotations to add to the ServiceAccount.
+ annotations: {}
+ # -- Name of the ServiceAccount to use.
+ # If not set and create is true, a name is generated using the fullname template.
+ name: ""
+# Configures the generation of a NetworkAttachmentDefinition for use with Multus CNI (OpenShift)
+multusNetworkAttachmentDefinition:
+ # -- Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods.
+ create: false
+ # -- Namespace in which the NetworkAttachmentDefinition is deployed.
+ # Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces
+ # may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation
+ namespace: default
+# Parameters for the CNI installer configuration.
+config:
+ # -- Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers),
+ # as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift)
+ # or in `manual` mode, where no CNI network configuration is written.
+ installMode: "chained"
+ # -- Log level for the CNI installer and plugin.
+ logLevel: info
+ # -- Directory where the CNI config files reside on the host.
+ cniNetDir: "/etc/cni/net.d"
+ # -- Directory where the CNI plugin binaries reside on the host.
+ cniBinDir: "/opt/cni/bin"
+ # -- Namespaces for which this CNI plugin should not apply any modifications.
+ excludeNamespaces:
+ - kube-system
tests:
# -- Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts).
# If set to false, `helm test` will not run any tests.
diff --git a/charts/airlock/microgateway/4.3.0/.helmignore b/charts/airlock/microgateway/4.3.0/.helmignore
index 101ff5ac5..8561d2892 100644
--- a/charts/airlock/microgateway/4.3.0/.helmignore
+++ b/charts/airlock/microgateway/4.3.0/.helmignore
@@ -21,8 +21,7 @@
.idea/
*.tmproj
.vscode/
-# CRDs kustomization.yaml
-/crds/kustomization.yaml
+
# Helm unit tests
/tests
/validation
diff --git a/charts/airlock/microgateway/4.3.0/Chart.yaml b/charts/airlock/microgateway/4.3.0/Chart.yaml
index 41659f600..f36cc383b 100644
--- a/charts/airlock/microgateway/4.3.0/Chart.yaml
+++ b/charts/airlock/microgateway/4.3.0/Chart.yaml
@@ -9,15 +9,15 @@ annotations:
- name: Airlock Microgateway Forum
url: https://forum.airlock.com/
catalog.cattle.io/certified: partner
- catalog.cattle.io/display-name: Airlock Microgateway
+ catalog.cattle.io/display-name: Airlock Microgateway CNI
catalog.cattle.io/kube-version: '>=1.25.0-0'
- catalog.cattle.io/release-name: microgateway
- charts.openshift.io/name: Airlock Microgateway
+ catalog.cattle.io/release-name: microgateway-cni
+ charts.openshift.io/name: Airlock Microgateway CNI
apiVersion: v2
appVersion: 4.3.0
-description: A Helm chart for deploying the Airlock Microgateway
+description: A Helm chart for deploying the Airlock Microgateway CNI plugin
home: https://www.airlock.com/en/microgateway
-icon: file://assets/icons/microgateway.svg
+icon: file://assets/icons/microgateway-cni.svg
keywords:
- WAF
- Web Application Firewall
@@ -30,14 +30,13 @@ keywords:
- Filtering
- DevSecOps
- shift left
-- control plane
-- Operator
+- CNI
kubeVersion: '>=1.25.0-0'
maintainers:
- email: support@airlock.com
name: Airlock
url: https://www.airlock.com/
-name: microgateway
+name: microgateway-cni
sources:
- https://github.com/airlock/microgateway
type: application
diff --git a/charts/airlock/microgateway/4.3.0/README.md b/charts/airlock/microgateway/4.3.0/README.md
index 15ea0012e..2fa8977de 100644
--- a/charts/airlock/microgateway/4.3.0/README.md
+++ b/charts/airlock/microgateway/4.3.0/README.md
@@ -1,4 +1,4 @@
-# Airlock Microgateway
+# Airlock Microgateway CNI
![Version: 4.3.0](https://img.shields.io/badge/Version-4.3.0-informational?style=flat-square) ![AppVersion: 4.3.0](https://img.shields.io/badge/AppVersion-4.3.0-informational?style=flat-square)
@@ -40,58 +40,43 @@ Check the official documentation at **[docs.airlock.com](https://docs.airlock.co
The instructions below provide a quick start guide. Detailed information are provided in the **[manual](https://docs.airlock.com/microgateway/latest/)**.
## Prerequisites
-* [Airlock Microgateway CNI](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni)
-* [Airlock Microgateway License](#obtain-airlock-microgateway-license)
-* [cert-manager](https://cert-manager.io/)
* [helm](https://helm.sh/docs/intro/install/) (>= v3.8.0)
-In order to use Airlock Microgateway you need a license and the cert-manager. You may either request a community license free of charge or purchase a premium license.
-For an easy start in non-production environments, you may deploy the same cert-manager we are using internally for testing.
-### Obtain Airlock Microgateway License
-1. Either request a community or premium license
- * Community license: [airlock.com/microgateway-community](https://airlock.com/en/microgateway-community)
- * Premium license: [airlock.com/microgateway-premium](https://airlock.com/en/microgateway-premium)
-2. Check your inbox and save the license file microgateway-license.txt locally.
-
-> See [Community vs. Premium editions in detail](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) to choose the right license type.
-### Deploy cert-manager
-```bash
-helm repo add jetstack https://charts.jetstack.io
-helm install cert-manager jetstack/cert-manager --version '1.15.1' -n cert-manager --create-namespace --set crds.enabled=true --wait
-```
-
-## Deploy Airlock Microgateway Operator
-
-> This guide assumes a microgateway-license.txt file is present in the working directory.
-
-1. Install CRDs and Operator.
+## Deploy Airlock Microgateway CNI
+1. Install the CNI Plugin with Helm.
+ > **Note**: Certain environments such as OpenShift or GKE require non-default configurations when installing the CNI plugin. For the most common setups, values files are provided in the [chart folder](/deploy/charts/airlock-microgateway-cni).
```bash
- # Create namespace
- kubectl create namespace airlock-microgateway-system
-
- # Install License
- kubectl -n airlock-microgateway-system create secret generic airlock-microgateway-license --from-file=microgateway-license.txt
-
- # Install Operator (CRDs are included via the standard Helm 3 mechanism, i.e. Helm will handle initial installation but not upgrades)
- helm install airlock-microgateway -n airlock-microgateway-system oci://quay.io/airlockcharts/microgateway --version '4.3.0' --wait
+ # Standard setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.3.0'
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
```
+ ```bash
+ # GKE setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.3.0' -f https://raw.githubusercontent.com/airlock/microgateway/4.3.0/deploy/charts/airlock-microgateway-cni/gke-values.yaml
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ ```bash
+ # OpenShift setup
+ helm install airlock-microgateway-cni -n openshift-operators oci://quay.io/airlockcharts/microgateway-cni --version '4.3.0' -f https://raw.githubusercontent.com/airlock/microgateway/4.3.0/deploy/charts/airlock-microgateway-cni/openshift-values.yaml
+ kubectl -n openshift-operators rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ **Important:** On OpenShift, all pods which should be protected by Airlock Microgateway must explicitly reference the Airlock Microgateway CNI NetworkAttachmentDefinition via the annotation `k8s.v1.cni.cncf.io/networks` (see [documentation](https://docs.airlock.com/microgateway/latest/#data/1658483168033.html) for details).
2. (Recommended) You can verify the correctness of the installation with `helm test`.
```bash
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.3.0'
- helm test airlock-microgateway -n airlock-microgateway-system --logs
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.3.0'
+ # Standard and GKE setup
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.0'
+ helm test airlock-microgateway-cni -n kube-system --logs
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.0'
+ ```
+ ```bash
+ # OpenShift setup
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.0'
+ helm test airlock-microgateway-cni -n openshift-operators --logs
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.0'
```
-### Upgrading CRDs
-
-The `helm install/upgrade` command currently does not support upgrading CRDs that already exist in the cluster.
-CRDs should instead be manually upgraded before upgrading the Operator itself via the following command:
-```bash
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=4.3.0 --server-side --force-conflicts
-```
-
-**Note**: Certain GitOps solutions such as e.g. Argo CD or Flux CD have their own mechanisms for automatically upgrading CRDs included with Helm charts.
+ Consult our [documentation](https://docs.airlock.com/microgateway/latest/#data/1699611533587.html) in case of any installation error.
## Support
@@ -104,61 +89,33 @@ For the community edition, check our **[Airlock community forum](https://forum.a
| Key | Type | Default | Description |
|-----|------|---------|-------------|
+| affinity | object | `{}` | Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes. |
| commonAnnotations | object | `{}` | Annotations to add to all resources. |
| commonLabels | object | `{}` | Labels to add to all resources. |
-| crds.skipVersionCheck | bool | `false` | Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs. The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster when performing a "helm install/upgrade". |
-| dashboards.config.grafana.dashboardLabel.name | string | `"grafana_dashboard"` | Name of the label that lets Grafana identify ConfigMaps that represent dashboards. |
-| dashboards.config.grafana.dashboardLabel.value | string | `"1"` | Value of the label that lets Grafana identify ConfigMaps that represent dashboards. |
-| dashboards.config.grafana.folderAnnotation.name | string | `"grafana_folder"` | Name of the annotation containing the folder name to file dashboards into. |
-| dashboards.config.grafana.folderAnnotation.value | string | `"Airlock Microgateway"` | Name of the folder dashboards are filed into within the Grafana UI. |
-| dashboards.create | bool | `false` | Whether to create any ConfigMaps containing Grafana dashboards to import. |
-| dashboards.instances.blockLogs.create | bool | `true` | Whether to create the block logs dashboard. |
-| dashboards.instances.blockMetrics.create | bool | `true` | Whether to create the block metrics dashboard. |
-| dashboards.instances.license.create | bool | `true` | Whether to create the license dashboard. |
-| dashboards.instances.overview.create | bool | `true` | Whether to create the overview dashboard. |
-| engine.image.digest | string | `"sha256:f442143294f3138965c9fa2734cafd39ebebe8e289600332b12f8a59c23dd9ef"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| engine.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| engine.image.repository | string | `"quay.io/airlock/microgateway-engine"` | Image repository from which to pull the Airlock Microgateway Engine image. |
-| engine.image.tag | string | `"4.3.0"` | Image tag to pull. |
-| engine.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Engine container. |
-| engine.sidecar.podMonitor.create | bool | `false` | Whether to create a PodMonitor resource for monitoring. |
-| engine.sidecar.podMonitor.labels | object | `{}` | Labels to add to the PodMonitor. |
+| config.cniBinDir | string | `"/opt/cni/bin"` | Directory where the CNI plugin binaries reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node. |
+| config.cniNetDir | string | `"/etc/cni/net.d"` | Directory where the CNI config files reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node. |
+| config.excludeNamespaces | list | `["kube-system"]` | Namespaces for which this CNI plugin should not apply any modifications. |
+| config.installMode | string | `"chained"` | Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers), as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. |
+| config.logLevel | string | `"info"` | Log level for the CNI installer and plugin. |
| fullnameOverride | string | `""` | Allows overriding the name to use as full name of resources. |
+| image.digest | string | `"sha256:cb165e34a1ab1a903a9f38b741a7d78946470a118640310a41d2af8153d6e409"` | SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a"). Overrides tag when specified. |
+| image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| image.repository | string | `"quay.io/airlock/microgateway-cni"` | Image repository from which to pull the Airlock Microgateway CNI image. |
+| image.tag | string | `"4.3.0"` | Image tag to pull. |
| imagePullSecrets | list | `[]` | ImagePullSecrets to use when pulling images. |
-| license.secretName | string | `"airlock-microgateway-license"` | Name of the secret containing the "microgateway-license.txt" key. |
-| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway". |
-| networkValidator.image.digest | string | `"sha256:7d87405b123c89058a0b64ca9393c45a1366a6a580aced1def900a812beb29f6"` | SHA256 image digest to pull (in the format "sha256:7d87405b123c89058a0b64ca9393c45a1366a6a580aced1def900a812beb29f6"). Overrides tag when specified. |
-| networkValidator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| networkValidator.image.repository | string | `"cgr.dev/chainguard/busybox"` | Image repository from which to pull the busybox image for the Airlock Microgateway Network Validator init-container. |
-| networkValidator.image.tag | string | `""` | Image tag to pull. |
-| operator.affinity | object | `{}` | Custom affinity to apply to the operator Deployment. Used to influence the scheduling. |
-| operator.config.logLevel | string | `"info"` | Operator application log level. |
-| operator.image.digest | string | `"sha256:dc6f0f9a11d0336c10f6b8a5c7f64d98ac91bd90c49aa1dc4fe7b68cfdea8217"` | SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63"). Overrides tag when specified. |
-| operator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| operator.image.repository | string | `"quay.io/airlock/microgateway-operator"` | Image repository from which to pull the Airlock Microgateway Operator image. |
-| operator.image.tag | string | `"4.3.0"` | Image tag to pull. |
-| operator.nodeSelector | object | `{}` | Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes. |
-| operator.podAnnotations | object | `{}` | Annotations to add to all Pods. |
-| operator.podLabels | object | `{}` | Labels to add to all Pods. |
-| operator.rbac.create | bool | `true` | Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function. |
-| operator.replicaCount | int | `2` | Number of replicas for the operator Deployment. |
-| operator.resources | object | `{}` | Resource restrictions to apply to the operator container. |
-| operator.serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
-| operator.serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
-| operator.serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
-| operator.serviceAnnotations | object | `{}` | Annotations to add to the Service. |
-| operator.serviceLabels | object | `{}` | Labels to add to the Service. |
-| operator.serviceMonitor.create | bool | `false` | Whether to create a ServiceMonitor resource for monitoring. |
-| operator.serviceMonitor.labels | object | `{}` | Labels to add to the ServiceMonitor. |
-| operator.tolerations | list | `[]` | Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes. |
-| operator.updateStrategy | object | `{"type":"RollingUpdate"}` | Specifies the operator update strategy. |
-| operator.watchNamespaceSelector | object | `{}` | Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector. It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator. This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings). An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty. Please note that this feature requires a Premium license. |
-| operator.watchNamespaces | list | `[]` | Allows to restrict the operator to specific namespaces, depending on your needs. For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`). In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace. For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`. An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty. Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces. Please note that this feature requires a Premium license. |
-| sessionAgent.image.digest | string | `"sha256:579dfded99145f9c2c1491ff1aeccb08721d63239a8b7f61bb9f455e17e968b2"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| sessionAgent.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| sessionAgent.image.repository | string | `"quay.io/airlock/microgateway-session-agent"` | Image repository from which to pull the Airlock Microgateway Session Agent image. |
-| sessionAgent.image.tag | string | `"4.3.0"` | Image tag to pull. |
-| sessionAgent.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Session Agent container. |
+| multusNetworkAttachmentDefinition.create | bool | `false` | Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods. |
+| multusNetworkAttachmentDefinition.namespace | string | `"default"` | Namespace in which the NetworkAttachmentDefinition is deployed. Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation |
+| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway-cni". |
+| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes. |
+| podAnnotations | object | `{}` | Annotations to add to all Pods. |
+| podLabels | object | `{}` | Labels to add to all Pods. |
+| privileged | bool | `false` | Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift). |
+| rbac.create | bool | `true` | Whether to create RBAC resources which are required for the CNI plugin to function. |
+| rbac.createSCCRole | OpenShift | `false` | Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint. |
+| resources | object | `{"requests":{"cpu":"10m","memory":"100Mi"}}` | Resource restrictions to apply to the CNI installer container. |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
+| serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
+| serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
| tests.enabled | bool | `false` | Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts). If set to false, `helm test` will not run any tests. |
## License
diff --git a/charts/airlock/microgateway/4.3.0/app-readme.md b/charts/airlock/microgateway/4.3.0/app-readme.md
deleted file mode 100644
index e32cac025..000000000
--- a/charts/airlock/microgateway/4.3.0/app-readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Airlock Microgateway
-
-*Airlock Microgateway is a Kubernetes native WAAP (Web Application and API Protection) solution to protect microservices.*
-
-## Features
-* Kubernetes native integration with its Operator, Custom Resource Definitions, hot-reload, automatic sidecar injection.
-* Reverse proxy functionality with request routing rules, TLS termination and remote IP extraction
-* Using native Envoy HTTP filters like Lua scripting, RBAC, ext_authz, JWT authentication
-* Content security filters for protecting against known attacks (OWASP Top 10)
-* Access control to allow only authenticated users to access the protected services
-* API security features like JSON parsing or OpenAPI specification enforcement
-
-For a list of all features, view the **[comparison of the community and premium edition](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html)**.
-
-## Requirements
-* [Airlock Microgateway CNI Helm Chart](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni) (Also available as Rancher Chart)
-* [Airlock Microgateway License](https://github.com/airlock/microgateway?tab=readme-ov-file#obtain-airlock-microgateway-license) (After obtaining the license install it according to the [documentation](https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-operator))
-* [cert-manager](https://cert-manager.io/docs/installation/)
-
-## Documentation and links
-
-Check the official documentation at **[docs.airlock.com](https://docs.airlock.com/microgateway/latest/)** or the product website at **[airlock.com/microgateway](https://www.airlock.com/en/microgateway)**. The links below point out the most interesting documentation sites when starting with Airlock Microgateway.
-
-* [Getting Started](https://docs.airlock.com/microgateway/latest/#data/1660804708742.html)
-* [System Architecture](https://docs.airlock.com/microgateway/latest/#data/1660804709650.html)
-* [Installation](https://docs.airlock.com/microgateway/latest/#data/1660804708637.html)
-* [Troubleshooting](https://docs.airlock.com/microgateway/latest/#data/1659430054787.html)
-* [GitHub](https://github.com/airlock/microgateway)
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/crds/accesscontrols.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.0/crds/accesscontrols.microgateway.airlock.com.yaml
deleted file mode 100644
index 5c6215c90..000000000
--- a/charts/airlock/microgateway/4.3.0/crds/accesscontrols.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,124 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
- name: accesscontrols.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: AccessControl
- listKind: AccessControlList
- plural: accesscontrols
- singular: accesscontrol
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: AccessControl specifies the options to perform access control with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies how the Airlock Microgateway Engine performs access control.
- properties:
- policies:
- description: Policies configures access control policies.
- items:
- properties:
- authorization:
- description: Authorization configures how requests are authorized. An empty object value {} disables authorization.
- properties:
- authentication:
- description: Authentication specifies that clients need to be authenticated with the provided method.
- properties:
- oidc:
- description: OIDC configures client authentication using OpenID Connect.
- properties:
- oidcRelyingPartyRef:
- description: OIDCRelyingPartyRef configures how the Airlock Microgateway Engine interacts with the OpenID provider.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - oidcRelyingPartyRef
- type: object
- type: object
- type: object
- identityPropagation:
- description: IdentityPropagation configures how the authenticated user's identity is communicated to the protected application.
- properties:
- actions:
- description: Actions specifies the propagation actions.
- items:
- properties:
- identityPropagationRef:
- description: IdentityPropagationRef selects an IdentityPropagation to apply.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - identityPropagationRef
- type: object
- type: array
- onFailure:
- description: |-
- OnFailure configures what should happen, if an identity propagation fails. Meaning of the possible values:
- _Pass_: The request should be forwarded to the upstream, without including the information from the failed identity propagations.
- enum:
- - Pass
- type: string
- required:
- - actions
- - onFailure
- type: object
- required:
- - authorization
- type: object
- maxItems: 1
- minItems: 1
- type: array
- required:
- - policies
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.0/crds/envoyclusters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.0/crds/envoyclusters.microgateway.airlock.com.yaml
deleted file mode 100644
index 07ba25df5..000000000
--- a/charts/airlock/microgateway/4.3.0/crds/envoyclusters.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
- name: envoyclusters.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyCluster
- listKind: EnvoyClusterList
- plural: envoyclusters
- singular: envoycluster
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: EnvoyCluster is an additional Envoy Cluster resource which is added to those defined by the Airlock Microgateway.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired additional Envoy cluster.
- properties:
- value:
- description: Value defines the Envoy Cluster which is added to those configured by the Airlock Microgateway.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.0/crds/envoyconfigurations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.0/crds/envoyconfigurations.microgateway.airlock.com.yaml
deleted file mode 100644
index cc09fbbb1..000000000
--- a/charts/airlock/microgateway/4.3.0/crds/envoyconfigurations.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
- name: envoyconfigurations.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyConfiguration
- listKind: EnvoyConfigurationList
- plural: envoyconfigurations
- singular: envoyconfiguration
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .status.status
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- EnvoyConfiguration is the Schema for the envoyconfigurations API
- {{% notice warning %}} EnvoyConfiguration resources may contain sensitive information and thus RBAC permissions should be granted with care. {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: EnvoyConfigurationSpec defines the desired state of EnvoyConfiguration
- properties:
- envoyResources:
- properties:
- clusters:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- endpoints:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- extensions:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- listeners:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- routes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- runtimes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- scopedRoutes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- secrets:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- type: object
- envoyResourcesRaw:
- description: |-
- EnvoyResourcesRaw defines the desired state for each resource type. The resources are stored as zstd compressed JSON bytes.
- For debugging purposes, the resources can be inspected with the following command: `kubectl get envoyconfiguration -ojsonpath='{.spec.envoyResourcesRaw}' | base64 -d | zstd -d | jq`
- format: byte
- type: string
- nodeID:
- description: '**Deprecated:** This field is now ignored as NodeID is always derived from the resource name.'
- type: string
- type: object
- status:
- description: EnvoyConfigurationStatus defines the observed state of EnvoyConfiguration
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- description: Last time the condition transitioned from one status to another.
- format: date-time
- type: string
- message:
- description: A human-readable message indicating details about the transition.
- type: string
- reason:
- description: The reason for the condition's last transition.
- type: string
- status:
- description: Status of the condition, one of True, False, Unknown.
- type: string
- type:
- description: Type of EnvoyConfiguration condition.
- type: string
- required:
- - status
- - type
- type: object
- type: array
- status:
- type: string
- xds:
- properties:
- resourceTypes:
- additionalProperties:
- description: XdsResourceTypeSyncStatus defines the sync status of xDS for a specific resource type
- properties:
- errorMessage:
- description: ErrorMessage defines an optional message why the currently served resources of this resource type are rejected by the client.
- type: string
- resources:
- additionalProperties:
- description: XdsResourceStatus defines the status of xDS for a specific resource
- properties:
- version:
- description: Version defines the version which is currently served for this resource.
- type: string
- required:
- - version
- type: object
- description: Resources defines the resources which are currently served for this resource type.
- type: object
- status:
- description: Status defines the current sync status of this resource type.
- type: string
- version:
- description: Version defines the version which is currently served for this resource type.
- type: string
- required:
- - resources
- - status
- - version
- type: object
- description: ResourceTypes defines the sync statuses for each resource type.
- type: object
- version:
- description: Version defines the version of the underlying xDS snapshot.
- type: integer
- required:
- - version
- type: object
- required:
- - status
- - xds
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/charts/airlock/microgateway/4.3.0/crds/envoyhttpfilters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.0/crds/envoyhttpfilters.microgateway.airlock.com.yaml
deleted file mode 100644
index d6eb787ab..000000000
--- a/charts/airlock/microgateway/4.3.0/crds/envoyhttpfilters.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
- name: envoyhttpfilters.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyHTTPFilter
- listKind: EnvoyHTTPFilterList
- plural: envoyhttpfilters
- singular: envoyhttpfilter
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: EnvoyHTTPFilter is an additional Envoy HTTP Filter resource which is added to those defined by the Airlock Microgateway.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired additional Envoy HTTP filter.
- properties:
- value:
- description: Value defines the HTTP filter which is added to those configured by the Airlock Microgateway.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.0/crds/graphqls.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.0/crds/graphqls.microgateway.airlock.com.yaml
deleted file mode 100644
index 77f8991e6..000000000
--- a/charts/airlock/microgateway/4.3.0/crds/graphqls.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,88 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
- name: graphqls.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: GraphQL
- listKind: GraphQLList
- plural: graphqls
- singular: graphql
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: GraphQL contains the configuration for the GraphQL specification.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired GraphQL specification.
- properties:
- settings:
- description: Settings defines the settings to configure GraphQL.
- properties:
- allowIntrospection:
- default: true
- description: AllowIntrospection specifies if the introspection system is exposed.
- type: boolean
- allowMutations:
- default: true
- description: AllowMutations specifies if mutations are allowed.
- type: boolean
- schema:
- description: Specifies the GraphQL schema.
- properties:
- source:
- description: Source specifies the GraphQL schema to be enforced.
- properties:
- configMapRef:
- description: ConfigMapRef references the configmap by its name containing the well-known key 'schema.graphql'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- required:
- - source
- type: object
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.0/crds/headerrewrites.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.0/crds/headerrewrites.microgateway.airlock.com.yaml
deleted file mode 100644
index 8fd43dc3a..000000000
--- a/charts/airlock/microgateway/4.3.0/crds/headerrewrites.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,759 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
- name: headerrewrites.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: HeaderRewrites
- listKind: HeaderRewritesList
- plural: headerrewrites
- singular: headerrewrites
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: HeaderRewrites is the Schema for the headerrewrites API
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired header rewriting behavior.
- properties:
- request:
- description: Request defines manipulations on upstream request headers.
- properties:
- add:
- description: Add defines which request headers will be added before forwarding to the upstream.
- properties:
- custom:
- description: |-
- Custom allows configuring additional upstream request headers.
- Add selected headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which request headers will be forwarded to the upstream.
- This can either be allHeaders or matchingHeaders.
- Default: matchingHeaders: {...}
- properties:
- allHeaders:
- description: AllHeaders specifies that all request headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which request headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- standardHeaders:
- default: true
- description: StandardHeaders defines whether the request headers which are forwarded to the upstream will be restricted to a set of common request headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which request headers will be removed before forwarding to the upstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- alternativeForwardedHeaders:
- default: true
- description: |-
- AlternativeForwardedHeaders removes downstream request headers which could potentially
- be abused to alter the upstream's view of the remote connection.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- response:
- description: Response defines manipulations on upstream response headers.
- properties:
- add:
- description: Add defines which response headers will be added before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- csp:
- default: true
- description: |-
- CSP sets a content security policy which allows only same-origin requests except for images
- if the 'Content-Security-Policy' header is not set by the upstream.
- type: boolean
- featurePolicy:
- default: false
- description: |-
- FeaturePolicy sets a feature policy which prevents cross-origin use of several browser features
- if the 'Feature-Policy' header is not set by the upstream.
- **Deprecated:** Use permissionsPolicy instead.
- type: boolean
- hsts:
- default: true
- description: HSTS enforces the use of HTTPS if the 'Strict-Transport-Security' header is not already set by the upstream.
- type: boolean
- hstsPreload:
- default: false
- description: HSTSPreload enforces the use of HTTPS including for subdomains and enables HSTS preload.
- type: boolean
- permissionsPolicy:
- default: true
- description: |-
- PermissionsPolicy sets a permissions policy which prevents cross-origin use of several browser features
- if the 'Permissions-Policy' header is not set by the upstream.
- type: boolean
- referrerPolicy:
- default: true
- description: |-
- ReferrerPolicy ensures that no 'Referer' header is sent for cross-origin requests
- if the 'Referrer-Policy' header is not set by the upstream.
- type: boolean
- xContentTypeOptions:
- default: true
- description: XContentTypeOptions sets 'X-Content-Type-Options' to 'nosniff' if it is not set by the upstream.
- type: boolean
- xFrameOptions:
- default: true
- description: XFrameOptions sets 'X-Frame-Options' to SAMEORIGIN if it is not set by the upstream.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which response headers will be forwarded to the downstream.
- This can either be allHeaders or matchingHeaders.
- Default: allHeaders: {}
- properties:
- allHeaders:
- description: AllHeaders specifies that all response headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which response headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response header.
- properties:
- standardHeaders:
- default: false
- description: StandardHeaders defines whether the response headers which are forwarded to the downstream will be restricted to a set of common response headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which response headers will be removed before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- auth:
- description: Auth defines the categories of headers concerning authentication.
- properties:
- basic:
- default: false
- description: Basic removes upstream response headers that advise clients to authenticate with Basic Authentication.
- type: boolean
- negotiate:
- default: true
- description: Negotiate removes upstream response headers that advise clients to authenticate with Negotiate.
- type: boolean
- ntlm:
- default: true
- description: |-
- NTLM removes upstream response headers that advise clients to authenticate with NTLM.
- By default, these headers are removed, because NTLM pass-through is not supported.
- type: boolean
- type: object
- informationLeakage:
- description: InformationLeakage defines the categories of headers concerning information leakage.
- properties:
- application:
- default: true
- description: Application removes upstream response headers that leak information about the deployed software.
- type: boolean
- server:
- default: true
- description: Server removes upstream response headers that leak information about the server.
- type: boolean
- type: object
- permissiveCors:
- default: true
- description: PermissiveCORS removes upstream response headers for CORS (Cross-Origin Resource Sharing) which have no restrictions and therefore reduce client-side security.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured remove operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- settings:
- description: Settings configures the HeaderRewrites filter.
- properties:
- operationalMode:
- default: Production
- description: OperationalMode defines the behavior of the filter. In integration mode more information is logged about the requests and responses.
- enum:
- - Production
- - Integration
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.0/crds/parsers.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.0/crds/parsers.microgateway.airlock.com.yaml
deleted file mode 100644
index 4d37c5adb..000000000
--- a/charts/airlock/microgateway/4.3.0/crds/parsers.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,358 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
- name: parsers.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Parser
- listKind: ParserList
- plural: parsers
- singular: parser
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Parser contains the configuration for content parsers (default and custom).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired parser behavior.
- properties:
- request:
- description: Request defines the parsing for downstream requests.
- properties:
- custom:
- description: Custom allows configuring additional rules for parser selection.
- properties:
- rules:
- description: |-
- Rules defines a custom set prepended before built-in rules of enabled request parsers.
- Disable all built-in parsers to overrule them completely.
- items:
- properties:
- action:
- description: |-
- Action specifies what should happen when a request condition matches.
- Only one of parse or skip can be set.
- properties:
- parse:
- description: Parse activates the configured parser.
- properties:
- form:
- description: Form activates the Form parser.
- type: object
- json:
- description: JSON activates the JSON parser.
- type: object
- multipart:
- description: Multipart activates the multipart parser.
- type: object
- type: object
- skip:
- description: Skip disables any content parsing
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this rule to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- required:
- - action
- - requestConditions
- type: object
- type: array
- type: object
- defaultContentType:
- default: application/x-www-form-urlencoded
- description: DefaultContentType specifies the content-type header which should be injected into the request before parser selection if it is not already present and the request has a body.
- minLength: 1
- type: string
- parsers:
- description: Parsers defines the configuration for the available content parsers.
- properties:
- form:
- description: Form defines the configuration for the form parser.
- properties:
- enable:
- default: true
- description: Enable defines whether form payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*urlencoded.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as form arguments.
- minLength: 1
- type: string
- type: object
- json:
- description: JSON defines the configuration for the JSON parser.
- properties:
- enable:
- default: true
- description: Enable defines whether json payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*json.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as JSON.
- minLength: 1
- type: string
- type: object
- multipart:
- description: Multipart defines the configuration for the multipart parser.
- properties:
- enable:
- default: true
- description: Enable defines whether multipart payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*multipart.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as a multipart payload.
- minLength: 1
- type: string
- type: object
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.0/crds/sidecargateways.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.0/crds/sidecargateways.microgateway.airlock.com.yaml
deleted file mode 100644
index ead724a75..000000000
--- a/charts/airlock/microgateway/4.3.0/crds/sidecargateways.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,758 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
- name: sidecargateways.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: SidecarGateway
- listKind: SidecarGatewayList
- plural: sidecargateways
- singular: sidecargateway
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .status.status
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: SidecarGateway contains the configuration how to configure the Airlock Microgateway Engine when used as Sidecar Container within the Pod of an application.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired sidecar gateway behavior.
- properties:
- applications:
- description: Applications defines applications which run on different ports.
- items:
- properties:
- containerPort:
- default: 8080
- description: |-
- ContainerPort refers to the container port.
- This must be a valid port number, 0 < x < 65536.
- format: int32
- maximum: 65535
- minimum: 1
- type: integer
- downstream:
- description: Downstream defines the downstream configuration for this application
- properties:
- protocol:
- description: |-
- Protocol defines the exposed HTTP protocol version. At most one of http1, http2 and auto can be set.
- Default: auto: {}
- properties:
- auto:
- description: Auto specifies that the protocol should be inferred.
- properties:
- http2:
- description: HTTP2 specifies the settings for when HTTP/2 is inferred.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- http1:
- description: HTTP1 specifies that the client is assumed to speak HTTP/1.1.
- type: object
- http2:
- description: HTTP2 specifies that the client is assumed to speak HTTP/2.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- remoteIP:
- description: |-
- RemoteIP defines how the remote IP of a client is propagated.
- Default: xff: {...}
- properties:
- connectionIP:
- description: ConnectionIP configures to use the source IP address of the direct downstream connection.
- type: object
- customHeader:
- description: CustomHeader specifies to use a custom header for remote IP extraction.
- properties:
- headerName:
- description: HeaderName specifies the name of the custom header containing the remote IP.
- minLength: 1
- type: string
- required:
- default: true
- description: Required specifies if the custom header is required. If true and not available the request will be rejected with 403.
- type: boolean
- required:
- - headerName
- type: object
- xff:
- description: XFF configures to use the standard 'X-Forwarded-For' header for IP extraction.
- properties:
- numTrustedHops:
- default: 1
- description: NumTrustedHops specifies to extract the client's originating IP from the nth rightmost entry in the X-Forwarded-For header. With the default value of 1, the IP is extracted from the rightmost entry.
- format: int32
- minimum: 1
- type: integer
- type: object
- type: object
- requestNormalizations:
- description: RequestNormalizations defines a set of normalization actions which are applied to the request before route matching.
- properties:
- mergeSlashes:
- default: true
- description: MergeSlashes ensures that adjacent slashes in the path are merged into one.
- type: boolean
- normalizePath:
- default: true
- description: NormalizePath ensures normalization according to RFC 3986 without case normalization.
- type: boolean
- type: object
- restrictions:
- description: Restrictions defines restrictions for downstream.
- properties:
- http:
- description: HTTP defines limits for the HTTP protocol.
- properties:
- headersLength:
- anyOf:
- - type: integer
- - type: string
- default: 60Ki
- description: HeadersLength defines maximum size of all request headers combined. Requests that exceed this limit will receive a 431 response.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- timeouts:
- description: Timeouts defines timeouts for downstream
- properties:
- http:
- description: HTTP defines the settings for HTTP timeouts.
- properties:
- idle:
- default: 5m
- description: |-
- Idle defines the settings for the idle timeout when no data is sent or received.
- A value of 0 will completely disable the timeout.
- Default: 5m
- type: string
- maxDuration:
- default: 5m
- description: |-
- MaxDuration defines the total duration for a HTTP request/response stream.
- A value of 0 will completely disable the timeout.
- Default: 5m
- type: string
- requestHeaders:
- default: 10s
- description: |-
- RequestHeaders defines the duration before all request headers must be received.
- A value of 0 will completely disable the timeout.
- Default: 10s
- type: string
- type: object
- type: object
- tls:
- description: TLS defines the TLS settings.
- properties:
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- clientCertificate:
- description: |-
- ClientCertificate defines the TLS settings for verification of client certificates.
- At most one of ignored, optional and required can be set.
- Default: ignored: {}
- properties:
- ignored:
- description: Ignored disables verification of the client certificate.
- type: object
- optional:
- description: |-
- Optional enables verification of the client certificate if one is presented.
- In this mode only trustedCA and crl settings can be configured since certificatePinning and allowedSANs require a client certificate.
- properties:
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- required:
- - trustedCA
- type: object
- required:
- description: |-
- Required contains settings for client certificate verification. A client must present a valid certificate.
- At least one of trustedCA and certificatePinning must be set.
- properties:
- allowedSANs:
- description: |-
- AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
- that is to say, the SAN is verified if at least one matcher is matched.
- AllowedSANs requires trustedCA to be set.
- items:
- description: |-
- TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers.
- properties:
- matcher:
- description: Matcher defines the string matcher for the SAN value.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- sanType:
- description: SanType defines the type of SAN matcher.
- enum:
- - DNS
- - Email
- - URI
- - IPAddress
- type: string
- required:
- - matcher
- - sanType
- type: object
- minItems: 1
- type: array
- certificatePinning:
- description: |-
- CertificatePinning defines the constraints a client certificate must fulfill.
- If more than one constraint is configured only one must be satisfied.
- At least one of allowedSPKIs and allowedHashes must be set.
- properties:
- allowedHashes:
- description: |-
- AllowedHashes is a list of hex-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- allowedSPKIs:
- description: |-
- AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- type: object
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- type: object
- type: object
- enable:
- default: false
- description: Enable defines if the downstream connection is encrypted.
- type: boolean
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- secretRef:
- description: SecretRef defines the reference to the TLS server certificate (secret of type kubernetes.io/tls).
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- xfcc:
- description: |-
- XFCC defines the handling of X-Forwarded-Client-Cert header. Meaning of the possible values:
- _Sanitize_: Do not send the XFCC header to the next hop. This is the default value.
- _ForwardOnly_: When the client connection is mTLS (Mutual TLS), forward the XFCC header in the request.
- _AppendAndForward_: When the client connection is mTLS, append the client certificate information to the request’s XFCC header and forward it.
- _SanitizeAndSet_: When the client connection is mTLS, reset the XFCC header with the client certificate information and send it to the next hop.
- _AlwaysForwardOnly_: Always forward the XFCC header in the request, regardless of whether the client connection is mTLS.
- Note: When forwarding the XFCC header in the request you might have to adjust the header length restrictions (See sidecargateway.spec.applications.downstream.restrictions.http)
- enum:
- - Sanitize
- - ForwardOnly
- - AppendAndForward
- - SanitizeAndSet
- - AlwaysForwardOnly
- type: string
- type: object
- type: object
- envoyHTTPFilterRefs:
- description: EnvoyHTTPFilterRefs selects the relevant EnvoyHTTPFilters.
- properties:
- prepend:
- description: Prepend selects the relevant EnvoyHTTPFilters which are added before those configured by the Airlock Microgateway.
- items:
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: array
- type: object
- routes:
- description: Routes defines the security configurations for different paths. The first matching route (from top to bottom) applies.
- items:
- description: |-
- SidecarGatewayApplicationRoute defines the security configurations for different paths.
- At most one of secured and unsecured can be set.
- Default: secured: {...}
- properties:
- pathPrefix:
- default: /
- description: PathPrefix defines the path prefix used during route selection.
- minLength: 1
- type: string
- secured:
- description: Secured enables WAF processing for this route.
- properties:
- accessControlRef:
- description: |-
- AccessControlRef selects the relevant AccessControl configuration resource.
- If undefined, Airlock Microgateway does not perform any access control.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- contentSecurityRef:
- description: |-
- ContentSecurityRef selects the relevant ContentSecurity configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- unsecured:
- description: |-
- Unsecured disables all WAF functionality and therefore protection for this route.
- WARNING: Using this setting when the application is exposed to untrusted downstream traffic is highly discouraged.
- type: object
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - pathPrefix
- x-kubernetes-list-type: map
- telemetryRef:
- description: |-
- TelemetryRef selects the relevant Telemetry configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- upstream:
- description: Upstream defines the upstream configuration for this application
- properties:
- protocol:
- description: |-
- Protocol defines HTTP protocol version used to communicate with the upstream. At most one of http1, http2 and auto can be set.
- Default: auto: {}
- properties:
- auto:
- description: Auto specifies to negotiate the protocol with TLS ALPN (if TLS is enabled) or, as a fallback, use the same protocol that is used by the downstream connection.
- properties:
- http2:
- description: HTTP2 specifies the settings for when HTTP/2 is inferred.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- http1:
- description: HTTP1 specifies to use HTTP/1.1.
- type: object
- http2:
- description: HTTP2 specifies to use HTTP/2.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- timeouts:
- description: Timeouts defines the timeout settings.
- properties:
- http:
- description: HTTP defines the settings for HTTP timeouts.
- properties:
- idle:
- description: |-
- Timeout defines the settings for http timeouts. If this setting is not specified, the value of applications[].downstream.timeouts.http.idle is inherited.
- A value of 0 will completely disable the timeout.
- type: string
- maxDuration:
- default: 15s
- description: |-
- MaxDuration defines the total duration for a HTTP request/response stream.
- Default: 15s
- type: string
- type: object
- type: object
- tls:
- description: TLS defines the TLS settings.
- properties:
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- enable:
- default: false
- description: Enable defines if the upstream connection is encrypted.
- type: boolean
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- type: object
- type: object
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - containerPort
- x-kubernetes-list-type: map
- envoyClusterRefs:
- description: EnvoyClusterRefs selects the relevant EnvoyClusters.
- items:
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- podSelector:
- description: PodSelector defines to which Pods the configuration will be applied to.
- properties:
- matchLabels:
- additionalProperties:
- type: string
- description: MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels.
- type: object
- type: object
- sessionHandlingRef:
- description: SessionHandlingRef selects the SessionHandling configuration to apply.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - applications
- type: object
- status:
- description: Most recently observed status of the SidecarGateway which is populated by the system. This data is read-only and may not be up to date.
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- description: Last time the condition transitioned from one status to another.
- format: date-time
- type: string
- message:
- description: A human-readable message indicating details about the transition.
- type: string
- reason:
- description: The reason for the condition's last transition.
- type: string
- status:
- description: Status of the condition, one of True, False, Unknown.
- type: string
- type:
- description: Type of SidecarGateway condition.
- type: string
- required:
- - status
- - type
- type: object
- type: array
- pods:
- items:
- properties:
- envoyConfig:
- description: EnvoyConfig indicates the name of the EnvoyConfig CR for the Pod.
- type: string
- name:
- description: Name indicates the name of a Pod selected by the SidecarGateway.
- type: string
- sessionAgentSecret:
- type: string
- required:
- - name
- type: object
- type: array
- status:
- type: string
- unmanagedPods:
- items:
- properties:
- managedBy:
- description: ManagedBy indicates the Airlock Microgateway Operator instance which manages this Pod.
- type: string
- name:
- description: Name indicates the name of a Pod selected by the SidecarGateway.
- type: string
- sessionAgentSecret:
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - status
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/charts/airlock/microgateway/4.3.0/dashboards/license.json b/charts/airlock/microgateway/4.3.0/dashboards/license.json
deleted file mode 100644
index b9d5777e2..000000000
--- a/charts/airlock/microgateway/4.3.0/dashboards/license.json
+++ /dev/null
@@ -1,521 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "stat",
- "name": "Stat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "timeseries",
- "name": "Time series",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "License status of Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [
- {
- "options": {
- "0": {
- "color": "red",
- "index": 1,
- "text": "Invalid"
- },
- "1": {
- "color": "green",
- "index": 0,
- "text": "Valid"
- }
- },
- "type": "value"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 0
- },
- "id": 1,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_valid{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "License Status",
- "range": false,
- "refId": "Licenses"
- }
- ],
- "title": "License Status",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Expiry date of the Airlock Microgateway license associated with the selected operator.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "time: L"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 3,
- "y": 0
- },
- "id": 4,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_expiry_timestamp_seconds{namespace=~\"${operator_namespace.regex}\"})*1000",
- "instant": true,
- "legendFormat": "Expiry Date (MM/DD/YYYY)",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "License Expiry Date",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of licensed requests for applications protected by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 7,
- "y": 0
- },
- "id": 6,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(microgateway_license_max_rq_count_per_month{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "Licensed Requests",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Licensed Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Estimated number of requests protected by Airlock Microgateway over 30 days based on the last 7 days.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 5,
- "x": 11,
- "y": 0
- },
- "id": 2,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_license_http_rq_total{job=~\"${operator_namespace.regex}/.*-engine\"}[7d]))/7*30",
- "instant": true,
- "legendFormat": "Estimated Requests",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Requests over 30 days (estimated)",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of requests per week processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "blue",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 12,
- "w": 16,
- "x": 0,
- "y": 4
- },
- "id": 5,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(avg_over_time(increase(microgateway_license_http_rq_total{job=~\"${operator_namespace.regex}/.*-engine\"}[7d])[2m:30s]))",
- "instant": false,
- "legendFormat": "# Requests per week",
- "range": true,
- "refId": "A"
- }
- ],
- "title": "Processed Requests per week",
- "type": "timeseries"
- }
- ],
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_PROMETHEUS",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_valid,namespace)",
- "description": "",
- "hide": 0,
- "includeAll": false,
- "label": "Operator Namespace",
- "multi": false,
- "name": "operator_namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-7d",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {},
- "timezone": "browser",
- "title": "Airlock Microgateway License",
- "uid": "cdpq79bzrr01se",
- "version": 2,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/dashboards/overview.json b/charts/airlock/microgateway/4.3.0/dashboards/overview.json
deleted file mode 100644
index 094276621..000000000
--- a/charts/airlock/microgateway/4.3.0/dashboards/overview.json
+++ /dev/null
@@ -1,1138 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "stat",
- "name": "Stat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "table",
- "name": "Table",
- "version": ""
- },
- {
- "type": "panel",
- "id": "timeseries",
- "name": "Time series",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 3,
- "title": "Overview",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of pods that are protected by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "text",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 1
- },
- "id": 11,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(microgateway_sidecars{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "Protected Pods",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Protected Pods",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Total number of requests processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 3,
- "y": 1
- },
- "id": 4,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "format": "time_series",
- "fullMetaSearch": false,
- "hide": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Processed Requests",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Ratio of blocked requests vs. processed requests by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [
- {
- "options": {
- "match": "nan",
- "result": {
- "index": 0,
- "text": "n/a"
- }
- },
- "type": "special"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "percentunit"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 6,
- "y": 1
- },
- "id": 5,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])) / sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range]))",
- "fullMetaSearch": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Blocked Requests (%)",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "% Blocked Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "License status of Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [
- {
- "options": {
- "0": {
- "color": "red",
- "index": 1,
- "text": "Invalid"
- },
- "1": {
- "color": "green",
- "index": 0,
- "text": "Valid"
- }
- },
- "type": "value"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 9,
- "y": 1
- },
- "id": 10,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_valid{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "License Status",
- "range": false,
- "refId": "Licenses"
- }
- ],
- "title": "License",
- "type": "stat"
- },
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 5
- },
- "id": 2,
- "title": "Blocks",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Requests per second processed by Airlock Microgateway along with the corresponding block rate.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "blue",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "left",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "blue",
- "value": null
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "% Blocks"
- },
- "properties": [
- {
- "id": "custom.axisPlacement",
- "value": "right"
- },
- {
- "id": "unit",
- "value": "percentunit"
- },
- {
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
- },
- {
- "id": "max",
- "value": 1
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Requests per second"
- },
- "properties": [
- {
- "id": "unit",
- "value": "short"
- },
- {
- "id": "custom.fillOpacity",
- "value": 25
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 6
- },
- "id": 6,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "timezone": [
- ""
- ],
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "instant": false,
- "legendFormat": "Requests per second",
- "range": true,
- "refId": "Requests per Second"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(rate(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) / sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "hide": false,
- "instant": false,
- "legendFormat": "% Blocks",
- "range": true,
- "refId": "Blocks"
- }
- ],
- "title": "Requests vs. % Blocks",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Requests blocked by Airlock Microgateway categorized by their corresponding type.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "custom": {
- "align": "auto",
- "cellOptions": {
- "barAlignment": 0,
- "drawStyle": "line",
- "gradientMode": "none",
- "hideValue": false,
- "lineInterpolation": "linear",
- "lineStyle": {
- "dash": [
- 10,
- 10
- ],
- "fill": "solid"
- },
- "showPoints": "never",
- "spanNulls": false,
- "type": "sparkline"
- },
- "inspect": false
- },
- "displayName": "Block Type",
- "fieldMinMax": false,
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "block_type"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 153
- },
- {
- "id": "custom.cellOptions",
- "value": {
- "type": "auto"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Trend #Block Types"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 6
- },
- "id": 7,
- "options": {
- "cellHeight": "lg",
- "footer": {
- "countRows": false,
- "enablePagination": false,
- "fields": [
- "Value"
- ],
- "reducer": [
- "sum"
- ],
- "show": false
- },
- "showHeader": false,
- "sortBy": [
- {
- "desc": true,
- "displayName": "block_type"
- }
- ]
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum by (block_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m] offset -1m))/(60000/$__interval_ms)",
- "format": "time_series",
- "instant": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "Block Types"
- }
- ],
- "title": "Blocked Requests by Type",
- "transformations": [
- {
- "id": "timeSeriesTable",
- "options": {
- "A": {
- "timeField": "Time"
- },
- "Block Types": {
- "stat": "sum",
- "timeField": "Time"
- }
- }
- }
- ],
- "type": "table"
- },
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 16
- },
- "id": 1,
- "title": "Latency",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Percentiles of the application downstream latency over one minute.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "ms"
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "25th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "super-light-purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "50th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "95th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "dark-purple",
- "mode": "fixed"
- }
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 17
- },
- "id": 8,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.25, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "instant": false,
- "legendFormat": "25th Percentile",
- "range": true,
- "refId": "25th Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.5, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "50th Percentile",
- "range": true,
- "refId": "50th Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.95, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "95th Percentile",
- "range": true,
- "refId": "95th Percentile"
- }
- ],
- "title": "Application Downstream Latency",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Percentiles of the Airlock Microgateway processing time over one minute.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "ms"
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "25th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "super-light-purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "50th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "95th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "dark-purple",
- "mode": "fixed"
- }
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 17
- },
- "id": 9,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.25, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "instant": false,
- "legendFormat": "25th Percentile",
- "range": true,
- "refId": "0.25 Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.5, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "50th Percentile",
- "range": true,
- "refId": "0.5 Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.95, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "95th Percentile",
- "range": true,
- "refId": "0.95 Percentile"
- }
- ],
- "title": "Airlock Microgateway Processing Time",
- "type": "timeseries"
- }
- ],
- "refresh": "",
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_PROMETHEUS",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_valid,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Operator Namespace",
- "multi": true,
- "name": "operator_namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": ".*",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_http_rq_total,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Application Namespace",
- "multi": true,
- "name": "namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_http_rq_total,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-24h",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {},
- "timezone": "browser",
- "title": "Airlock Microgateway Overview",
- "uid": "fdp5jb8fnrmyoa",
- "version": 1,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/gke-values.yaml b/charts/airlock/microgateway/4.3.0/gke-values.yaml
new file mode 100644
index 000000000..d6d5c21d1
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/gke-values.yaml
@@ -0,0 +1,4 @@
+# values for deploying on GKE
+
+config:
+ cniBinDir: "/home/kubernetes/bin"
diff --git a/charts/airlock/microgateway/4.3.0/openshift-values.yaml b/charts/airlock/microgateway/4.3.0/openshift-values.yaml
new file mode 100644
index 000000000..3b1d6cccd
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/openshift-values.yaml
@@ -0,0 +1,15 @@
+# values for deploying on OpenShift
+
+rbac:
+ createSCCRole: true
+
+privileged: true
+
+multusNetworkAttachmentDefinition:
+ create: true
+ namespace: default
+
+config:
+ installMode: "standalone"
+ cniNetDir: "/etc/cni/multus/net.d"
+ cniBinDir: "/var/lib/cni/bin"
diff --git a/charts/airlock/microgateway/4.3.0/questions.yml b/charts/airlock/microgateway/4.3.0/questions.yml
new file mode 100644
index 000000000..73ed44d64
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/questions.yml
@@ -0,0 +1,18 @@
+questions:
+ - variable: config.cniNetDir
+ required: true
+ type: string
+ label: CNI Network Configuration Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI config files reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your kubernetes host."
+ - variable: config.cniBinDir
+ required: true
+ type: string
+ label: CNI Plugin Binaries Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI plugin binaries reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your kubernetes host."
+ - variable: config.installMode
+ required: true
+ label: CNI Plugin Installation Mode
+ group: "CNI Settings"
+ description: "Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers) as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. Please refer to the CNI installation documentation (https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-cni) to correctly setup the CNI Plugin for your environment."
diff --git a/charts/airlock/microgateway/4.3.0/templates/NOTES.txt b/charts/airlock/microgateway/4.3.0/templates/NOTES.txt
index e38e3caa0..e8aa45888 100644
--- a/charts/airlock/microgateway/4.3.0/templates/NOTES.txt
+++ b/charts/airlock/microgateway/4.3.0/templates/NOTES.txt
@@ -1,34 +1,3 @@
-Thank you for installing Airlock Microgateway.
-If you have not already done so, make sure that Airlock Microgateway CNI is also installed on the cluster.
+Thank you for installing Airlock Microgateway CNI.
-For further information, please visit our documentation at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" .}}.
-Detailed CRD API reference documentation is also available at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" .}}/api/crds.
-{{ if .Values.crds.skipVersionCheck }}
-- CRD version check skipped
-{{- else }}
-{{- $outdatedCRDs := (include "airlock-microgateway.outdatedCRDs" .) -}}
-{{- if $outdatedCRDs -}}
- {{- fail (printf `
-
-Helm does not automatically upgrade CRDs from the chart's 'crds/' directory during 'helm install/upgrade'.
-Therefore, the CRDs must be manually upgraded with the following command before deploying this chart:
-
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=%s --server-side --force-conflicts
-
-If you are not using the helm install/upgrade command and instead rely on some other mechanism which is able to upgrade CRDs for deploying this chart, you can suppress this error by setting the helm value 'crds.skipVersionCheck=true'.`
- .Chart.AppVersion)
- -}}
-{{- end -}}
-{{- end -}}
-{{- if .Values.tests.enabled }}
- {{- if .Values.operator.watchNamespaces -}}
- {{- if not (has .Release.Namespace .Values.operator.watchNamespaces) }}
- {{- fail (printf `
-
-To execute 'helm test', it is necessary that the release namespace '%s' is part of the operator's watch scope. Either disable the tests or ensure that the release namespace is added to watch namspace list ('operator.watchNamespaces') in the helm values.
-`
- .Release.Namespace)
- -}}
- {{- end -}}
- {{- end -}}
-{{- end }}
\ No newline at end of file
+For further information, please visit our documentation at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" .}}.
diff --git a/charts/airlock/microgateway/4.3.0/templates/_helpers.tpl b/charts/airlock/microgateway/4.3.0/templates/_helpers.tpl
index 733ba9648..996491a87 100644
--- a/charts/airlock/microgateway/4.3.0/templates/_helpers.tpl
+++ b/charts/airlock/microgateway/4.3.0/templates/_helpers.tpl
@@ -1,16 +1,14 @@
{{/*
Expand the name of the chart.
-We truncate at 49 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest explicit suffix is 14 characters.
*/}}
-{{- define "airlock-microgateway.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 49 | trimSuffix "-" }}
+{{- define "airlock-microgateway-cni.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Convert an image configuration object into an image ref string.
*/}}
-{{- define "airlock-microgateway.image" -}}
+{{- define "airlock-microgateway-cni.image" -}}
{{- if .digest -}}
{{- printf "%s@%s" .repository .digest -}}
{{- else if .tag -}}
@@ -22,19 +20,19 @@ Convert an image configuration object into an image ref string.
{{/*
Create a default fully qualified app name.
-We truncate at 36 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest implicit suffix is 27 characters.
+We truncate at 50 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
+and the longest suffix is 13 characters.
If release name contains chart name it will be used as a full name.
*/}}
-{{- define "airlock-microgateway.fullname" -}}
+{{- define "airlock-microgateway-cni.fullname" -}}
{{- if .Values.fullnameOverride }}
-{{- .Values.fullnameOverride | trunc 36 | trimSuffix "-" }}
+{{- .Values.fullnameOverride | trunc 50 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
-{{- .Release.Name | trunc 36 | trimSuffix "-" }}
+{{- .Release.Name | trunc 50 | trimSuffix "-" }}
{{- else }}
-{{- printf "%s-%s" .Release.Name $name | trunc 36 | trimSuffix "-" }}
+{{- printf "%s-%s" .Release.Name $name | trunc 50 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
@@ -42,112 +40,62 @@ If release name contains chart name it will be used as a full name.
{{/*
Create chart name and version as used by the chart label.
*/}}
-{{- define "airlock-microgateway.chart" -}}
+{{- define "airlock-microgateway-cni.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
-{{- define "airlock-microgateway.sharedLabels" -}}
-helm.sh/chart: {{ include "airlock-microgateway.chart" . }}
+{{- define "airlock-microgateway-cni.labels" -}}
+helm.sh/chart: {{ include "airlock-microgateway-cni.chart" . }}
+{{ include "airlock-microgateway-cni.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
-app.kubernetes.io/part-of: {{ .Chart.Name }}
{{- with .Values.commonLabels }}
{{ toYaml .}}
{{- end }}
{{- end }}
{{/*
-Common Selector labels
+Common labels without component
*/}}
-{{- define "airlock-microgateway.sharedSelectorLabels" -}}
-app.kubernetes.io/instance: {{ .Release.Name }}
+{{- define "airlock-microgateway-cni.labelsWithoutComponent" -}}
+{{- $labels := fromYaml (include "airlock-microgateway-cni.labels" .) -}}
+{{ unset $labels "app.kubernetes.io/component" | toYaml }}
{{- end }}
{{/*
-Restricted Container Security Context
+Selector labels
*/}}
-{{- define "airlock-microgateway.restrictedSecurityContext" -}}
-allowPrivilegeEscalation: false
-privileged: false
-runAsNonRoot: true
-capabilities:
- drop: ["ALL"]
-readOnlyRootFilesystem: true
-seccompProfile:
- type: RuntimeDefault
+{{- define "airlock-microgateway-cni.selectorLabels" -}}
+app.kubernetes.io/component: cni-plugin-installer
+app.kubernetes.io/instance: {{ .Release.Name }}
+app.kubernetes.io/name: {{ include "airlock-microgateway-cni.name" . }}
{{- end }}
-{{/* Precondition: May only be used if AppVersion is isSemver */}}
-{{- define "airlock-microgateway.supportedCRDVersionPattern" -}}
-{{- $version := (semver .Chart.AppVersion) -}}
-{{- if $version.Prerelease -}}
->= {{ $version.Major }}.{{ $version.Minor }}.{{ $version.Patch }}-{{ $version.Prerelease }}
-{{- else -}}
->= {{ $version.Major }}.{{ $version.Minor }}.0 || >= {{ $version.Major }}.{{ $version.Minor }}.{{ add1 $version.Patch }}-0
-{{- end -}}
-{{- end -}}
+{{/*
+Create the name of the service account to use for the CNI Plugin
+*/}}
+{{- define "airlock-microgateway-cni.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "airlock-microgateway-cni.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
-{{- define "airlock-microgateway.outdatedCRDs" -}}
-{{- if (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) -}}
- {{- $supportedVersion := (include "airlock-microgateway.supportedCRDVersionPattern" .) -}}
- {{- range $path, $_ := .Files.Glob "crds/*.yaml" -}}
- {{- $api := ($.Files.Get $path | fromYaml).metadata.name -}}
- {{- $crd := (lookup "apiextensions.k8s.io/v1" "CustomResourceDefinition" "" $api) -}}
- {{- $isOutdated := false -}}
- {{- if $crd -}}
- {{/* If CRD is already present in the cluster, it must have the minimum supported version */}}
- {{- $isOutdated = true -}}
- {{- if hasKey $crd.metadata "labels" -}}
- {{- $crdVersion := get $crd.metadata.labels "app.kubernetes.io/version" -}}
- {{- if (eq "true" (include "airlock-microgateway.isSemver" $crdVersion)) -}}
- {{- if (semverCompare $supportedVersion $crdVersion) }}
- {{- $isOutdated = false -}}
- {{- end }}
- {{- end -}}
- {{- end -}}
- {{- end -}}
- {{- if $isOutdated }}
-{{ base $path }}
- {{- end }}
- {{- end -}}
-{{- end -}}
-{{- end -}}
-
-{{- define "airlock-microgateway.isSemver" -}}
+{{- define "airlock-microgateway-cni.isSemver" -}}
{{- regexMatch `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` . -}}
{{- end -}}
-{{- define "airlock-microgateway.docsVersion" -}}
-{{- if and (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
+{{- define "airlock-microgateway-cni.docsVersion" -}}
+{{- if and (eq "true" (include "airlock-microgateway-cni.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
{{- $version := (semver .Chart.AppVersion) -}}
{{- $version.Major }}.{{ $version.Minor -}}
{{- else -}}
{{- print "latest" -}}
{{- end -}}
{{- end -}}
-
-{{- define "airlock-microgateway.watchNamespaceSelector.labelQuery" -}}
-{{- $list := list -}}
-{{- with .matchLabels -}}
- {{- range $key, $value := . -}}
- {{- $list = append $list (printf "%s=%s" $key $value) -}}
- {{- end -}}
-{{- end -}}
-{{- with .matchExpressions -}}
- {{- range . -}}
- {{- if has .operator (list "In" "NotIn") -}}
- {{- $list = append $list (printf "%s %s (%s)" .key (lower .operator) (join "," .values)) -}}
- {{- else if eq .operator "Exists" -}}
- {{- $list = append $list .key -}}
- {{- else if eq .operator "DoesNotExist" -}}
- {{- $list = append $list (printf "!%s" .key) -}}
- {{- end -}}
- {{- end -}}
-{{- end -}}
-{{- join "," $list -}}
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/clusterrole.yaml b/charts/airlock/microgateway/4.3.0/templates/clusterrole.yaml
new file mode 100644
index 000000000..ef88ac783
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/templates/clusterrole.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+ - patch
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/templates/clusterrolebinding.yaml b/charts/airlock/microgateway/4.3.0/templates/clusterrolebinding.yaml
new file mode 100644
index 000000000..04f87cb0f
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/templates/clusterrolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/templates/configmap.yaml b/charts/airlock/microgateway/4.3.0/templates/configmap.yaml
new file mode 100644
index 000000000..b880116ef
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/templates/configmap.yaml
@@ -0,0 +1,22 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+data:
+ plugin-conf.json: |-
+ {
+ "type": "{{ include "airlock-microgateway-cni.fullname" . }}",
+ "debug": {{ eq .Values.config.logLevel "debug" }},
+ "logFilePath": "/var/log/{{ include "airlock-microgateway-cni.fullname" . }}.log",
+ "kubernetes": {
+ "kubeconfig": "{{ .Values.config.cniNetDir }}/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig",
+ "excludeNamespaces": {{ toJson .Values.config.excludeNamespaces }}
+ }
+ }
diff --git a/charts/airlock/microgateway/4.3.0/templates/daemonset.yaml b/charts/airlock/microgateway/4.3.0/templates/daemonset.yaml
new file mode 100644
index 000000000..4ba9f2669
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/templates/daemonset.yaml
@@ -0,0 +1,136 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "airlock-microgateway-cni.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ kubectl.kubernetes.io/default-container: cni-installer
+ {{- with mustMerge .Values.podAnnotations .Values.commonAnnotations}}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 8 }}
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ - args:
+ - --log-level
+ - "{{ .Values.config.logLevel }}"
+ env:
+ - name: CNI_NETWORK_CONFIG
+ valueFrom:
+ configMapKeyRef:
+ key: plugin-conf.json
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ - name: CNI_BIN_DIR
+ value: /host/opt/cni/bin
+ - name: CNI_NET_DIR
+ value: /host/etc/cni/net.d
+ - name: KUBECONFIG_FILE_NAME
+ value: "{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig"
+ - name: INSTALL_MODE
+ value: {{ .Values.config.installMode }}
+ - name: KUBERNETES_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ image: {{ include "airlock-microgateway-cni.image" .Values.image }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ name: cni-installer
+ {{- with .Values.resources }}
+ resources:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ startupProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 5
+ initialDelaySeconds: 3
+ periodSeconds: 3
+ timeoutSeconds: 3
+ readinessProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 1
+ periodSeconds: 60
+ timeoutSeconds: 3
+ securityContext:
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ - mountPath: /run/cni-installer
+ name: cni-installer-status
+ hostNetwork: true
+ priorityClassName: system-node-critical
+ restartPolicy: Always
+ securityContext:
+ fsGroup: 0
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ serviceAccountName: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ terminationGracePeriodSeconds: 5
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ tolerations:
+ - effect: NoSchedule
+ operator: Exists
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
+ - emptyDir: {}
+ name: cni-installer-status
diff --git a/charts/airlock/microgateway/4.3.0/templates/network-attachment-definition.yaml b/charts/airlock/microgateway/4.3.0/templates/network-attachment-definition.yaml
new file mode 100644
index 000000000..5d657e309
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/templates/network-attachment-definition.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.multusNetworkAttachmentDefinition.create -}}
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Values.multusNetworkAttachmentDefinition.namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/_operator_helpers.tpl b/charts/airlock/microgateway/4.3.0/templates/operator/_operator_helpers.tpl
deleted file mode 100644
index a540ff9f4..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/_operator_helpers.tpl
+++ /dev/null
@@ -1,42 +0,0 @@
-{{/*
-Create a default fully qualified name for operator components.
-*/}}
-{{- define "airlock-microgateway.operator.fullname" -}}
-{{ include "airlock-microgateway.fullname" . }}-operator
-{{- end }}
-
-
-{{/*
-Common operator labels
-*/}}
-{{- define "airlock-microgateway.operator.labels" -}}
-{{ include "airlock-microgateway.sharedLabels" . }}
-{{ include "airlock-microgateway.operator.selectorLabels" . }}
-{{- end }}
-
-{{/*
-Operator Selector labels
-*/}}
-{{- define "airlock-microgateway.operator.selectorLabels" -}}
-{{ include "airlock-microgateway.sharedSelectorLabels" . }}
-app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-operator
-app.kubernetes.io/component: controller
-{{- end }}
-
-{{/*
-Create the name of the service account to use for the operator
-*/}}
-{{- define "airlock-microgateway.operator.serviceAccountName" -}}
-{{- if .Values.operator.serviceAccount.create }}
-{{- default (include "airlock-microgateway.operator.fullname" .) .Values.operator.serviceAccount.name }}
-{{- else }}
-{{- default "default" .Values.operator.serviceAccount.name }}
-{{- end }}
-{{- end }}
-
-{{/*
-ServiceMonitor metrics regex pattern for leader only metrics
-*/}}
-{{- define "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" -}}
-^(microgateway_license|microgateway_sidecars).*$
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/_rbac.gen.tpl b/charts/airlock/microgateway/4.3.0/templates/operator/_rbac.gen.tpl
deleted file mode 100644
index 83b314cbc..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/_rbac.gen.tpl
+++ /dev/null
@@ -1,237 +0,0 @@
-{{/* AUTOGENERATED FILE DO NOT EDIT */}}
-
-{{/*
-Operator rbac permission rules
-*/}}
-{{- define "airlock-microgateway-operator.rbacRules" -}}
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
-- apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - delete
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - ""
- resources:
- - pods/finalizers
- verbs:
- - update
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
- - update
-- apiGroups:
- - ""
- resources:
- - secrets
- verbs:
- - create
- - delete
- - get
- - list
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - accesscontrols
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - contentsecurities
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - denyrules
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyclusters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyconfigurations
- verbs:
- - create
- - delete
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyconfigurations/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyhttpfilters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - graphqls
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - headerrewrites
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - identitypropagations
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - limits
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcrelyingparties
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - openapis
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - parsers
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - redisproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sessionhandlings
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways
- verbs:
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/finalizers
- verbs:
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - telemetries
- verbs:
- - get
- - list
- - watch
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/_webhooks.gen.tpl b/charts/airlock/microgateway/4.3.0/templates/operator/_webhooks.gen.tpl
deleted file mode 100644
index 02e304890..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/_webhooks.gen.tpl
+++ /dev/null
@@ -1,339 +0,0 @@
-{{/* AUTOGENERATED FILE DO NOT EDIT */}}
-
-{{/*
-Operator mutating webhooks
-*/}}
-{{- define "airlock-microgateway-operator.mutatingWebhooks" -}}
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /mutate-v1-pod
- failurePolicy: Fail
- name: mutate-pod.microgateway.airlock.com
- reinvocationPolicy: IfNeeded
- rules:
- - apiGroups:
- - ""
- apiVersions:
- - v1
- operations:
- - CREATE
- resources:
- - pods
- sideEffects: None
- objectSelector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
-{{- end }}
-
-{{/*
-Operator validating webhooks
-*/}}
-{{- define "airlock-microgateway-operator.validatingWebhooks" -}}
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-v1-pod
- failurePolicy: Fail
- name: validate-pod.microgateway.airlock.com
- rules:
- - apiGroups:
- - ""
- apiVersions:
- - v1
- operations:
- - CREATE
- - UPDATE
- resources:
- - pods
- sideEffects: None
- objectSelector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-accesscontrol
- failurePolicy: Fail
- name: validate-accesscontrol.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - accesscontrols
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-denyrules
- failurePolicy: Fail
- name: validate-denyrules.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - denyrules
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-envoycluster
- failurePolicy: Fail
- name: validate-envoycluster.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - envoyclusters
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-envoyhttpfilter
- failurePolicy: Fail
- name: validate-envoyhttpfilter.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - envoyhttpfilters
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-graphql
- failurePolicy: Fail
- name: validate-graphql.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - graphqls
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-headerrewrites
- failurePolicy: Fail
- name: validate-headerrewrites.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - headerrewrites
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-identitypropagation
- failurePolicy: Fail
- name: validate-identitypropagation.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - identitypropagations
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-limits
- failurePolicy: Fail
- name: validate-limits.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - limits
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-oidcprovider
- failurePolicy: Fail
- name: validate-oidcprovider.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - oidcproviders
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-oidcrelyingparty
- failurePolicy: Fail
- name: validate-oidcrelyingparty.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - oidcrelyingparties
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-openapi
- failurePolicy: Fail
- name: validate-openapi.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - openapis
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-parser
- failurePolicy: Fail
- name: validate-parser.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - parsers
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-redisprovider
- failurePolicy: Fail
- name: validate-redisprovider.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - redisproviders
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-sidecargateway
- failurePolicy: Fail
- name: validate-sidecargateway.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - sidecargateways
- sideEffects: None
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/configmap.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/configmap.yaml
deleted file mode 100644
index e86208023..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/configmap.yaml
+++ /dev/null
@@ -1,394 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-config
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-data:
- engine_bootstrap_config_template.yaml: |
- # Base configuration, admin interface on port 19000
- admin:
- address:
- socket_address:
- address: 127.0.0.1
- port_value: 19000
- dynamic_resources:
- cds_config:
- initial_fetch_timeout: 10s
- resource_api_version: V3
- api_config_source:
- api_type: GRPC
- transport_api_version: V3
- grpc_services:
- - envoy_grpc:
- cluster_name: xds_cluster
- set_node_on_first_message_only: true
- # Prevent Envoy Node from overloading the xDS server due to rejected configuration when using xDS SotW gRPC
- rate_limit_settings:
- max_tokens: 5
- fill_rate: 0.2
- lds_config:
- resource_api_version: V3
- initial_fetch_timeout: 10s
- api_config_source:
- api_type: GRPC
- transport_api_version: V3
- grpc_services:
- - envoy_grpc:
- cluster_name: xds_cluster
- set_node_on_first_message_only: true
- # Prevent Envoy Node from overloading the xDS server due to rejected configuration when using xDS SotW gRPC
- rate_limit_settings:
- max_tokens: 5
- fill_rate: 0.2
- static_resources:
- listeners:
- - name: probe
- address:
- socket_address:
- address: 0.0.0.0
- port_value: 19001
- filter_chains:
- - filters:
- - name: http_connection_manager
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- stat_prefix: probe
- codec_type: AUTO
- http2_protocol_options:
- initial_connection_window_size: 1048576
- initial_stream_window_size: 65536
- max_concurrent_streams: 100
- route_config:
- name: probe
- virtual_hosts:
- - name: probe
- domains:
- - '*'
- routes:
- - name: ready
- match:
- path: /ready
- headers:
- - name: ':method'
- string_match:
- exact: 'GET'
- route:
- cluster: airlock_microgateway_engine_admin
- http_filters:
- - name: envoy.filters.http.router
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- - name: metrics
- address:
- socket_address:
- address: 0.0.0.0
- port_value: 19002
- filter_chains:
- - filters:
- - name: http_connection_manager
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- stat_prefix: metrics
- codec_type: AUTO
- http2_protocol_options:
- initial_connection_window_size: 1048576
- initial_stream_window_size: 65536
- max_concurrent_streams: 100
- route_config:
- name: metrics
- virtual_hosts:
- - name: metrics
- domains:
- - '*'
- routes:
- - name: metrics
- match:
- path: /metrics
- headers:
- - name: ':method'
- string_match:
- exact: 'GET'
- route:
- prefix_rewrite: '/stats/prometheus'
- cluster: airlock_microgateway_engine_admin
- http_filters:
- - name: envoy.filters.http.router
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- clusters:
- - name: xds_cluster
- connect_timeout: 1s
- type: STRICT_DNS
- load_assignment:
- cluster_name: xds_cluster
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: airlock-microgateway-operator-xds.$(OPERATOR_NAMESPACE).svc.cluster.local
- port_value: 13377
- typed_extension_protocol_options:
- envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
- '@type': type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
- explicit_http_config:
- http2_protocol_options:
- connection_keepalive:
- interval: 360s
- timeout: 5s
- transport_socket:
- name: envoy.transport_sockets.tls
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
- common_tls_context:
- tls_params:
- tls_minimum_protocol_version: TLSv1_3
- tls_maximum_protocol_version: TLSv1_3
- validation_context_sds_secret_config:
- name: validation_context_sds
- sds_config:
- resource_api_version: V3
- path_config_source:
- path: /etc/envoy/validation_context_sds_secret.yaml
- watched_directory:
- path: /etc/envoy/
- tls_certificate_sds_secret_configs:
- - name: tls_certificate_sds
- sds_config:
- resource_api_version: V3
- path_config_source:
- path: /etc/envoy/tls_certificate_sds_secret.yaml
- watched_directory:
- path: /etc/envoy/
- - name: airlock_microgateway_engine_admin
- connect_timeout: 1s
- type: STATIC
- load_assignment:
- cluster_name: airlock_microgateway_engine_admin
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: 127.0.0.1
- port_value: 19000
- typed_extension_protocol_options:
- envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
- '@type': type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
- explicit_http_config:
- http2_protocol_options:
- connection_keepalive:
- interval: 360s
- timeout: 5s
- stats_config:
- stats_tags:
- - tag_name: "block_type"
- regex: "\\.(block_type\\.([^.]+))"
- - tag_name: "attack_type"
- regex: "\\.(attack_type\\.([^.]+))"
- - tag_name: "envoy_cluster_name"
- regex: "\\.(cluster\\.([^.]+))"
- - tag_name: "version"
- regex: "\\.(version\\.([^.]+))"
- use_all_default_tags: true
- overload_manager:
- resource_monitors:
- - name: "envoy.resource_monitors.global_downstream_max_connections"
- typed_config:
- "@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig
- max_active_downstream_connections: 50000
- bootstrap_extensions:
- - name: airlock.bootstrap.engine_build_info
- typed_config:
- '@type': type.googleapis.com/airlock.extensions.bootstrap.stats.v1alpha.Stats
- application_log_config:
- log_format:
- text_format: '{"@timestamp":"%Y-%m-%dT%T.%e%z","log":{"logger":"%n","level":"%l","origin":{"file":{"name":"%g","line":%#},"function":"%!"}},"event":{"module":"envoy","dataset":"envoy.application"},"process":{"pid":%P,"thread":{"id":%t}},"ecs":{"version":"8.5"},"message":"%j"}'
- engine_container_template.yaml: |
- name: "$(ENGINE_NAME)"
- image: "$(ENGINE_IMAGE)"
- imagePullPolicy: {{ .Values.engine.image.pullPolicy }}
- args:
- - "--config-path"
- - "/etc/envoy/bootstrap_config.yaml"
- - "--base-id"
- - "$(BASE_ID)"
- - "--file-flush-interval-msec"
- - '1000'
- - "--drain-time-s"
- - '60'
- - "--service-node"
- - "$(POD_NAME).$(POD_NAMESPACE)"
- - "--service-cluster"
- - "$(APP_NAME).$(POD_NAMESPACE)"
- - "--log-path"
- - "/dev/stdout"
- - "--log-level"
- - "$(LOG_LEVEL)"
- volumeMounts:
- - name: airlock-microgateway-bootstrap-secret-volume
- mountPath: /etc/envoy
- readOnly: true
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.namespace
- - name: POD_IP
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: status.podIP
- ports:
- - containerPort: 13378
- protocol: TCP
- - containerPort: 19001
- protocol: TCP
- - containerPort: 19002
- protocol: TCP
- livenessProbe:
- httpGet:
- path: /ready
- port: 19001
- scheme: HTTP
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 5
- successThreshold: 1
- timeoutSeconds: 1
- readinessProbe:
- httpGet:
- path: /ready
- port: 19001
- scheme: HTTP
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 3
- successThreshold: 1
- timeoutSeconds: 1
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- {{- with .Values.engine.resources }}
- resources:
- {{- toYaml . | nindent 6 }}
- {{- end }}
- session_agent_container_template.yaml: |
- name: "$(SESSION_AGENT_NAME)"
- image: "$(SESSION_AGENT_IMAGE)"
- imagePullPolicy: {{ .Values.sessionAgent.image.pullPolicy }}
- args:
- - "--port"
- - "19004"
- - "--config-path"
- - "/etc/microgateway-session-agent/config.json"
- volumeMounts:
- - name: airlock-microgateway-session-agent-volume
- mountPath: /etc/microgateway-session-agent
- readOnly: true
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.namespace
- ports:
- - containerPort: 19004
- livenessProbe:
- {{- if (semverCompare ">=1.27 || >=1.27.1-0" .Capabilities.KubeVersion.Version)}}
- grpc:
- port: 19004
- {{- else }}
- tcpSocket:
- port: 19004
- {{- end }}
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 5
- successThreshold: 1
- timeoutSeconds: 5
- readinessProbe:
- {{- if (semverCompare ">=1.27 || >=1.27.1-0" .Capabilities.KubeVersion.Version)}}
- grpc:
- port: 19004
- {{- else }}
- tcpSocket:
- port: 19004
- {{- end }}
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 3
- successThreshold: 1
- timeoutSeconds: 5
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- {{- with .Values.sessionAgent.resources }}
- resources:
- {{- toYaml . | nindent 6 }}
- {{- end }}
- network_validator_container_template.yaml: |
- name: "$(NETWORK_VALIDATOR_NAME)"
- image: "$(NETWORK_VALIDATOR_IMAGE)"
- imagePullPolicy: {{ .Values.networkValidator.image.pullPolicy }}
- command: ["/bin/sh", "-c"]
- args:
- - |-
- echo 'pong' | nc -v -l 127.0.0.1 -p 13378 &
- for i in 1 2 3; do
- sleep 1s
- if r=$(echo 'ping' | nc 127.0.0.1 19003) && [ $r == pong ]; then
- echo -n 'Traffic redirection to Airlock Microgateway Engine is working.' > /dev/termination-log
- exit 0
- fi
- done
- echo -en 'Traffic redirection to Airlock Microgateway Engine is not working.\nRestart the pod after ensuring that hostNetwork is disabled and a compatible Airlock Microgateway CNI version is installed on the node.\nCertain environments may also require additional configuration (see docs.airlock.com for more information).' > /dev/termination-log
- exit 1
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- operator_config.yaml: |
- apiVersion: config.airlock.com/v1alpha1
- kind: OperatorConfig
- health:
- healthProbeBindAddress: :8081
- metrics:
- bindAddress: 0.0.0.0:8080
- webhook:
- port: 9443
- deployment:
- sidecar:
- engineContainerTemplate: "/sidecar/engine_container_template.yaml"
- networkValidatorContainerTemplate: "/sidecar/network_validator_container_template.yaml"
- sessionAgentContainerTemplate: "/sidecar/session_agent_container_template.yaml"
- engine:
- bootstrapConfigTemplate: "/engine_bootstrap_config_template.yaml"
- log:
- level: {{ .Values.operator.config.logLevel }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaces:
- selector:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaces:
- list:
- {{- toYaml . | nindent 8 }}
- {{- end }}
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/metrics-service.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/metrics-service.yaml
deleted file mode 100644
index 34d23f6d6..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/metrics-service.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-metrics
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: http
- name: metrics
- port: 8080
- protocol: TCP
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
----
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-leader-metrics
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- operator.microgateway.airlock.com/isLeader: "true"
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: http
- name: metrics
- port: 8080
- protocol: TCP
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
- operator.microgateway.airlock.com/isLeader: "true"
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/role.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/role.yaml
deleted file mode 100644
index 5378be8ef..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/role.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
- - apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
- - apiGroups:
- - coordination.k8s.io
- resources:
- - leases
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
- - apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/rolebinding.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/rolebinding.yaml
deleted file mode 100644
index bafec1015..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/rolebinding.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/selfsigned-issuer.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/selfsigned-issuer.yaml
deleted file mode 100644
index 466c56338..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/selfsigned-issuer.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-selfsigned-issuer
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selfSigned: {}
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/serviceaccount.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/serviceaccount.yaml
deleted file mode 100644
index 434d7e9d3..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/serviceaccount.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-{{- if .Values.operator.serviceAccount.create -}}
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with mustMerge .Values.operator.serviceAccount.annotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/servicemonitor.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/servicemonitor.yaml
deleted file mode 100644
index ff85a9a31..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/servicemonitor.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-{{- if .Values.operator.serviceMonitor.create }}
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- matchExpressions:
- - { key: "operator.microgateway.airlock.com/isLeader", operator: DoesNotExist }
- endpoints:
- - path: /metrics
- port: metrics
- scheme: http
- metricRelabelings:
- - sourceLabels:
- - __name__
- regex: {{ include "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" . }}
- action: drop
----
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- operator.microgateway.airlock.com/isLeader: "true"
- endpoints:
- - path: /metrics
- port: metrics
- scheme: http
- metricRelabelings:
- - sourceLabels:
- - __name__
- regex: {{ include "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" . }}
- action: keep
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/serving-certificate.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/serving-certificate.yaml
deleted file mode 100644
index 60b92e1e2..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/serving-certificate.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- dnsNames:
- - airlock-microgateway-operator-webhook.{{ .Release.Namespace }}.svc
- - airlock-microgateway-operator-webhook.{{ .Release.Namespace }}.svc.cluster.local
- issuerRef:
- kind: Issuer
- name: {{ include "airlock-microgateway.operator.fullname" . }}-selfsigned-issuer
- secretName: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-server-cert
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/webhook-service.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/webhook-service.yaml
deleted file mode 100644
index 477ea839f..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/webhook-service.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-webhook
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: https
- name: webhook
- port: 443
- protocol: TCP
- targetPort: 9443
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/xds-service.yaml b/charts/airlock/microgateway/4.3.0/templates/operator/xds-service.yaml
deleted file mode 100644
index 81b41acf5..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/operator/xds-service.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-xds
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: grpc
- name: xds
- port: 13377
- protocol: TCP
- targetPort: 13377
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
- operator.microgateway.airlock.com/isLeader: "true"
diff --git a/charts/airlock/microgateway/4.3.0/templates/scc-role.yaml b/charts/airlock/microgateway/4.3.0/templates/scc-role.yaml
new file mode 100644
index 000000000..862748692
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/templates/scc-role.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+- apiGroups:
+ - security.openshift.io
+ resourceNames:
+ - privileged
+ resources:
+ - securitycontextconstraints
+ verbs:
+ - use
+{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/scc-rolebinding.yaml b/charts/airlock/microgateway/4.3.0/templates/scc-rolebinding.yaml
new file mode 100644
index 000000000..ebd02982c
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/templates/scc-rolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+subjects:
+- kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/templates/serviceaccount.yaml b/charts/airlock/microgateway/4.3.0/templates/serviceaccount.yaml
new file mode 100644
index 000000000..3dc8d58ea
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.0/templates/serviceaccount.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with mustMerge .Values.serviceAccount.annotations .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/templates/tests/rbac.yaml b/charts/airlock/microgateway/4.3.0/templates/tests/rbac.yaml
index 93bd4cd1b..744799333 100644
--- a/charts/airlock/microgateway/4.3.0/templates/tests/rbac.yaml
+++ b/charts/airlock/microgateway/4.3.0/templates/tests/rbac.yaml
@@ -2,142 +2,63 @@
apiVersion: v1
kind: ServiceAccount
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
subjects:
- kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
rules:
- apiGroups:
- - microgateway.airlock.com
+ - "apps"
resources:
- - sidecargateways
+ - daemonsets
resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway"
+ - {{ include "airlock-microgateway-cni.fullname" . }}
verbs:
- - get
- - list
- - watch
- - delete
+ - get
+ - watch
+ - list
- apiGroups:
- - microgateway.airlock.com
+ - ""
resources:
- - sidecargateways
+ - pods
+ - pods/log
verbs:
- - create
+ - get
+ - list
+{{- if .Values.rbac.createSCCRole }}
- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - list
-- apiGroups:
- - "apps"
- resources:
- - deployments
+ - security.openshift.io
resourceNames:
- - "{{ include "airlock-microgateway.operator.fullname" . }}"
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - "apps"
+ - privileged
resources:
- - statefulsets
- - statefulsets/scale
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend"
+ - securitycontextconstraints
verbs:
- - get
- - list
- - watch
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- - pods/log
- - pods/status
- - pods/attach
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend-0"
- - "{{ include "airlock-microgateway.fullname" . }}-test-valid-request"
- - "{{ include "airlock-microgateway.fullname" . }}-test-injection-request"
- verbs:
- - get
- - list
- - create
- - watch
- - delete
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - create
-{{- if .Values.operator.watchNamespaceSelector }}
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-subjects:
- - kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
- namespace: {{ .Release.Namespace }}
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-rules:
-- apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
-{{- end }}
+ - use
+{{- end -}}
{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/templates/tests/service.yaml b/charts/airlock/microgateway/4.3.0/templates/tests/service.yaml
deleted file mode 100644
index 30ddc278d..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/tests/service.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-{{- if .Values.tests.enabled -}}
-apiVersion: v1
-kind: Service
-metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-service"
- namespace: {{ .Release.Namespace }}
- labels:
- app: test-service
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
-spec:
- selector:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
- ports:
- - name: http
- port: 8080
- targetPort: 8080
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/tests/statefulset.yaml b/charts/airlock/microgateway/4.3.0/templates/tests/statefulset.yaml
deleted file mode 100644
index 710a7b9f6..000000000
--- a/charts/airlock/microgateway/4.3.0/templates/tests/statefulset.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-{{- if .Values.tests.enabled -}}
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- namespace: {{ .Release.Namespace }}
- labels:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
-spec:
- serviceName: nginx
- replicas: 0
- selector:
- matchLabels:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 6 }}
- template:
- metadata:
- annotations:
- k8s.v1.cni.cncf.io/networks: default/airlock-microgateway-cni
- labels:
- sidecar.microgateway.airlock.com/inject: "true"
- sidecar.istio.io/inject: "false"
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 8 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 8 }}
- spec:
- containers:
- - image: cgr.dev/chainguard/nginx
- name: nginx
- ports:
- - containerPort: 8080
- volumeMounts:
- - mountPath: /var/lib/nginx/tmp/
- name: nginx-tmp
- - mountPath: /var/run
- name: nginx-run
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 12 }}
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - emptyDir: {}
- name: nginx-tmp
- - emptyDir: {}
- name: nginx-run
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/tests/test-install.yaml b/charts/airlock/microgateway/4.3.0/templates/tests/test-install.yaml
index ab82abea7..12d8c8de7 100644
--- a/charts/airlock/microgateway/4.3.0/templates/tests/test-install.yaml
+++ b/charts/airlock/microgateway/4.3.0/templates/tests/test-install.yaml
@@ -2,14 +2,11 @@
apiVersion: v1
kind: Pod
metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-install"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-test-install"
namespace: {{ .Release.Namespace }}
labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- sidecar.istio.io/inject: "false"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
annotations:
helm.sh/hook: test
helm.sh/hook-delete-policy: before-hook-creation
@@ -19,209 +16,88 @@ spec:
- name: test
image: "bitnami/kubectl:{{ .Capabilities.KubeVersion.Major }}.{{ .Capabilities.KubeVersion.Minor }}"
securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ readOnly: true
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ readOnly: true
command:
- sh
- -c
- |
set -eu
- clean_up() {
- echo ""
- echo "### Clean up test resources"
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- echo ""
- echo "### Scale down '{{ include "airlock-microgateway.fullname" . }}-test-backend'"
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=60s
- sleep 3s
- echo ""
- }
-
fail() {
+ echo "Error: ${1}"
echo ""
- echo "### Error: ${1}"
- echo ""
-
- if kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway >/dev/null 2>&1; then
- echo ""
- echo 'Microgateway Sidecargateway status:'
- kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway -o jsonpath-as-json='{.status}' || true
- echo ""
- echo ""
- fi
-
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 >/dev/null 2>&1; then
- echo "Pod '{{ include "airlock-microgateway.fullname" . }}-test-backend-0':"
- kubectl describe -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 || true
- echo ""
- echo ""
- echo 'Logs of Nginx container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c nginx --tail 5 || true
- echo ""
- echo ""
- # Wait for engine logs
- sleep 10s
- echo 'Logs of Microgateway Engine container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c airlock-microgateway-engine --tail 5 || true
- fi
-
+ echo 'CNI installer logs:'
+ kubectl logs -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}} -c cni-installer
exit 1
}
- create_sidecargateway() {
- # create SidecarGateway resource for testing purposes
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- kubectl apply -f - </dev/null 2>&1; do sleep 1s; i=$((i+1)); done
- kubectl logs -f -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- kubectl delete pod --ignore-not-found=true -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- }
-
- {{- if .Values.operator.watchNamespaceSelector }}
- echo "### Verify that Namespace Selector matches Namespace '{{ .Release.Namespace }}'"
- if ! kubectl get namespace -l '{{ include "airlock-microgateway.watchNamespaceSelector.labelQuery" .Values.operator.watchNamespaceSelector }}' | grep -q {{ .Release.Namespace }}; then
- labels=$(kubectl get namespace {{ .Release.Namespace }} -o jsonpath={.metadata.labels} | jq | awk '{print " " $0}')
- fail {{printf `"Operator namespace '%s' is not part of the operator's watch scope. To execute 'helm test', the selector configured in the helm value 'operator.watchNamespaceSelector' must match the namespace's labels:\n* Current selector:\n%s\n\n* Current labels:\n$labels\n###"`
- .Release.Namespace
- (replace "\"" "\\\"" (replace "\n" "\\n" (.Values.operator.watchNamespaceSelector | toPrettyJson | indent 2)))
- }}
+ if ! kubectl rollout status --timeout=60s -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}}; then
+ fail 'CNI DaemonSet rollout did not complete within timeout'
fi
- echo ""
- {{- end }}
- trap clean_up EXIT
- echo ""
-
- echo "### Waiting for Microgateway Operator Deployments to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} --timeout=90s \
- deployments/{{ include "airlock-microgateway.operator.fullname" . }}; then
- fail 'Timout occurred'
+ echo "Checking whether CNI binary was installed"
+ if ! [ -f "/host/opt/cni/bin/{{ include "airlock-microgateway-cni.fullname" . }}" ]; then
+ fail 'CNI binary was not installed'
fi
- echo ""
- echo "### Scale '{{ include "airlock-microgateway.fullname" . }}-test-backend' to '1' replica"
- # scale to zero replicas to ensure no pods are present from previous runs
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=10s
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=1 --timeout=10s
- echo ""
-
- echo "### Waiting for backend pod"
- i=0
- while true; do
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0; then
- break
- elif [ $i -gt 3 ]; then
- fail 'Pod not ready'
- fi
- sleep 2s
- i=$((i+1))
- done
-
- echo "### Checking Microgateway Engine sidecar container was injected"
- if ! kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.spec.containers[?(@.name=="airlock-microgateway-engine")]}' | grep -q "airlock-microgateway-engine"; then
- fail 'Microgateway Engine sidecar container not injected'
+ echo "Checking whether CNI kubeconfig was installed"
+ if ! [ -f "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig" ]; then
+ fail 'CNI kubeconfig was not created'
fi
- echo "True"
- echo ""
- echo "### Checking for valid license"
- i=0
- while true; do
- if [ "$(kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.metadata.labels.sidecar\.microgateway\.airlock\.com/licensed}')" = 'true' ]; then
- break
- elif [ $i -gt 30 ]; then
- fail 'Microgateway license is missing or invalid'
- fi
- sleep 2s
- i=$((i+1))
- done
- echo "True"
- echo ""
+ echo "Checking whether CNI configuration was written"
+ case {{ .Values.config.installMode }} in
+ "chained")
+ for file in "/host/etc/cni/net.d/"*.conflist; do
+ if containsMGWCNIConf "${file}"; then
+ echo "Success"
+ exit 0
+ fi
+ done
+ ;;
+ "standalone")
+ if containsMGWCNIConf "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}.conflist"; then
+ echo "Success"
+ exit 0
+ fi
+ ;;
+ "manual")
+ echo "- Skipping because we are in 'manual' install mode"
+ echo "Success"
+ exit 0
+ ;;
+ esac
- echo "### Create SidecarGateway resource for testing"
- if ! create_sidecargateway ; then
- fail 'Creation of SidecarGateway resource failed'
- fi
- echo ""
-
- echo "### Waiting for '{{ include "airlock-microgateway.fullname" . }}-test-backend' to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --timeout=90s; then
- fail 'Timout occurred'
- fi
- echo ""
-
- echo "### Waiting for 'engine-config-valid' condition"
- if ! kubectl wait -n {{ .Release.Namespace }} pods --field-selector=metadata.name={{ include "airlock-microgateway.fullname" . }}-test-backend-0 --timeout=90s --for=condition=microgateway.airlock.com/engine-config-valid=True; then
- fail 'Configuration was never accepted by the Microgateway Engine'
- fi
- sleep 5s
- echo ""
- echo ""
-
- echo "### Checking whether a valid request is successful and returns HTTP status code '200'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "200 OK"; then
- fail 'A valid request was not successful'
- fi
- echo ""
- echo ""
-
- echo "### Checking whether a request with an injection attack is blocked and returns HTTP status code '400'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/?token='%20UnION%20all%20select%20A" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "400 Bad Request"; then
- fail 'A malicious request was not blocked'
- fi
- echo ""
- echo ""
-
- echo "### Installation of '{{ include "airlock-microgateway.fullname" . }}' succeeded"
- exit 0
- serviceAccountName: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ fail 'Configuration for plugin "{{ include "airlock-microgateway-cni.fullname" . }}" was not found'
+ serviceAccountName: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.0/values.schema.json b/charts/airlock/microgateway/4.3.0/values.schema.json
index 173d6b084..e087bd700 100644
--- a/charts/airlock/microgateway/4.3.0/values.schema.json
+++ b/charts/airlock/microgateway/4.3.0/values.schema.json
@@ -14,15 +14,6 @@
"commonAnnotations": {
"$ref": "#/definitions/StringMap"
},
- "crds": {
- "type": "object",
- "properties": {
- "skipVersionCheck": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
"imagePullSecrets": {
"type": "array",
"items": {
@@ -39,304 +30,120 @@
"additionalProperties": true
}
},
- "operator": {
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "podAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "podLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "resources": {
+ "type": "object"
+ },
+ "nodeSelector": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "affinity": {
+ "type": "object"
+ },
+ "rbac": {
"type": "object",
"properties": {
- "replicaCount": {
- "type": "integer",
- "minimum": 0
- },
- "updateStrategy": {
- "$ref": "#/definitions/UpdateStrategy"
- },
- "image": {
- "$ref": "#/definitions/Image"
- },
- "podAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "podLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "resources": {
- "type": "object"
- },
- "nodeSelector": {
- "$ref": "#/definitions/StringMap"
- },
- "tolerations": {
- "type": "array",
- "items": {
- "type": "object"
- }
- },
- "affinity": {
- "type": "object"
- },
- "config": {
- "type": "object",
- "properties": {
- "logLevel": {
- "type": "string",
- "enum": [
- "debug",
- "info",
- "warn",
- "error"
- ]
- }
- },
- "required": [
- "logLevel"
- ],
- "additionalProperties": false
- },
- "serviceAccount": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "annotations": {
- "$ref": "#/definitions/StringMap"
- },
- "name": {
- "type": "string"
- }
- },
- "required": [
- "annotations",
- "create",
- "name"
- ],
- "additionalProperties": false
- },
- "watchNamespaces": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "watchNamespaceSelector": {
- "$ref": "#/definitions/LabelSelector"
- },
- "rbac": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- },
- "serviceMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "oneOf": [
- {
- "properties": {
- "watchNamespaces": {
- "minItems": 1
- },
- "watchNamespaceSelector": {
- "additionalProperties": false
- }
- }
- },
- {
- "properties": {
- "watchNamespaces": {
- "maxItems": 0
- },
- "watchNamespaceSelector": {
- "$ref": "#/definitions/LabelSelector"
- }
- }
- }
- ],
- "required": [
- "affinity",
- "config",
- "image",
- "updateStrategy",
- "nodeSelector",
- "podAnnotations",
- "podLabels",
- "rbac",
- "replicaCount",
- "resources",
- "serviceAccount",
- "serviceAnnotations",
- "serviceLabels",
- "serviceMonitor",
- "tolerations"
- ],
- "additionalProperties": false
- },
- "engine": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- },
- "resources": {
- "type": "object"
- },
- "sidecar": {
- "type": "object",
- "properties":{
- "podMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "podMonitor"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "image",
- "resources",
- "sidecar"
- ],
- "additionalProperties": false
- },
- "networkValidator": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- }
- },
- "required": [
- "image"
- ],
- "additionalProperties": false
- },
- "sessionAgent": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- },
- "resources": {
- "type": "object"
- }
- },
- "required": [
- "image",
- "resources"
- ],
- "additionalProperties": false
- },
- "license": {
- "type": "object",
- "properties": {
- "secretName": {
- "type": "string",
- "minLength": 1
- }
- },
- "required": [
- "secretName"
- ],
- "additionalProperties": false
- },
- "dashboards": {
- "type": "object",
- "properties" : {
"create": {
"type": "boolean"
},
- "config": {
- "type": "object",
- "properties": {
- "grafana": {
- "type": "object",
- "properties": {
- "folderAnnotation": {
- "$ref": "#/definitions/NameValuePair"
- },
- "dashboardLabel": {
- "$ref": "#/definitions/NameValuePair"
- }
- },
- "required": [
- "folderAnnotation",
- "dashboardLabel"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "grafana"
- ],
- "additionalProperties": false
- },
- "instances": {
- "type": "object",
- "properties": {
- "overview": {
- "$ref": "#/definitions/DashboardInstance"
- },
- "license" : {
- "$ref": "#/definitions/DashboardInstance"
- },
- "blockMetrics" : {
- "$ref": "#/definitions/DashboardInstance"
- },
- "blockLogs" : {
- "$ref": "#/definitions/DashboardInstance"
- }
- },
- "required": [
- "overview",
- "license",
- "blockMetrics",
- "blockLogs"
- ],
- "additionalProperties": false
+ "createSCCRole": {
+ "type": "boolean"
}
},
"required": [
"create",
- "config",
- "instances"
+ "createSCCRole"
+ ],
+ "additionalProperties": false
+ },
+ "privileged": {
+ "type": "boolean"
+ },
+ "serviceAccount": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "annotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "annotations",
+ "create",
+ "name"
+ ],
+ "additionalProperties": false
+ },
+ "multusNetworkAttachmentDefinition": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "namespace": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "create",
+ "namespace"
+ ],
+ "additionalProperties": false
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "installMode": {
+ "type": "string",
+ "enum": [
+ "chained",
+ "standalone",
+ "manual"
+ ]
+ },
+ "logLevel": {
+ "type": "string",
+ "enum": [
+ "debug",
+ "info",
+ "warn",
+ "error"
+ ]
+ },
+ "cniNetDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "cniBinDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "excludeNamespaces": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "cniBinDir",
+ "cniNetDir",
+ "excludeNamespaces",
+ "installMode",
+ "logLevel"
],
"additionalProperties": false
},
@@ -357,18 +164,22 @@
}
},
"required": [
+ "affinity",
"commonAnnotations",
"commonLabels",
- "crds",
- "engine",
+ "config",
"fullnameOverride",
+ "image",
"imagePullSecrets",
- "license",
+ "multusNetworkAttachmentDefinition",
"nameOverride",
- "operator",
- "networkValidator",
- "sessionAgent",
- "dashboards",
+ "nodeSelector",
+ "podAnnotations",
+ "podLabels",
+ "privileged",
+ "rbac",
+ "resources",
+ "serviceAccount",
"tests"
],
"additionalProperties": false,
@@ -409,132 +220,6 @@
"tag"
],
"additionalProperties": false
- },
- "LabelSelector": {
- "type": "object",
- "properties": {
- "matchExpressions": {
- "type": "array",
- "items": {
- "type": "object",
- "required": [
- "key",
- "operator"
- ],
- "properties": {
- "key": {
- "type": "string"
- },
- "operator": {
- "type": "string"
- },
- "values": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
- }
- },
- "matchLabels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "additionalProperties": false
- },
- "UpdateStrategy": {
- "type": "object",
- "oneOf" : [
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RecreateType"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RollingUpdateType"
- },
- "rollingUpdate": {
- "$ref": "#/definitions/RollingUpdate"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- }
- ]
- },
- "RecreateType": {
- "type": "string",
- "enum": [
- "Recreate"
- ]
- },
- "RollingUpdateType": {
- "type": "string",
- "enum": [
- "RollingUpdate"
- ]
- },
- "RollingUpdate": {
- "type": "object",
- "properties": {
- "maxSurge": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- },
- "maxUnavailable": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- }
- },
- "anyOf": [
- {"required": ["maxSurge"]},
- {"required": ["maxUnavailable"]}
- ],
- "additionalProperties": false
- },
- "DashboardInstance" : {
- "type" : "object",
- "properties" : {
- "create" : {
- "type" : "boolean"
- }
- },
- "required" : [
- "create"
- ],
- "additionalProperties": false
- },
- "NameValuePair" : {
- "type" : "object",
- "properties" : {
- "name" : {
- "type": "string",
- "minLength": 1
- },
- "value" : {
- "type" : "string",
- "minLength": 1
- }
- },
- "required" : [
- "name",
- "value"
- ],
- "additionalProperties": false
}
}
}
diff --git a/charts/airlock/microgateway/4.3.0/values.yaml b/charts/airlock/microgateway/4.3.0/values.yaml
index b13232aa9..a5bf5dac5 100644
--- a/charts/airlock/microgateway/4.3.0/values.yaml
+++ b/charts/airlock/microgateway/4.3.0/values.yaml
@@ -1,4 +1,4 @@
-# -- Allows overriding the name to use instead of "microgateway".
+# -- Allows overriding the name to use instead of "microgateway-cni".
nameOverride: ""
# -- Allows overriding the name to use as full name of resources.
fullnameOverride: ""
@@ -10,203 +10,75 @@ commonAnnotations: {}
imagePullSecrets: []
# - name: myRegistryKeySecretName
-crds:
- # -- Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs.
- # The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster
- # when performing a "helm install/upgrade".
- skipVersionCheck: false
-operator:
- # -- Number of replicas for the operator Deployment.
- replicaCount: 2
- # -- Specifies the operator update strategy.
- updateStrategy:
- type: RollingUpdate
- # Specifies the Airlock Microgateway Operator image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Operator image.
- repository: "quay.io/airlock/microgateway-operator"
- # -- Image tag to pull.
- tag: "4.3.0"
- # -- SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63").
- # Overrides tag when specified.
- digest: "sha256:dc6f0f9a11d0336c10f6b8a5c7f64d98ac91bd90c49aa1dc4fe7b68cfdea8217"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Annotations to add to all Pods.
- podAnnotations: {}
- # -- Labels to add to all Pods.
- podLabels: {}
- # -- Annotations to add to the Service.
- serviceAnnotations: {}
- # prometheus.io/scrape: "true"
- # prometheus.io/port: "8080"
-
- # -- Labels to add to the Service.
- serviceLabels: {}
- # -- Resource restrictions to apply to the operator container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 1000m
- # memory: 512Mi
- # requests:
- # cpu: 100m
- # memory: 512Mi
-
- # -- Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes.
- nodeSelector: {}
- # -- Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes.
- tolerations: []
- # -- Custom affinity to apply to the operator Deployment. Used to influence the scheduling.
- affinity: {}
- # Parameters for the operator configuration.
- config:
- # -- Operator application log level.
- logLevel: "info"
- # Configures the generation of the ServiceAccount.
- serviceAccount:
- # -- Whether a ServiceAccount should be created.
- create: true
- # -- Annotations to add to the ServiceAccount.
- annotations: {}
- # -- Name of the ServiceAccount to use.
- # If not set and create is true, a name is generated using the fullname template.
- name: ""
- # -- Allows to restrict the operator to specific namespaces, depending on your needs.
- # For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`).
- # In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace.
- # For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`.
- # An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty.
- # Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces.
- # Please note that this feature requires a Premium license.
- watchNamespaces: []
- # -- Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector.
- # It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator.
- # This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings).
- # An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty.
- # Please note that this feature requires a Premium license.
- watchNamespaceSelector: {}
- # For further examples, see: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements.
- # matchLabels:
- # microgateway.airlock.com/enable: "true"
- # matchExpressions:
- # - { key: environment, operator: NotIn, values: [dev] }
-
- # Configures the generation of Role and RoleBinding as well as ClusterRoles and ClusterRoleBinding pairs for the ServiceAccount specified above.
- rbac:
- # -- Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function.
- create: true
- # Configures the generation of a Prometheus Operator ServiceMonitor.
- serviceMonitor:
- # -- Whether to create a ServiceMonitor resource for monitoring.
- create: false
- # -- Labels to add to the ServiceMonitor.
- labels: {}
- # release: ""
-engine:
- # Specifies the Airlock Microgateway Engine image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Engine image.
- repository: "quay.io/airlock/microgateway-engine"
- # -- Image tag to pull.
- tag: "4.3.0"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:f442143294f3138965c9fa2734cafd39ebebe8e289600332b12f8a59c23dd9ef"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Engine container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 500m
- # memory: 128Mi
- # requests:
- # cpu: 10m
- # memory: 40Mi
-
- # Additional configuration when deployed as a sidecar.
- sidecar:
- # Configures the generation of a Prometheus Operator PodMonitor.
- podMonitor:
- # -- Whether to create a PodMonitor resource for monitoring.
- create: false
- # -- Labels to add to the PodMonitor.
- labels: {}
- # release: ""
-networkValidator:
- # Specifies the Airlock Microgateway Network Validator image to be injected as an init-container.
- image:
- # -- Image repository from which to pull the busybox image for the Airlock Microgateway Network Validator init-container.
- repository: "cgr.dev/chainguard/busybox"
- # -- Image tag to pull.
- tag: ""
- # -- SHA256 image digest to pull (in the format "sha256:7d87405b123c89058a0b64ca9393c45a1366a6a580aced1def900a812beb29f6").
- # Overrides tag when specified.
- digest: "sha256:7d87405b123c89058a0b64ca9393c45a1366a6a580aced1def900a812beb29f6"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
-sessionAgent:
- # Specifies the Airlock Microgateway Session Agent image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Session Agent image.
- repository: "quay.io/airlock/microgateway-session-agent"
- # -- Image tag to pull.
- tag: "4.3.0"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:579dfded99145f9c2c1491ff1aeccb08721d63239a8b7f61bb9f455e17e968b2"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Session Agent container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 150m
- # memory: 32Mi
- # requests:
- # cpu: 10m
- # memory: 8Mi
-license:
- # -- Name of the secret containing the "microgateway-license.txt" key.
- secretName: "airlock-microgateway-license"
-# Creates dashboards in the form of ConfigMaps that can be imported
-# by Grafana using its sidecar setup.
-dashboards:
- # -- Whether to create any ConfigMaps containing Grafana dashboards to import.
+# Specifies the Airlock Microgateway CNI image.
+image:
+ # -- Image repository from which to pull the Airlock Microgateway CNI image.
+ repository: "quay.io/airlock/microgateway-cni"
+ # -- Image tag to pull.
+ tag: "4.3.0"
+ # -- SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a").
+ # Overrides tag when specified.
+ digest: "sha256:cb165e34a1ab1a903a9f38b741a7d78946470a118640310a41d2af8153d6e409"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+# -- Annotations to add to all Pods.
+podAnnotations: {}
+# -- Labels to add to all Pods.
+podLabels: {}
+# -- Resource restrictions to apply to the CNI installer container.
+resources:
+ requests:
+ cpu: 10m
+ memory: 100Mi
+# -- NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes.
+nodeSelector:
+ kubernetes.io/os: linux
+# -- Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes.
+affinity: {}
+# Configures the generation of RBAC Roles and RoleBindings.
+rbac:
+ # -- Whether to create RBAC resources which are required for the CNI plugin to function.
+ create: true
+ # -- (OpenShift) Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint.
+ createSCCRole: false
+# -- Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift).
+privileged: false
+# Configures the generation of the ServiceAccount.
+serviceAccount:
+ # -- Whether a ServiceAccount should be created.
+ create: true
+ # -- Annotations to add to the ServiceAccount.
+ annotations: {}
+ # -- Name of the ServiceAccount to use.
+ # If not set and create is true, a name is generated using the fullname template.
+ name: ""
+# Configures the generation of a NetworkAttachmentDefinition for use with Multus CNI (OpenShift)
+multusNetworkAttachmentDefinition:
+ # -- Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods.
create: false
- config:
- # Configures the necessary label and annotations along with their values
- # to enable Grafana to correctly identify the ConfigMaps containing
- # dashboards and file them within a dedicated folder in the dashboard overview.
- # These settings need to match the Grafana sidecar configuration.
- grafana:
- folderAnnotation:
- # -- Name of the annotation containing the folder name to file dashboards into.
- name: "grafana_folder"
- # -- Name of the folder dashboards are filed into within the Grafana UI.
- value: "Airlock Microgateway"
- dashboardLabel:
- # -- Name of the label that lets Grafana identify ConfigMaps that represent dashboards.
- name: "grafana_dashboard"
- # -- Value of the label that lets Grafana identify ConfigMaps that represent dashboards.
- value: "1"
- instances:
- # Available dashboard instances that can be individually created/deployed.
- overview:
- # -- Whether to create the overview dashboard.
- create: true
- license:
- # -- Whether to create the license dashboard.
- create: true
- blockMetrics:
- # -- Whether to create the block metrics dashboard.
- create: true
- blockLogs:
- # -- Whether to create the block logs dashboard.
- create: true
-# Check whether the installation of the Airlock Microgateway Helm Chart was successful.
-# Requires a secret with a valid Airlock Microgateway license key already to be present.
+ # -- Namespace in which the NetworkAttachmentDefinition is deployed.
+ # Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces
+ # may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation
+ namespace: default
+# Parameters for the CNI installer configuration.
+config:
+ # -- Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers),
+ # as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift)
+ # or in `manual` mode, where no CNI network configuration is written.
+ installMode: "chained"
+ # -- Log level for the CNI installer and plugin.
+ logLevel: info
+ # -- Directory where the CNI config files reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node.
+ cniNetDir: "/etc/cni/net.d"
+ # -- Directory where the CNI plugin binaries reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node.
+ cniBinDir: "/opt/cni/bin"
+ # -- Namespaces for which this CNI plugin should not apply any modifications.
+ excludeNamespaces:
+ - kube-system
tests:
# -- Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts).
# If set to false, `helm test` will not run any tests.
diff --git a/charts/airlock/microgateway/4.3.1/.helmignore b/charts/airlock/microgateway/4.3.1/.helmignore
index 101ff5ac5..8561d2892 100644
--- a/charts/airlock/microgateway/4.3.1/.helmignore
+++ b/charts/airlock/microgateway/4.3.1/.helmignore
@@ -21,8 +21,7 @@
.idea/
*.tmproj
.vscode/
-# CRDs kustomization.yaml
-/crds/kustomization.yaml
+
# Helm unit tests
/tests
/validation
diff --git a/charts/airlock/microgateway/4.3.1/Chart.yaml b/charts/airlock/microgateway/4.3.1/Chart.yaml
index fefe5ea40..64a5a0387 100644
--- a/charts/airlock/microgateway/4.3.1/Chart.yaml
+++ b/charts/airlock/microgateway/4.3.1/Chart.yaml
@@ -9,15 +9,15 @@ annotations:
- name: Airlock Microgateway Forum
url: https://forum.airlock.com/
catalog.cattle.io/certified: partner
- catalog.cattle.io/display-name: Airlock Microgateway
+ catalog.cattle.io/display-name: Airlock Microgateway CNI
catalog.cattle.io/kube-version: '>=1.25.0-0'
- catalog.cattle.io/release-name: microgateway
- charts.openshift.io/name: Airlock Microgateway
+ catalog.cattle.io/release-name: microgateway-cni
+ charts.openshift.io/name: Airlock Microgateway CNI
apiVersion: v2
appVersion: 4.3.1
-description: A Helm chart for deploying the Airlock Microgateway
+description: A Helm chart for deploying the Airlock Microgateway CNI plugin
home: https://www.airlock.com/en/microgateway
-icon: file://assets/icons/microgateway.svg
+icon: file://assets/icons/microgateway-cni.svg
keywords:
- WAF
- Web Application Firewall
@@ -30,14 +30,13 @@ keywords:
- Filtering
- DevSecOps
- shift left
-- control plane
-- Operator
+- CNI
kubeVersion: '>=1.25.0-0'
maintainers:
- email: support@airlock.com
name: Airlock
url: https://www.airlock.com/
-name: microgateway
+name: microgateway-cni
sources:
- https://github.com/airlock/microgateway
type: application
diff --git a/charts/airlock/microgateway/4.3.1/README.md b/charts/airlock/microgateway/4.3.1/README.md
index f9a4c34e6..06e8e26ab 100644
--- a/charts/airlock/microgateway/4.3.1/README.md
+++ b/charts/airlock/microgateway/4.3.1/README.md
@@ -1,4 +1,4 @@
-# Airlock Microgateway
+# Airlock Microgateway CNI
![Version: 4.3.1](https://img.shields.io/badge/Version-4.3.1-informational?style=flat-square) ![AppVersion: 4.3.1](https://img.shields.io/badge/AppVersion-4.3.1-informational?style=flat-square)
@@ -40,58 +40,43 @@ Check the official documentation at **[docs.airlock.com](https://docs.airlock.co
The instructions below provide a quick start guide. Detailed information are provided in the **[manual](https://docs.airlock.com/microgateway/latest/)**.
## Prerequisites
-* [Airlock Microgateway CNI](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni)
-* [Airlock Microgateway License](#obtain-airlock-microgateway-license)
-* [cert-manager](https://cert-manager.io/)
* [helm](https://helm.sh/docs/intro/install/) (>= v3.8.0)
-In order to use Airlock Microgateway you need a license and the cert-manager. You may either request a community license free of charge or purchase a premium license.
-For an easy start in non-production environments, you may deploy the same cert-manager we are using internally for testing.
-### Obtain Airlock Microgateway License
-1. Either request a community or premium license
- * Community license: [airlock.com/microgateway-community](https://airlock.com/en/microgateway-community)
- * Premium license: [airlock.com/microgateway-premium](https://airlock.com/en/microgateway-premium)
-2. Check your inbox and save the license file microgateway-license.txt locally.
-
-> See [Community vs. Premium editions in detail](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) to choose the right license type.
-### Deploy cert-manager
-```bash
-helm repo add jetstack https://charts.jetstack.io
-helm install cert-manager jetstack/cert-manager --version '1.15.1' -n cert-manager --create-namespace --set crds.enabled=true --wait
-```
-
-## Deploy Airlock Microgateway Operator
-
-> This guide assumes a microgateway-license.txt file is present in the working directory.
-
-1. Install CRDs and Operator.
+## Deploy Airlock Microgateway CNI
+1. Install the CNI Plugin with Helm.
+ > **Note**: Certain environments such as OpenShift or GKE require non-default configurations when installing the CNI plugin. For the most common setups, values files are provided in the [chart folder](/deploy/charts/airlock-microgateway-cni).
```bash
- # Create namespace
- kubectl create namespace airlock-microgateway-system
-
- # Install License
- kubectl -n airlock-microgateway-system create secret generic airlock-microgateway-license --from-file=microgateway-license.txt
-
- # Install Operator (CRDs are included via the standard Helm 3 mechanism, i.e. Helm will handle initial installation but not upgrades)
- helm install airlock-microgateway -n airlock-microgateway-system oci://quay.io/airlockcharts/microgateway --version '4.3.1' --wait
+ # Standard setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.3.1'
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
```
+ ```bash
+ # GKE setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.3.1' -f https://raw.githubusercontent.com/airlock/microgateway/4.3.1/deploy/charts/airlock-microgateway-cni/gke-values.yaml
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ ```bash
+ # OpenShift setup
+ helm install airlock-microgateway-cni -n openshift-operators oci://quay.io/airlockcharts/microgateway-cni --version '4.3.1' -f https://raw.githubusercontent.com/airlock/microgateway/4.3.1/deploy/charts/airlock-microgateway-cni/openshift-values.yaml
+ kubectl -n openshift-operators rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ **Important:** On OpenShift, all pods which should be protected by Airlock Microgateway must explicitly reference the Airlock Microgateway CNI NetworkAttachmentDefinition via the annotation `k8s.v1.cni.cncf.io/networks` (see [documentation](https://docs.airlock.com/microgateway/latest/#data/1658483168033.html) for details).
2. (Recommended) You can verify the correctness of the installation with `helm test`.
```bash
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.3.1'
- helm test airlock-microgateway -n airlock-microgateway-system --logs
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.3.1'
+ # Standard and GKE setup
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.1'
+ helm test airlock-microgateway-cni -n kube-system --logs
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.1'
+ ```
+ ```bash
+ # OpenShift setup
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.1'
+ helm test airlock-microgateway-cni -n openshift-operators --logs
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.1'
```
-### Upgrading CRDs
-
-The `helm install/upgrade` command currently does not support upgrading CRDs that already exist in the cluster.
-CRDs should instead be manually upgraded before upgrading the Operator itself via the following command:
-```bash
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=4.3.1 --server-side --force-conflicts
-```
-
-**Note**: Certain GitOps solutions such as e.g. Argo CD or Flux CD have their own mechanisms for automatically upgrading CRDs included with Helm charts.
+ Consult our [documentation](https://docs.airlock.com/microgateway/latest/#data/1699611533587.html) in case of any installation error.
## Support
@@ -104,61 +89,33 @@ For the community edition, check our **[Airlock community forum](https://forum.a
| Key | Type | Default | Description |
|-----|------|---------|-------------|
+| affinity | object | `{}` | Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes. |
| commonAnnotations | object | `{}` | Annotations to add to all resources. |
| commonLabels | object | `{}` | Labels to add to all resources. |
-| crds.skipVersionCheck | bool | `false` | Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs. The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster when performing a "helm install/upgrade". |
-| dashboards.config.grafana.dashboardLabel.name | string | `"grafana_dashboard"` | Name of the label that lets Grafana identify ConfigMaps that represent dashboards. |
-| dashboards.config.grafana.dashboardLabel.value | string | `"1"` | Value of the label that lets Grafana identify ConfigMaps that represent dashboards. |
-| dashboards.config.grafana.folderAnnotation.name | string | `"grafana_folder"` | Name of the annotation containing the folder name to file dashboards into. |
-| dashboards.config.grafana.folderAnnotation.value | string | `"Airlock Microgateway"` | Name of the folder dashboards are filed into within the Grafana UI. |
-| dashboards.create | bool | `false` | Whether to create any ConfigMaps containing Grafana dashboards to import. |
-| dashboards.instances.blockLogs.create | bool | `true` | Whether to create the block logs dashboard. |
-| dashboards.instances.blockMetrics.create | bool | `true` | Whether to create the block metrics dashboard. |
-| dashboards.instances.license.create | bool | `true` | Whether to create the license dashboard. |
-| dashboards.instances.overview.create | bool | `true` | Whether to create the overview dashboard. |
-| engine.image.digest | string | `"sha256:6be782cc3f3206bfa61f462812d2a495e114ae13c59a7cdaed7ca406d5bc1b01"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| engine.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| engine.image.repository | string | `"quay.io/airlock/microgateway-engine"` | Image repository from which to pull the Airlock Microgateway Engine image. |
-| engine.image.tag | string | `"4.3.1"` | Image tag to pull. |
-| engine.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Engine container. |
-| engine.sidecar.podMonitor.create | bool | `false` | Whether to create a PodMonitor resource for monitoring. |
-| engine.sidecar.podMonitor.labels | object | `{}` | Labels to add to the PodMonitor. |
+| config.cniBinDir | string | `"/opt/cni/bin"` | Directory where the CNI plugin binaries reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node. |
+| config.cniNetDir | string | `"/etc/cni/net.d"` | Directory where the CNI config files reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node. |
+| config.excludeNamespaces | list | `["kube-system"]` | Namespaces for which this CNI plugin should not apply any modifications. |
+| config.installMode | string | `"chained"` | Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers), as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. |
+| config.logLevel | string | `"info"` | Log level for the CNI installer and plugin. |
| fullnameOverride | string | `""` | Allows overriding the name to use as full name of resources. |
+| image.digest | string | `"sha256:bdd216c8a8c56a0eee0134f67772cbd75358640a0685cf5d71add653abb2c53b"` | SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a"). Overrides tag when specified. |
+| image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| image.repository | string | `"quay.io/airlock/microgateway-cni"` | Image repository from which to pull the Airlock Microgateway CNI image. |
+| image.tag | string | `"4.3.1"` | Image tag to pull. |
| imagePullSecrets | list | `[]` | ImagePullSecrets to use when pulling images. |
-| license.secretName | string | `"airlock-microgateway-license"` | Name of the secret containing the "microgateway-license.txt" key. |
-| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway". |
-| networkValidator.image.digest | string | `"sha256:6626ab44066867687baa7bfcabedafce5adc50446be1207c90c3b211bd922f84"` | SHA256 image digest to pull (in the format "sha256:6626ab44066867687baa7bfcabedafce5adc50446be1207c90c3b211bd922f84"). Overrides tag when specified. |
-| networkValidator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| networkValidator.image.repository | string | `"cgr.dev/chainguard/netcat"` | Image repository from which to pull the netcat image for the Airlock Microgateway Network Validator init-container. |
-| networkValidator.image.tag | string | `""` | Image tag to pull. |
-| operator.affinity | object | `{}` | Custom affinity to apply to the operator Deployment. Used to influence the scheduling. |
-| operator.config.logLevel | string | `"info"` | Operator application log level. |
-| operator.image.digest | string | `"sha256:84b6eb914103d4c62024d9f761b7dd4371ea3ba8996fb04095d87ebfaf3db2bb"` | SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63"). Overrides tag when specified. |
-| operator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| operator.image.repository | string | `"quay.io/airlock/microgateway-operator"` | Image repository from which to pull the Airlock Microgateway Operator image. |
-| operator.image.tag | string | `"4.3.1"` | Image tag to pull. |
-| operator.nodeSelector | object | `{}` | Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes. |
-| operator.podAnnotations | object | `{}` | Annotations to add to all Pods. |
-| operator.podLabels | object | `{}` | Labels to add to all Pods. |
-| operator.rbac.create | bool | `true` | Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function. |
-| operator.replicaCount | int | `2` | Number of replicas for the operator Deployment. |
-| operator.resources | object | `{}` | Resource restrictions to apply to the operator container. |
-| operator.serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
-| operator.serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
-| operator.serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
-| operator.serviceAnnotations | object | `{}` | Annotations to add to the Service. |
-| operator.serviceLabels | object | `{}` | Labels to add to the Service. |
-| operator.serviceMonitor.create | bool | `false` | Whether to create a ServiceMonitor resource for monitoring. |
-| operator.serviceMonitor.labels | object | `{}` | Labels to add to the ServiceMonitor. |
-| operator.tolerations | list | `[]` | Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes. |
-| operator.updateStrategy | object | `{"type":"RollingUpdate"}` | Specifies the operator update strategy. |
-| operator.watchNamespaceSelector | object | `{}` | Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector. It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator. This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings). An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty. Please note that this feature requires a Premium license. |
-| operator.watchNamespaces | list | `[]` | Allows to restrict the operator to specific namespaces, depending on your needs. For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`). In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace. For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`. An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty. Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces. Please note that this feature requires a Premium license. |
-| sessionAgent.image.digest | string | `"sha256:d62bdb16c74d340a81791be1696d620950d8232437676910bb6e5548411f2afd"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| sessionAgent.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| sessionAgent.image.repository | string | `"quay.io/airlock/microgateway-session-agent"` | Image repository from which to pull the Airlock Microgateway Session Agent image. |
-| sessionAgent.image.tag | string | `"4.3.1"` | Image tag to pull. |
-| sessionAgent.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Session Agent container. |
+| multusNetworkAttachmentDefinition.create | bool | `false` | Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods. |
+| multusNetworkAttachmentDefinition.namespace | string | `"default"` | Namespace in which the NetworkAttachmentDefinition is deployed. Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation |
+| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway-cni". |
+| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes. |
+| podAnnotations | object | `{}` | Annotations to add to all Pods. |
+| podLabels | object | `{}` | Labels to add to all Pods. |
+| privileged | bool | `false` | Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift). |
+| rbac.create | bool | `true` | Whether to create RBAC resources which are required for the CNI plugin to function. |
+| rbac.createSCCRole | OpenShift | `false` | Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint. |
+| resources | object | `{"requests":{"cpu":"10m","memory":"100Mi"}}` | Resource restrictions to apply to the CNI installer container. |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
+| serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
+| serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
| tests.enabled | bool | `false` | Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts). If set to false, `helm test` will not run any tests. |
## License
diff --git a/charts/airlock/microgateway/4.3.1/app-readme.md b/charts/airlock/microgateway/4.3.1/app-readme.md
deleted file mode 100644
index e32cac025..000000000
--- a/charts/airlock/microgateway/4.3.1/app-readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Airlock Microgateway
-
-*Airlock Microgateway is a Kubernetes native WAAP (Web Application and API Protection) solution to protect microservices.*
-
-## Features
-* Kubernetes native integration with its Operator, Custom Resource Definitions, hot-reload, automatic sidecar injection.
-* Reverse proxy functionality with request routing rules, TLS termination and remote IP extraction
-* Using native Envoy HTTP filters like Lua scripting, RBAC, ext_authz, JWT authentication
-* Content security filters for protecting against known attacks (OWASP Top 10)
-* Access control to allow only authenticated users to access the protected services
-* API security features like JSON parsing or OpenAPI specification enforcement
-
-For a list of all features, view the **[comparison of the community and premium edition](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html)**.
-
-## Requirements
-* [Airlock Microgateway CNI Helm Chart](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni) (Also available as Rancher Chart)
-* [Airlock Microgateway License](https://github.com/airlock/microgateway?tab=readme-ov-file#obtain-airlock-microgateway-license) (After obtaining the license install it according to the [documentation](https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-operator))
-* [cert-manager](https://cert-manager.io/docs/installation/)
-
-## Documentation and links
-
-Check the official documentation at **[docs.airlock.com](https://docs.airlock.com/microgateway/latest/)** or the product website at **[airlock.com/microgateway](https://www.airlock.com/en/microgateway)**. The links below point out the most interesting documentation sites when starting with Airlock Microgateway.
-
-* [Getting Started](https://docs.airlock.com/microgateway/latest/#data/1660804708742.html)
-* [System Architecture](https://docs.airlock.com/microgateway/latest/#data/1660804709650.html)
-* [Installation](https://docs.airlock.com/microgateway/latest/#data/1660804708637.html)
-* [Troubleshooting](https://docs.airlock.com/microgateway/latest/#data/1659430054787.html)
-* [GitHub](https://github.com/airlock/microgateway)
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/crds/accesscontrols.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/accesscontrols.microgateway.airlock.com.yaml
deleted file mode 100644
index bdca25f86..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/accesscontrols.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,124 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: accesscontrols.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: AccessControl
- listKind: AccessControlList
- plural: accesscontrols
- singular: accesscontrol
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: AccessControl specifies the options to perform access control with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies how the Airlock Microgateway Engine performs access control.
- properties:
- policies:
- description: Policies configures access control policies.
- items:
- properties:
- authorization:
- description: Authorization configures how requests are authorized. An empty object value {} disables authorization.
- properties:
- authentication:
- description: Authentication specifies that clients need to be authenticated with the provided method.
- properties:
- oidc:
- description: OIDC configures client authentication using OpenID Connect.
- properties:
- oidcRelyingPartyRef:
- description: OIDCRelyingPartyRef configures how the Airlock Microgateway Engine interacts with the OpenID provider.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - oidcRelyingPartyRef
- type: object
- type: object
- type: object
- identityPropagation:
- description: IdentityPropagation configures how the authenticated user's identity is communicated to the protected application.
- properties:
- actions:
- description: Actions specifies the propagation actions.
- items:
- properties:
- identityPropagationRef:
- description: IdentityPropagationRef selects an IdentityPropagation to apply.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - identityPropagationRef
- type: object
- type: array
- onFailure:
- description: |-
- OnFailure configures what should happen, if an identity propagation fails. Meaning of the possible values:
- _Pass_: The request should be forwarded to the upstream, without including the information from the failed identity propagations.
- enum:
- - Pass
- type: string
- required:
- - actions
- - onFailure
- type: object
- required:
- - authorization
- type: object
- maxItems: 1
- minItems: 1
- type: array
- required:
- - policies
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.1/crds/contentsecurities.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/contentsecurities.microgateway.airlock.com.yaml
deleted file mode 100644
index 0172657b5..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/contentsecurities.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,139 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: contentsecurities.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: ContentSecurity
- listKind: ContentSecurityList
- plural: contentsecurities
- singular: contentsecurity
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: ContentSecurity specifies the options to secure an upstream web application with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies the options to secure an upstream web application with a Microgateway Engine container.
- properties:
- apiProtection:
- description: |-
- APIProtection defines the relevant configurations to protect APIs.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- graphQLRef:
- description: |-
- GraphQLRef selects the relevant GraphQL configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- openAPIRef:
- description: |-
- OpenAPIRef selects the relevant OpenAPI configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- filter:
- description: |-
- Filter defines the set of filters, e.g. Airlock Deny Rules, to be applied to incoming requests
- to protect against various attack patterns.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- denyRulesRef:
- description: |-
- DenyRulesRef selects the relevant DenyRules configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- headerRewritesRef:
- description: |-
- HeaderRewritesRef selects the relevant HeaderRewrites.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- limitsRef:
- description: |-
- LimitsRef selects the relevant Limits configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- parserRef:
- description: |-
- ParserRef selects the relevant Parser configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.1/crds/denyrules.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/denyrules.microgateway.airlock.com.yaml
deleted file mode 100644
index 6a73d53db..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/denyrules.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,1804 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: denyrules.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: DenyRules
- listKind: DenyRulesList
- plural: denyrules
- singular: denyrules
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- DenyRules configures request filtering using Airlock built-in and custom deny rules.
- Deny rules establish a negative security model. They define prohibited patterns which, when a match is found in a request, lead to it being blocked from reaching the upstream web application.
- To handle possible false positives, lower the security level or define fine-granular deny rule exceptions
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired deny rules behavior.
- properties:
- request:
- description: Request configures deny rules for downstream requests.
- properties:
- builtIn:
- description: BuiltIn configures the built-in deny rules.
- properties:
- exceptions:
- description: Exceptions allows to define exceptions for specific requests and deny rules.
- items:
- description: |-
- DenyRulesException defines an exception for deny rules. Exceptions may be defined by any or a combination of the following elements: blockedData (the request data causing a block) or requestConditions (properties of a request without taking into consideration the reason why a request has been blocked).
- At least one of blockedData and requestConditions must be set.
- properties:
- blockedData:
- description: BlockedData defines an exception based on the request data causing the block.
- properties:
- graphQL:
- description: |-
- GraphQL defines an exception based on a blocked GraphQL query.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- argument:
- description: |-
- Argument defines an argument of a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field defines a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of an argument of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- header:
- description: |-
- Header defines an exception based on a blocked header.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: |-
- JSON defines an exception based on a blocked JSON property.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- jsonPath:
- description: |-
- JSONPath defines the JSONPath pattern to match the path within the JSON.
- Expressions in JSONPath i.e. `?(expr)` are not supported.
- minLength: 1
- type: string
- key:
- description: |-
- Key defines the key of the JSON property.
- At most one of key and value can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of the JSON property.
- At most one of key and value can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- parameter:
- description: |-
- Parameter defines an exception based on a blocked parameter.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- name:
- description: Name defines the name of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- source:
- default: Any
- description: Source defines the source of the parameter.
- enum:
- - Query
- - Post
- - Any
- type: string
- value:
- description: Value defines the value of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- path:
- description: |-
- Path defines an exception based on the blocked path.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- pathSegment:
- description: |-
- PathSegment defines an exception based on a blocked path segment.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- segments:
- description: Segments defines the position of a segment within the path.
- properties:
- index:
- description: Index specifies an exact path segment position by index (0-based).
- minimum: 0
- type: integer
- type: object
- value:
- description: Value defines the value of a path segment.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines an exception based on a property of a request without taking into consideration the reason why a request has been blocked.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- ruleKeys:
- description: RuleKeys restricts the exception to a set of deny rules.
- items:
- description: |-
- A deny rule name can be any of the following values:
- ENCODING |
- EXPLOIT |
- HPP |
- HTML |
- IDOR |
- LDAP |
- NOSQL |
- OGNL |
- PHP |
- PROTOCOL |
- SANITY |
- SCANNING |
- SQL |
- TEMPLATE |
- UNIXCMD |
- WINCMD |
- XSS
- enum:
- - ENCODING
- - EXPLOIT
- - HPP
- - HTML
- - IDOR
- - LDAP
- - NOSQL
- - OGNL
- - PHP
- - PROTOCOL
- - SANITY
- - SCANNING
- - SQL
- - TEMPLATE
- - UNIXCMD
- - WINCMD
- - XSS
- type: string
- minItems: 1
- type: array
- type: object
- type: array
- overrides:
- description: Overrides allows to override the builtIn settings for specific deny rules.
- items:
- description: DenyRulesOverride allows to override the builtIn settings for specific deny rules.
- properties:
- conditions:
- description: Conditions select which built-in deny rules' settings will be adjusted.
- properties:
- ruleKeys:
- description: RuleKeys is a list of built-in deny rule names.
- items:
- description: |-
- A deny rule name can be any of the following values:
- ENCODING |
- EXPLOIT |
- HPP |
- HTML |
- IDOR |
- LDAP |
- NOSQL |
- OGNL |
- PHP |
- PROTOCOL |
- SANITY |
- SCANNING |
- SQL |
- TEMPLATE |
- UNIXCMD |
- WINCMD |
- XSS
- enum:
- - ENCODING
- - EXPLOIT
- - HPP
- - HTML
- - IDOR
- - LDAP
- - NOSQL
- - OGNL
- - PHP
- - PROTOCOL
- - SANITY
- - SCANNING
- - SQL
- - TEMPLATE
- - UNIXCMD
- - WINCMD
- - XSS
- type: string
- minItems: 1
- type: array
- types:
- description: Types defines the type of attributes the override should be applied on. If Types are defined without any RuleKeys the override is applied to all deny rules.
- items:
- description: |-
- A deny rule override type name can be any of the following values:
- Header |
- Parameter |
- Path |
- JSON |
- GraphQL
- enum:
- - Header
- - Parameter
- - Path
- - PathSegment
- - JSON
- - GraphQL
- type: string
- minItems: 0
- type: array
- type: object
- settings:
- description: Settings override the corresponding properties for the selected rules.
- properties:
- level:
- description: Level specifies the filter strength.
- enum:
- - Unfiltered
- - Basic
- - Standard
- - Strict
- type: string
- threatHandlingMode:
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: array
- settings:
- description: Settings contains the keys which will be adjusted.
- properties:
- level:
- default: Standard
- description: Level represents a set of deny rules with different filter strengths.
- enum:
- - Unfiltered
- - Basic
- - Standard
- - Strict
- type: string
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a deny rule matches.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- custom:
- description: Custom allows configuring additional deny rules.
- properties:
- rules:
- description: Rules defines list of additional deny rules.
- items:
- properties:
- blockData:
- description: BlockData specifies the request data which should cause a block.
- properties:
- graphQL:
- description: |-
- GraphQL specifies to block requests containing a matching GraphQL property.
- At least one of field, argument and value must be set.
- properties:
- argument:
- description: |-
- Argument defines an argument of a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field defines a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of an argument of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- header:
- description: |-
- Header specifies to block requests containing a matching header.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: |-
- JSON specifies to block requests containing a matching JSON property in the body.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- key:
- description: Key defines the key of a JSON object.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a JSON object.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- parameter:
- description: |-
- Parameter specifies to block requests containing a matching parameter.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- path:
- description: |-
- Path specifies to block requests with a matching path.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- matcher:
- description: Matcher specifies which path to block.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- pathSegment:
- description: |-
- PathSegment specifies to block requests containing a matching path segment.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- segments:
- description: |-
- Segments restricts which path segments are filtered by this rule.
- If not specified, all segments of a path are filtered.
- properties:
- index:
- description: Index restricts the rule to the path segment at this index (0-based).
- minimum: 0
- type: integer
- type: object
- value:
- description: Value specifies which path segment values to block.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- required:
- - value
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this rule to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- ruleKey:
- description: RuleKey defines a technical key for the deny rule. Must be unique.
- minLength: 1
- pattern: ^[A-Z][A-Z0-9_]*$
- type: string
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a deny rule matches.
- enum:
- - Block
- - LogOnly
- type: string
- required:
- - blockData
- - ruleKey
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - ruleKey
- x-kubernetes-list-type: map
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.1/crds/envoyhttpfilters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/envoyhttpfilters.microgateway.airlock.com.yaml
deleted file mode 100644
index e0b7bb9fb..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/envoyhttpfilters.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: envoyhttpfilters.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyHTTPFilter
- listKind: EnvoyHTTPFilterList
- plural: envoyhttpfilters
- singular: envoyhttpfilter
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: EnvoyHTTPFilter is an additional Envoy HTTP Filter resource which is added to those defined by the Airlock Microgateway.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired additional Envoy HTTP filter.
- properties:
- value:
- description: Value defines the HTTP filter which is added to those configured by the Airlock Microgateway.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.1/crds/graphqls.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/graphqls.microgateway.airlock.com.yaml
deleted file mode 100644
index 43a8b6fc3..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/graphqls.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,88 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: graphqls.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: GraphQL
- listKind: GraphQLList
- plural: graphqls
- singular: graphql
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: GraphQL contains the configuration for the GraphQL specification.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired GraphQL specification.
- properties:
- settings:
- description: Settings defines the settings to configure GraphQL.
- properties:
- allowIntrospection:
- default: true
- description: AllowIntrospection specifies if the introspection system is exposed.
- type: boolean
- allowMutations:
- default: true
- description: AllowMutations specifies if mutations are allowed.
- type: boolean
- schema:
- description: Specifies the GraphQL schema.
- properties:
- source:
- description: Source specifies the GraphQL schema to be enforced.
- properties:
- configMapRef:
- description: ConfigMapRef references the configmap by its name containing the well-known key 'schema.graphql'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- required:
- - source
- type: object
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.1/crds/headerrewrites.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/headerrewrites.microgateway.airlock.com.yaml
deleted file mode 100644
index 0916edd28..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/headerrewrites.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,759 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: headerrewrites.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: HeaderRewrites
- listKind: HeaderRewritesList
- plural: headerrewrites
- singular: headerrewrites
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: HeaderRewrites is the Schema for the headerrewrites API
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired header rewriting behavior.
- properties:
- request:
- description: Request defines manipulations on upstream request headers.
- properties:
- add:
- description: Add defines which request headers will be added before forwarding to the upstream.
- properties:
- custom:
- description: |-
- Custom allows configuring additional upstream request headers.
- Add selected headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which request headers will be forwarded to the upstream.
- This can either be allHeaders or matchingHeaders.
- Default: matchingHeaders: {...}
- properties:
- allHeaders:
- description: AllHeaders specifies that all request headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which request headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- standardHeaders:
- default: true
- description: StandardHeaders defines whether the request headers which are forwarded to the upstream will be restricted to a set of common request headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which request headers will be removed before forwarding to the upstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- alternativeForwardedHeaders:
- default: true
- description: |-
- AlternativeForwardedHeaders removes downstream request headers which could potentially
- be abused to alter the upstream's view of the remote connection.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- response:
- description: Response defines manipulations on upstream response headers.
- properties:
- add:
- description: Add defines which response headers will be added before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- csp:
- default: true
- description: |-
- CSP sets a content security policy which allows only same-origin requests except for images
- if the 'Content-Security-Policy' header is not set by the upstream.
- type: boolean
- featurePolicy:
- default: false
- description: |-
- FeaturePolicy sets a feature policy which prevents cross-origin use of several browser features
- if the 'Feature-Policy' header is not set by the upstream.
- **Deprecated:** Use permissionsPolicy instead.
- type: boolean
- hsts:
- default: true
- description: HSTS enforces the use of HTTPS if the 'Strict-Transport-Security' header is not already set by the upstream.
- type: boolean
- hstsPreload:
- default: false
- description: HSTSPreload enforces the use of HTTPS including for subdomains and enables HSTS preload.
- type: boolean
- permissionsPolicy:
- default: true
- description: |-
- PermissionsPolicy sets a permissions policy which prevents cross-origin use of several browser features
- if the 'Permissions-Policy' header is not set by the upstream.
- type: boolean
- referrerPolicy:
- default: true
- description: |-
- ReferrerPolicy ensures that no 'Referer' header is sent for cross-origin requests
- if the 'Referrer-Policy' header is not set by the upstream.
- type: boolean
- xContentTypeOptions:
- default: true
- description: XContentTypeOptions sets 'X-Content-Type-Options' to 'nosniff' if it is not set by the upstream.
- type: boolean
- xFrameOptions:
- default: true
- description: XFrameOptions sets 'X-Frame-Options' to SAMEORIGIN if it is not set by the upstream.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which response headers will be forwarded to the downstream.
- This can either be allHeaders or matchingHeaders.
- Default: allHeaders: {}
- properties:
- allHeaders:
- description: AllHeaders specifies that all response headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which response headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response header.
- properties:
- standardHeaders:
- default: false
- description: StandardHeaders defines whether the response headers which are forwarded to the downstream will be restricted to a set of common response headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which response headers will be removed before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- auth:
- description: Auth defines the categories of headers concerning authentication.
- properties:
- basic:
- default: false
- description: Basic removes upstream response headers that advise clients to authenticate with Basic Authentication.
- type: boolean
- negotiate:
- default: true
- description: Negotiate removes upstream response headers that advise clients to authenticate with Negotiate.
- type: boolean
- ntlm:
- default: true
- description: |-
- NTLM removes upstream response headers that advise clients to authenticate with NTLM.
- By default, these headers are removed, because NTLM pass-through is not supported.
- type: boolean
- type: object
- informationLeakage:
- description: InformationLeakage defines the categories of headers concerning information leakage.
- properties:
- application:
- default: true
- description: Application removes upstream response headers that leak information about the deployed software.
- type: boolean
- server:
- default: true
- description: Server removes upstream response headers that leak information about the server.
- type: boolean
- type: object
- permissiveCors:
- default: true
- description: PermissiveCORS removes upstream response headers for CORS (Cross-Origin Resource Sharing) which have no restrictions and therefore reduce client-side security.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured remove operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- settings:
- description: Settings configures the HeaderRewrites filter.
- properties:
- operationalMode:
- default: Production
- description: OperationalMode defines the behavior of the filter. In integration mode more information is logged about the requests and responses.
- enum:
- - Production
- - Integration
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.1/crds/identitypropagations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/identitypropagations.microgateway.airlock.com.yaml
deleted file mode 100644
index 7cf5a5ce7..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/identitypropagations.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: identitypropagations.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: IdentityPropagation
- listKind: IdentityPropagationList
- plural: identitypropagations
- singular: identitypropagation
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: IdentityPropagation specifies the desired identity propagation.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired identity propagation.
- properties:
- header:
- description: Header configures identity propagation via a request header.
- properties:
- name:
- description: Name of the header to set.
- minLength: 1
- type: string
- value:
- description: Value to propagate to the application.
- properties:
- source:
- description: Source from which to extract the value.
- properties:
- metadata:
- description: Metadata specifies to extract a value from an Envoy dynamic filter metadata key.
- properties:
- key:
- description: Key specifies the metadata key from which to load the value, e.g. `some_payload.aud`.
- minLength: 1
- type: string
- namespace:
- description: Namespace specifies the metadata namespace within which the lookup should be performed, e.g. `envoy.filters.http.jwt_authn`.
- minLength: 1
- type: string
- required:
- - key
- - namespace
- type: object
- oidc:
- description: OIDC specifies to extract a value from the result of an OpenID Connect flow.
- properties:
- idToken:
- description: IDToken specifies to extract the value from the OpenID Connect ID Token.
- properties:
- claim:
- description: Claim selects the JWT claim from which to extract the value.
- minLength: 1
- type: string
- required:
- - claim
- type: object
- required:
- - idToken
- type: object
- type: object
- required:
- - source
- type: object
- required:
- - name
- - value
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.1/crds/limits.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/limits.microgateway.airlock.com.yaml
deleted file mode 100644
index 894573dc5..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/limits.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,651 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: limits.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Limits
- listKind: LimitsList
- plural: limits
- singular: limits
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Limits contains the configuration for limits.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired limits behavior.
- properties:
- request:
- description: Request defines the limits for requests.
- properties:
- limited:
- description: Limited enables limits on request scope.
- properties:
- exceptions:
- description: Exceptions defines limit exceptions.
- items:
- description: LimitsException defines an exception for limits.
- properties:
- length:
- description: Length defines an exception for length limits based on the data element exceeding the limit.
- properties:
- graphQL:
- description: GraphQL defines a field, argument or value length limit exception for a GraphQL query.
- properties:
- argument:
- description: |-
- Argument restricts the exception to GraphQL queries with a matching argument of a field.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field restricts the exception to GraphQL queries with a matching field.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value restricts the exception to GraphQL queries with a matching argument value.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: JSON defines a key and value length limit exception for a JSON property.
- properties:
- jsonPath:
- description: |-
- JSONPath restricts the exception to JSON properties with a matching JSONPath.
- Expressions in JSONPath i.e. `?(expr)` are not supported.
- minLength: 1
- type: string
- required:
- - jsonPath
- type: object
- parameter:
- description: Parameter defines a name and value length limit exception for a parameter.
- properties:
- name:
- description: Name restricts the exception to parameters with a matching name.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- source:
- default: Any
- description: Source restricts the exception to parameters of this kind.
- enum:
- - Query
- - Post
- - Any
- type: string
- required:
- - name
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this exception to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- type: object
- type: array
- general:
- description: General defines general request limits.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Mi
- description: BodySize limits the total size of the request body. It specifies the number of bytes (0 = unlimited). This limit is effective for any request not processed by one of the content parsers (e.g. json) as configured in the Parser CRD. **Note** This limit does not apply to WebSocket or gRPC traffic.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- pathLength:
- anyOf:
- - type: integer
- - type: string
- default: 1Ki
- description: PathLength defines the maximum path length for all requests (parsed and unparsed).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- graphQL:
- description: GraphQL defines the limits for GraphQL requests.
- properties:
- nestingDepth:
- default: 10
- description: NestingDepth defines the maximum depth of nesting for GraphQL objects.
- format: int64
- type: integer
- querySize:
- anyOf:
- - type: integer
- - type: string
- default: 1Ki
- description: QuerySize defines the maximum size for GraphQL queries.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: "256"
- description: ValueLength defines the maximum length for GraphQL values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- json:
- description: JSON defines the limits for JSON requests.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Ki
- description: BodySize limits the total size of the JSON request body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- elementCount:
- default: 10000
- description: ElementCount defines the maximum number of keys and array items in the whole JSON document (recursive).
- format: int64
- type: integer
- keyCount:
- default: 250
- description: KeyCount defines the maximum number of keys of a single JSON object (non-recursive).
- format: int64
- type: integer
- keyLength:
- anyOf:
- - type: integer
- - type: string
- default: "128"
- description: KeyLength defines the maximum length for JSON keys.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- nestingDepth:
- default: 100
- description: NestingDepth defines the maximum depth of nesting for JSON objects and JSON arrays.
- format: int64
- type: integer
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: 8Ki
- description: ValueLength defines the maximum length for JSON values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- multipart:
- description: Multipart defines the limits for Multipart requests.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Mi
- description: BodySize limits the total size of the Multipart request body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- parameter:
- description: Parameter defines the limits for request parameters.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Ki
- description: BodySize limits the total size of the form data body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- count:
- default: 128
- description: Count defines the maximum number of request parameters.
- format: int64
- type: integer
- nameLength:
- anyOf:
- - type: integer
- - type: string
- default: "128"
- description: NameLength defines the maximum length for parameter names.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: 8Ki
- description: ValueLength defines the maximum length for parameter values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- unlimited:
- description: Unlimited disables all limits on request scope.
- type: object
- type: object
- settings:
- description: Settings configures the limits filter.
- properties:
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a limit hits.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.1/crds/oidcproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/oidcproviders.microgateway.airlock.com.yaml
deleted file mode 100644
index eba2dbf7c..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/oidcproviders.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,305 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: oidcproviders.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OIDCProvider
- listKind: OIDCProviderList
- plural: oidcproviders
- singular: oidcprovider
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- OIDCProvider specifies an OpenID Provider (OP).
-
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - Sessions are always shared across all Microgateway Engines using the same Redis instance.
- I.e. if application A and B (with different SidecarGateways) have the same Redis instance configured in their SessionHandling CR, users which are logged into application A
- may be able to access authenticated routes on application B, even if their OIDCRelyingParty configuration differs.
-
-
- {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of an OpenID Provider.
- properties:
- static:
- description: Static configures an OpenID Provider by explicitly specifying all endpoints.
- properties:
- endpoints:
- description: Endpoints specifies the OpenID Provider endpoints.
- properties:
- authorization:
- description: Authorization specifies the endpoint to which the authorization request is sent.
- properties:
- uri:
- description: URI specifies the endpoint address.
- format: uri
- minLength: 1
- pattern: ^(http|https)://.*$
- type: string
- required:
- - uri
- type: object
- token:
- description: Token configures the endpoint from which the access, ID and refresh tokens are obtained.
- properties:
- tls:
- description: TLS defines TLS settings.
- properties:
- certificateVerification:
- description: CertificateVerification specifies how the certificate presented by the server is verified.
- properties:
- custom:
- description: |-
- Custom explicitly specifies how the server certificate should be verified.
- Typical use cases include specifying a custom CA and SAN match when working with self-signed certificates or pinning a specific public key.
- properties:
- allowedSANs:
- description: |-
- AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
- that is to say, the SAN is verified if at least one matcher is matched.
- AllowedSANs requires trustedCA to be set.
- items:
- description: |-
- TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers.
- properties:
- matcher:
- description: Matcher defines the string matcher for the SAN value.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- sanType:
- description: SanType defines the type of SAN matcher.
- enum:
- - DNS
- - Email
- - URI
- - IPAddress
- type: string
- required:
- - matcher
- - sanType
- type: object
- minItems: 1
- type: array
- certificatePinning:
- description: |-
- CertificatePinning defines constraints the presented certificate must fulfill.
- If more than one constraint is configured only one must be satisfied.
- At least one of allowedSPKIs and allowedHashes must be set.
- properties:
- allowedHashes:
- description: |-
- AllowedHashes is a list of hex-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- allowedSPKIs:
- description: |-
- AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- type: object
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- type: object
- disabled:
- description: |-
- Disabled specifies to trust any certificate without verification.
- THIS IS INSECURE AND SHOULD ONLY BE USED FOR TESTING.
- type: object
- publicCAs:
- description: PublicCAs specifies to only accept certificates with a SAN matching "uri" and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Engine's base image.
- type: object
- type: object
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- type: object
- uri:
- description: URI specifies the endpoint address.
- format: uri
- minLength: 1
- pattern: ^(http|https)://.*$
- type: string
- required:
- - uri
- type: object
- required:
- - authorization
- - token
- type: object
- required:
- - endpoints
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.1/crds/oidcrelyingparties.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/oidcrelyingparties.microgateway.airlock.com.yaml
deleted file mode 100644
index 863f039ef..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/oidcrelyingparties.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,224 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: oidcrelyingparties.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OIDCRelyingParty
- listKind: OIDCRelyingPartyList
- plural: oidcrelyingparties
- singular: oidcrelyingparty
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- OIDCRelyingParty specifies how the Airlock Microgateway Engine interacts with an OpenID Provider (OP).
-
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - Sessions are always shared across all Microgateway Engines using the same Redis instance.
- I.e. if application A and B (with different SidecarGateways) have the same Redis instance configured in their SessionHandling CR, users which are logged into application A
- may be able to access authenticated routes on application B, even if their OIDCRelyingParty configuration differs.
-
-
- {{% /notice %}}
- {{% notice info %}} The OIDC feature requires SessionHandling to be configured in the SidecarGateway. {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the OIDC Relying Party configuration.
- properties:
- clientID:
- description: ClientID specifies the OIDCRelyingParty "client_id".
- minLength: 1
- type: string
- credentials:
- description: Credentials used for client authentication on the back-channel with the authorization server.
- properties:
- clientSecret:
- description: ClientSecret authenticates with the client password issued by the OpenID Provider (OP).
- properties:
- method:
- default: BasicAuth
- description: Method specifies in which format the client secret is sent with the authorization request.
- enum:
- - BasicAuth
- - FormURLEncoded
- type: string
- secretRef:
- description: SecretRef specifies the kubernetes secret containing the client password with key "client.secret".
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- required:
- - clientSecret
- type: object
- oidcProviderRef:
- description: OIDCProviderRef selects the OpenID Provider (OP) used to authenticate users.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- pathMapping:
- description: PathMapping configures the action matching.
- properties:
- logoutPath:
- description: LogoutPath specifies which request paths should initiate a logout.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- redirectPath:
- description: RedirectPath specifies which request paths should be interpreted as a response from the authorization endpoint.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- required:
- - logoutPath
- - redirectPath
- type: object
- redirectURI:
- description: |-
- RedirectURI configures the "redirect_uri" parameter included in the authorization request.
- May contain envoy command operators, e.g. '%REQ(:x-forwarded-proto)%://%REQ(:authority)%/callback'.
- minLength: 1
- type: string
- required:
- - clientID
- - credentials
- - oidcProviderRef
- - pathMapping
- - redirectURI
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.1/crds/openapis.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/openapis.microgateway.airlock.com.yaml
deleted file mode 100644
index 5f16d2993..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/openapis.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,167 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: openapis.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OpenAPI
- listKind: OpenAPIList
- plural: openapis
- singular: openapi
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: OpenAPI contains the configuration for the OpenAPI specification.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired OpenAPI specification.
- properties:
- response:
- description: Response defines the validation behaviour for responses.
- properties:
- secured:
- description: Secured enables response checking.
- properties:
- validation:
- default: Lax
- description: Validation defines the validation mode for responses.
- enum:
- - Lax
- - Strict
- type: string
- type: object
- unsecured:
- description: Unsecured disables response checking.
- type: object
- type: object
- settings:
- description: Settings defines the settings to configure OpenAPI specification enforcement.
- properties:
- logging:
- description: Logging specifies the access log behavior.
- properties:
- maxFailedSubvalidations:
- default: 10
- description: MaxFailedSubvalidations defines the maximum number of failed subvalidations being logged.
- format: int64
- type: integer
- type: object
- schema:
- description: Schema configures the OpenAPI specification.
- properties:
- source:
- description: Source specifies the OpenAPI specification to be enforced.
- properties:
- configMapRef:
- description: ConfigMapRef references the configmap by its name containing the well-known key 'openapi.json'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- required:
- - source
- type: object
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- validation:
- description: Validation specifies the patterns for the validation behavior.
- properties:
- authentication:
- description: Authentication defines the settings for the authentication scheme.
- properties:
- oAuth2:
- description: OAuth2 specifies the OAuth2 parameters.
- properties:
- allowedParameters:
- description: AllowedParameters specifies the allowed parameters for the authentication scheme.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined allowed parameters.
- properties:
- standardParameters:
- default: true
- description: StandardParameters defines whether the allowed parameters should be expanded by the set of common parameters.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional allowed parameters.
- items:
- minLength: 1
- type: string
- minItems: 1
- type: array
- type: object
- type: object
- oidc:
- description: Oidc specifies the OIDC parameters.
- properties:
- allowedParameters:
- description: AllowedParameters specifies the allowed parameters for the authentication scheme.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined allowed parameters.
- properties:
- standardParameters:
- default: true
- description: StandardParameters defines whether the allowed parameters should be expanded by the set of common parameters.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional allowed parameters.
- items:
- minLength: 1
- type: string
- minItems: 1
- type: array
- type: object
- type: object
- type: object
- type: object
- required:
- - schema
- type: object
- required:
- - settings
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.1/crds/parsers.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/parsers.microgateway.airlock.com.yaml
deleted file mode 100644
index 61e46f6cf..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/parsers.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,358 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: parsers.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Parser
- listKind: ParserList
- plural: parsers
- singular: parser
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Parser contains the configuration for content parsers (default and custom).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired parser behavior.
- properties:
- request:
- description: Request defines the parsing for downstream requests.
- properties:
- custom:
- description: Custom allows configuring additional rules for parser selection.
- properties:
- rules:
- description: |-
- Rules defines a custom set prepended before built-in rules of enabled request parsers.
- Disable all built-in parsers to overrule them completely.
- items:
- properties:
- action:
- description: |-
- Action specifies what should happen when a request condition matches.
- Only one of parse or skip can be set.
- properties:
- parse:
- description: Parse activates the configured parser.
- properties:
- form:
- description: Form activates the Form parser.
- type: object
- json:
- description: JSON activates the JSON parser.
- type: object
- multipart:
- description: Multipart activates the multipart parser.
- type: object
- type: object
- skip:
- description: Skip disables any content parsing
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this rule to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- required:
- - action
- - requestConditions
- type: object
- type: array
- type: object
- defaultContentType:
- default: application/x-www-form-urlencoded
- description: DefaultContentType specifies the content-type header which should be injected into the request before parser selection if it is not already present and the request has a body.
- minLength: 1
- type: string
- parsers:
- description: Parsers defines the configuration for the available content parsers.
- properties:
- form:
- description: Form defines the configuration for the form parser.
- properties:
- enable:
- default: true
- description: Enable defines whether form payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*urlencoded.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as form arguments.
- minLength: 1
- type: string
- type: object
- json:
- description: JSON defines the configuration for the JSON parser.
- properties:
- enable:
- default: true
- description: Enable defines whether json payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*json.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as JSON.
- minLength: 1
- type: string
- type: object
- multipart:
- description: Multipart defines the configuration for the multipart parser.
- properties:
- enable:
- default: true
- description: Enable defines whether multipart payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*multipart.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as a multipart payload.
- minLength: 1
- type: string
- type: object
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.1/crds/redisproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/redisproviders.microgateway.airlock.com.yaml
deleted file mode 100644
index d7d37a5ae..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/redisproviders.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,159 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: redisproviders.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: RedisProvider
- listKind: RedisProviderList
- plural: redisproviders
- singular: redisprovider
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: RedisProvider contains a client configuration for connecting to a Redis database.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of a Redis database client configuration.
- properties:
- auth:
- description: Auth specifies the Redis credentials.
- properties:
- password:
- description: Password specifies the Redis password.
- properties:
- secretRef:
- description: SecretRef selects the secret containing the Redis password under the key 'redis.password'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- username:
- default: default
- description: Username specifies the Redis username to authenticate with.
- minLength: 1
- pattern: ^[^\s]+$
- type: string
- required:
- - password
- type: object
- mode:
- description: Mode configures the redis deployment mode.
- properties:
- standalone:
- description: Standalone specifies the standalone Redis instance to connect to.
- properties:
- host:
- description: Host specifies the IP or hostname.
- minLength: 1
- pattern: ^(\d{1,3}(\.\d{1,3}){3}|([0-9a-fA-F]{1,4}|:)+(:\d{1,3}(\.\d{1,3}){3})?|[a-z0-9\-]+(\.[a-z0-9\-]+)*)$
- type: string
- port:
- default: 6379
- description: Port specifies the port.
- maximum: 65535
- minimum: 1
- type: integer
- required:
- - host
- type: object
- type: object
- timeouts:
- description: Timeouts specifies the timeouts when interacting with the Redis endpoint.
- properties:
- connect:
- default: 5s
- description: Connect specifies the timeout for establishing a connection.
- type: string
- maxDuration:
- default: 2s
- description: MaxDuration specifies the response timeout.
- type: string
- type: object
- tls:
- description: TLS defines TLS settings. If not specified, TLS is disabled i.e. unencrypted TCP is used when connecting to the Redis instance.
- properties:
- certificateVerification:
- description: CertificateVerification specifies how the certificate presented by the server is verified.
- properties:
- custom:
- description: Custom explicitly specifies how the server certificate should be verified.
- properties:
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- required:
- - certificates
- type: object
- required:
- - trustedCA
- type: object
- disabled:
- description: 'Disabled specifies to trust any certificate without verification. THIS IS INSECURE AND SHOULD ONLY BE USED FOR TESTING. Note: This setting currently also disables TLS SNI.'
- type: object
- publicCAs:
- description: PublicCAs specifies to only accept certificates with a SAN matching the host and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Session Agent’s base image.
- type: object
- type: object
- type: object
- required:
- - mode
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.1/crds/sessionhandlings.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/sessionhandlings.microgateway.airlock.com.yaml
deleted file mode 100644
index c4b51ef6c..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/sessionhandlings.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,77 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: sessionhandlings.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: SessionHandling
- listKind: SessionHandlingList
- plural: sessionhandlings
- singular: sessionhandling
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- SessionHandling contains the configuration for session handling.
-
-
- {{% notice warning %}} The Session Handling feature (required for OIDC) is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as high-availability Redis configurations (e.g. Sentinel/Cluster) are not yet supported.
- {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired session handling behavior.
- properties:
- persistence:
- description: Persistence configures where to store the session state.
- properties:
- redisProviderRef:
- description: RedisProviderRef specifies to cache session information in the provided Redis instance.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - redisProviderRef
- type: object
- required:
- - persistence
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.1/crds/telemetries.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.1/crds/telemetries.microgateway.airlock.com.yaml
deleted file mode 100644
index 8f911d3d2..000000000
--- a/charts/airlock/microgateway/4.3.1/crds/telemetries.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,96 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
- name: telemetries.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Telemetry
- listKind: TelemetryList
- plural: telemetries
- singular: telemetry
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Telemetry contains the configuration for telemetry (logging, metrics & tracing).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired telemetry behavior.
- properties:
- correlation:
- description: Correlation defines the correlation aspects of Telemetry.
- properties:
- idSource:
- description: IDSource specifies how an external correlation ID should be obtained for a request. If not specified, no correlation ID will be logged.
- properties:
- header:
- description: Header specifies to extract the correlation ID from a request header. If the header is absent from a request, no correlation ID will be logged.
- properties:
- name:
- default: X-Correlation-Id
- description: Name of the header (case-insensitive) from which to extract the correlation ID.
- minLength: 1
- type: string
- type: object
- required:
- - header
- type: object
- request:
- description: Request defines the request related correlation settings of Telemetry.
- properties:
- allowDownstreamRequestID:
- default: true
- description: AllowDownstreamRequestID defines whether trace sampling will consider a provided x-request-id.
- type: boolean
- alterRequestID:
- default: true
- description: AlterRequestID defines whether to alter the UUID to reflect the trace sampling decision. If disabled no modification to the UUID will be performed, this may break tracing in the upstream.
- type: boolean
- type: object
- type: object
- logging:
- description: Logging defines the logging aspects of Telemetry.
- properties:
- accessLog:
- description: AccessLog defines the access log settings of Telemetry.
- properties:
- format:
- description: Format defines the Access Log format of the sidecar.
- properties:
- json:
- description: JSON defines the Access Log format as JSON.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.1/dashboards/license.json b/charts/airlock/microgateway/4.3.1/dashboards/license.json
deleted file mode 100644
index b9d5777e2..000000000
--- a/charts/airlock/microgateway/4.3.1/dashboards/license.json
+++ /dev/null
@@ -1,521 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "stat",
- "name": "Stat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "timeseries",
- "name": "Time series",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "License status of Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [
- {
- "options": {
- "0": {
- "color": "red",
- "index": 1,
- "text": "Invalid"
- },
- "1": {
- "color": "green",
- "index": 0,
- "text": "Valid"
- }
- },
- "type": "value"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 0
- },
- "id": 1,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_valid{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "License Status",
- "range": false,
- "refId": "Licenses"
- }
- ],
- "title": "License Status",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Expiry date of the Airlock Microgateway license associated with the selected operator.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "time: L"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 3,
- "y": 0
- },
- "id": 4,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_expiry_timestamp_seconds{namespace=~\"${operator_namespace.regex}\"})*1000",
- "instant": true,
- "legendFormat": "Expiry Date (MM/DD/YYYY)",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "License Expiry Date",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of licensed requests for applications protected by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 7,
- "y": 0
- },
- "id": 6,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(microgateway_license_max_rq_count_per_month{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "Licensed Requests",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Licensed Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Estimated number of requests protected by Airlock Microgateway over 30 days based on the last 7 days.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 5,
- "x": 11,
- "y": 0
- },
- "id": 2,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_license_http_rq_total{job=~\"${operator_namespace.regex}/.*-engine\"}[7d]))/7*30",
- "instant": true,
- "legendFormat": "Estimated Requests",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Requests over 30 days (estimated)",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of requests per week processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "blue",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 12,
- "w": 16,
- "x": 0,
- "y": 4
- },
- "id": 5,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(avg_over_time(increase(microgateway_license_http_rq_total{job=~\"${operator_namespace.regex}/.*-engine\"}[7d])[2m:30s]))",
- "instant": false,
- "legendFormat": "# Requests per week",
- "range": true,
- "refId": "A"
- }
- ],
- "title": "Processed Requests per week",
- "type": "timeseries"
- }
- ],
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_PROMETHEUS",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_valid,namespace)",
- "description": "",
- "hide": 0,
- "includeAll": false,
- "label": "Operator Namespace",
- "multi": false,
- "name": "operator_namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-7d",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {},
- "timezone": "browser",
- "title": "Airlock Microgateway License",
- "uid": "cdpq79bzrr01se",
- "version": 2,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/dashboards/overview.json b/charts/airlock/microgateway/4.3.1/dashboards/overview.json
deleted file mode 100644
index 094276621..000000000
--- a/charts/airlock/microgateway/4.3.1/dashboards/overview.json
+++ /dev/null
@@ -1,1138 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "stat",
- "name": "Stat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "table",
- "name": "Table",
- "version": ""
- },
- {
- "type": "panel",
- "id": "timeseries",
- "name": "Time series",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 3,
- "title": "Overview",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of pods that are protected by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "text",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 1
- },
- "id": 11,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(microgateway_sidecars{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "Protected Pods",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Protected Pods",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Total number of requests processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 3,
- "y": 1
- },
- "id": 4,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "format": "time_series",
- "fullMetaSearch": false,
- "hide": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Processed Requests",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Ratio of blocked requests vs. processed requests by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [
- {
- "options": {
- "match": "nan",
- "result": {
- "index": 0,
- "text": "n/a"
- }
- },
- "type": "special"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "percentunit"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 6,
- "y": 1
- },
- "id": 5,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])) / sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range]))",
- "fullMetaSearch": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Blocked Requests (%)",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "% Blocked Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "License status of Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [
- {
- "options": {
- "0": {
- "color": "red",
- "index": 1,
- "text": "Invalid"
- },
- "1": {
- "color": "green",
- "index": 0,
- "text": "Valid"
- }
- },
- "type": "value"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 9,
- "y": 1
- },
- "id": 10,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_valid{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "License Status",
- "range": false,
- "refId": "Licenses"
- }
- ],
- "title": "License",
- "type": "stat"
- },
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 5
- },
- "id": 2,
- "title": "Blocks",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Requests per second processed by Airlock Microgateway along with the corresponding block rate.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "blue",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "left",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "blue",
- "value": null
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "% Blocks"
- },
- "properties": [
- {
- "id": "custom.axisPlacement",
- "value": "right"
- },
- {
- "id": "unit",
- "value": "percentunit"
- },
- {
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
- },
- {
- "id": "max",
- "value": 1
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Requests per second"
- },
- "properties": [
- {
- "id": "unit",
- "value": "short"
- },
- {
- "id": "custom.fillOpacity",
- "value": 25
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 6
- },
- "id": 6,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "timezone": [
- ""
- ],
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "instant": false,
- "legendFormat": "Requests per second",
- "range": true,
- "refId": "Requests per Second"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(rate(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) / sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "hide": false,
- "instant": false,
- "legendFormat": "% Blocks",
- "range": true,
- "refId": "Blocks"
- }
- ],
- "title": "Requests vs. % Blocks",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Requests blocked by Airlock Microgateway categorized by their corresponding type.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "custom": {
- "align": "auto",
- "cellOptions": {
- "barAlignment": 0,
- "drawStyle": "line",
- "gradientMode": "none",
- "hideValue": false,
- "lineInterpolation": "linear",
- "lineStyle": {
- "dash": [
- 10,
- 10
- ],
- "fill": "solid"
- },
- "showPoints": "never",
- "spanNulls": false,
- "type": "sparkline"
- },
- "inspect": false
- },
- "displayName": "Block Type",
- "fieldMinMax": false,
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "block_type"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 153
- },
- {
- "id": "custom.cellOptions",
- "value": {
- "type": "auto"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Trend #Block Types"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 6
- },
- "id": 7,
- "options": {
- "cellHeight": "lg",
- "footer": {
- "countRows": false,
- "enablePagination": false,
- "fields": [
- "Value"
- ],
- "reducer": [
- "sum"
- ],
- "show": false
- },
- "showHeader": false,
- "sortBy": [
- {
- "desc": true,
- "displayName": "block_type"
- }
- ]
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum by (block_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m] offset -1m))/(60000/$__interval_ms)",
- "format": "time_series",
- "instant": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "Block Types"
- }
- ],
- "title": "Blocked Requests by Type",
- "transformations": [
- {
- "id": "timeSeriesTable",
- "options": {
- "A": {
- "timeField": "Time"
- },
- "Block Types": {
- "stat": "sum",
- "timeField": "Time"
- }
- }
- }
- ],
- "type": "table"
- },
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 16
- },
- "id": 1,
- "title": "Latency",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Percentiles of the application downstream latency over one minute.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "ms"
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "25th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "super-light-purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "50th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "95th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "dark-purple",
- "mode": "fixed"
- }
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 17
- },
- "id": 8,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.25, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "instant": false,
- "legendFormat": "25th Percentile",
- "range": true,
- "refId": "25th Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.5, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "50th Percentile",
- "range": true,
- "refId": "50th Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.95, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "95th Percentile",
- "range": true,
- "refId": "95th Percentile"
- }
- ],
- "title": "Application Downstream Latency",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Percentiles of the Airlock Microgateway processing time over one minute.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "ms"
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "25th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "super-light-purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "50th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "95th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "dark-purple",
- "mode": "fixed"
- }
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 17
- },
- "id": 9,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.25, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "instant": false,
- "legendFormat": "25th Percentile",
- "range": true,
- "refId": "0.25 Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.5, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "50th Percentile",
- "range": true,
- "refId": "0.5 Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.95, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "95th Percentile",
- "range": true,
- "refId": "0.95 Percentile"
- }
- ],
- "title": "Airlock Microgateway Processing Time",
- "type": "timeseries"
- }
- ],
- "refresh": "",
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_PROMETHEUS",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_valid,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Operator Namespace",
- "multi": true,
- "name": "operator_namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": ".*",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_http_rq_total,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Application Namespace",
- "multi": true,
- "name": "namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_http_rq_total,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-24h",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {},
- "timezone": "browser",
- "title": "Airlock Microgateway Overview",
- "uid": "fdp5jb8fnrmyoa",
- "version": 1,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/gke-values.yaml b/charts/airlock/microgateway/4.3.1/gke-values.yaml
new file mode 100644
index 000000000..d6d5c21d1
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/gke-values.yaml
@@ -0,0 +1,4 @@
+# values for deploying on GKE
+
+config:
+ cniBinDir: "/home/kubernetes/bin"
diff --git a/charts/airlock/microgateway/4.3.1/openshift-values.yaml b/charts/airlock/microgateway/4.3.1/openshift-values.yaml
new file mode 100644
index 000000000..3b1d6cccd
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/openshift-values.yaml
@@ -0,0 +1,15 @@
+# values for deploying on OpenShift
+
+rbac:
+ createSCCRole: true
+
+privileged: true
+
+multusNetworkAttachmentDefinition:
+ create: true
+ namespace: default
+
+config:
+ installMode: "standalone"
+ cniNetDir: "/etc/cni/multus/net.d"
+ cniBinDir: "/var/lib/cni/bin"
diff --git a/charts/airlock/microgateway/4.3.1/questions.yml b/charts/airlock/microgateway/4.3.1/questions.yml
new file mode 100644
index 000000000..73ed44d64
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/questions.yml
@@ -0,0 +1,18 @@
+questions:
+ - variable: config.cniNetDir
+ required: true
+ type: string
+ label: CNI Network Configuration Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI config files reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your kubernetes host."
+ - variable: config.cniBinDir
+ required: true
+ type: string
+ label: CNI Plugin Binaries Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI plugin binaries reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your kubernetes host."
+ - variable: config.installMode
+ required: true
+ label: CNI Plugin Installation Mode
+ group: "CNI Settings"
+ description: "Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers) as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. Please refer to the CNI installation documentation (https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-cni) to correctly setup the CNI Plugin for your environment."
diff --git a/charts/airlock/microgateway/4.3.1/templates/NOTES.txt b/charts/airlock/microgateway/4.3.1/templates/NOTES.txt
index e38e3caa0..e8aa45888 100644
--- a/charts/airlock/microgateway/4.3.1/templates/NOTES.txt
+++ b/charts/airlock/microgateway/4.3.1/templates/NOTES.txt
@@ -1,34 +1,3 @@
-Thank you for installing Airlock Microgateway.
-If you have not already done so, make sure that Airlock Microgateway CNI is also installed on the cluster.
+Thank you for installing Airlock Microgateway CNI.
-For further information, please visit our documentation at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" .}}.
-Detailed CRD API reference documentation is also available at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" .}}/api/crds.
-{{ if .Values.crds.skipVersionCheck }}
-- CRD version check skipped
-{{- else }}
-{{- $outdatedCRDs := (include "airlock-microgateway.outdatedCRDs" .) -}}
-{{- if $outdatedCRDs -}}
- {{- fail (printf `
-
-Helm does not automatically upgrade CRDs from the chart's 'crds/' directory during 'helm install/upgrade'.
-Therefore, the CRDs must be manually upgraded with the following command before deploying this chart:
-
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=%s --server-side --force-conflicts
-
-If you are not using the helm install/upgrade command and instead rely on some other mechanism which is able to upgrade CRDs for deploying this chart, you can suppress this error by setting the helm value 'crds.skipVersionCheck=true'.`
- .Chart.AppVersion)
- -}}
-{{- end -}}
-{{- end -}}
-{{- if .Values.tests.enabled }}
- {{- if .Values.operator.watchNamespaces -}}
- {{- if not (has .Release.Namespace .Values.operator.watchNamespaces) }}
- {{- fail (printf `
-
-To execute 'helm test', it is necessary that the release namespace '%s' is part of the operator's watch scope. Either disable the tests or ensure that the release namespace is added to watch namspace list ('operator.watchNamespaces') in the helm values.
-`
- .Release.Namespace)
- -}}
- {{- end -}}
- {{- end -}}
-{{- end }}
\ No newline at end of file
+For further information, please visit our documentation at https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" .}}.
diff --git a/charts/airlock/microgateway/4.3.1/templates/_helpers.tpl b/charts/airlock/microgateway/4.3.1/templates/_helpers.tpl
index 733ba9648..996491a87 100644
--- a/charts/airlock/microgateway/4.3.1/templates/_helpers.tpl
+++ b/charts/airlock/microgateway/4.3.1/templates/_helpers.tpl
@@ -1,16 +1,14 @@
{{/*
Expand the name of the chart.
-We truncate at 49 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest explicit suffix is 14 characters.
*/}}
-{{- define "airlock-microgateway.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 49 | trimSuffix "-" }}
+{{- define "airlock-microgateway-cni.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Convert an image configuration object into an image ref string.
*/}}
-{{- define "airlock-microgateway.image" -}}
+{{- define "airlock-microgateway-cni.image" -}}
{{- if .digest -}}
{{- printf "%s@%s" .repository .digest -}}
{{- else if .tag -}}
@@ -22,19 +20,19 @@ Convert an image configuration object into an image ref string.
{{/*
Create a default fully qualified app name.
-We truncate at 36 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest implicit suffix is 27 characters.
+We truncate at 50 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
+and the longest suffix is 13 characters.
If release name contains chart name it will be used as a full name.
*/}}
-{{- define "airlock-microgateway.fullname" -}}
+{{- define "airlock-microgateway-cni.fullname" -}}
{{- if .Values.fullnameOverride }}
-{{- .Values.fullnameOverride | trunc 36 | trimSuffix "-" }}
+{{- .Values.fullnameOverride | trunc 50 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
-{{- .Release.Name | trunc 36 | trimSuffix "-" }}
+{{- .Release.Name | trunc 50 | trimSuffix "-" }}
{{- else }}
-{{- printf "%s-%s" .Release.Name $name | trunc 36 | trimSuffix "-" }}
+{{- printf "%s-%s" .Release.Name $name | trunc 50 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
@@ -42,112 +40,62 @@ If release name contains chart name it will be used as a full name.
{{/*
Create chart name and version as used by the chart label.
*/}}
-{{- define "airlock-microgateway.chart" -}}
+{{- define "airlock-microgateway-cni.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
-{{- define "airlock-microgateway.sharedLabels" -}}
-helm.sh/chart: {{ include "airlock-microgateway.chart" . }}
+{{- define "airlock-microgateway-cni.labels" -}}
+helm.sh/chart: {{ include "airlock-microgateway-cni.chart" . }}
+{{ include "airlock-microgateway-cni.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
-app.kubernetes.io/part-of: {{ .Chart.Name }}
{{- with .Values.commonLabels }}
{{ toYaml .}}
{{- end }}
{{- end }}
{{/*
-Common Selector labels
+Common labels without component
*/}}
-{{- define "airlock-microgateway.sharedSelectorLabels" -}}
-app.kubernetes.io/instance: {{ .Release.Name }}
+{{- define "airlock-microgateway-cni.labelsWithoutComponent" -}}
+{{- $labels := fromYaml (include "airlock-microgateway-cni.labels" .) -}}
+{{ unset $labels "app.kubernetes.io/component" | toYaml }}
{{- end }}
{{/*
-Restricted Container Security Context
+Selector labels
*/}}
-{{- define "airlock-microgateway.restrictedSecurityContext" -}}
-allowPrivilegeEscalation: false
-privileged: false
-runAsNonRoot: true
-capabilities:
- drop: ["ALL"]
-readOnlyRootFilesystem: true
-seccompProfile:
- type: RuntimeDefault
+{{- define "airlock-microgateway-cni.selectorLabels" -}}
+app.kubernetes.io/component: cni-plugin-installer
+app.kubernetes.io/instance: {{ .Release.Name }}
+app.kubernetes.io/name: {{ include "airlock-microgateway-cni.name" . }}
{{- end }}
-{{/* Precondition: May only be used if AppVersion is isSemver */}}
-{{- define "airlock-microgateway.supportedCRDVersionPattern" -}}
-{{- $version := (semver .Chart.AppVersion) -}}
-{{- if $version.Prerelease -}}
->= {{ $version.Major }}.{{ $version.Minor }}.{{ $version.Patch }}-{{ $version.Prerelease }}
-{{- else -}}
->= {{ $version.Major }}.{{ $version.Minor }}.0 || >= {{ $version.Major }}.{{ $version.Minor }}.{{ add1 $version.Patch }}-0
-{{- end -}}
-{{- end -}}
+{{/*
+Create the name of the service account to use for the CNI Plugin
+*/}}
+{{- define "airlock-microgateway-cni.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "airlock-microgateway-cni.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
-{{- define "airlock-microgateway.outdatedCRDs" -}}
-{{- if (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) -}}
- {{- $supportedVersion := (include "airlock-microgateway.supportedCRDVersionPattern" .) -}}
- {{- range $path, $_ := .Files.Glob "crds/*.yaml" -}}
- {{- $api := ($.Files.Get $path | fromYaml).metadata.name -}}
- {{- $crd := (lookup "apiextensions.k8s.io/v1" "CustomResourceDefinition" "" $api) -}}
- {{- $isOutdated := false -}}
- {{- if $crd -}}
- {{/* If CRD is already present in the cluster, it must have the minimum supported version */}}
- {{- $isOutdated = true -}}
- {{- if hasKey $crd.metadata "labels" -}}
- {{- $crdVersion := get $crd.metadata.labels "app.kubernetes.io/version" -}}
- {{- if (eq "true" (include "airlock-microgateway.isSemver" $crdVersion)) -}}
- {{- if (semverCompare $supportedVersion $crdVersion) }}
- {{- $isOutdated = false -}}
- {{- end }}
- {{- end -}}
- {{- end -}}
- {{- end -}}
- {{- if $isOutdated }}
-{{ base $path }}
- {{- end }}
- {{- end -}}
-{{- end -}}
-{{- end -}}
-
-{{- define "airlock-microgateway.isSemver" -}}
+{{- define "airlock-microgateway-cni.isSemver" -}}
{{- regexMatch `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` . -}}
{{- end -}}
-{{- define "airlock-microgateway.docsVersion" -}}
-{{- if and (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
+{{- define "airlock-microgateway-cni.docsVersion" -}}
+{{- if and (eq "true" (include "airlock-microgateway-cni.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
{{- $version := (semver .Chart.AppVersion) -}}
{{- $version.Major }}.{{ $version.Minor -}}
{{- else -}}
{{- print "latest" -}}
{{- end -}}
{{- end -}}
-
-{{- define "airlock-microgateway.watchNamespaceSelector.labelQuery" -}}
-{{- $list := list -}}
-{{- with .matchLabels -}}
- {{- range $key, $value := . -}}
- {{- $list = append $list (printf "%s=%s" $key $value) -}}
- {{- end -}}
-{{- end -}}
-{{- with .matchExpressions -}}
- {{- range . -}}
- {{- if has .operator (list "In" "NotIn") -}}
- {{- $list = append $list (printf "%s %s (%s)" .key (lower .operator) (join "," .values)) -}}
- {{- else if eq .operator "Exists" -}}
- {{- $list = append $list .key -}}
- {{- else if eq .operator "DoesNotExist" -}}
- {{- $list = append $list (printf "!%s" .key) -}}
- {{- end -}}
- {{- end -}}
-{{- end -}}
-{{- join "," $list -}}
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/clusterrole.yaml b/charts/airlock/microgateway/4.3.1/templates/clusterrole.yaml
new file mode 100644
index 000000000..ef88ac783
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/templates/clusterrole.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+ - patch
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/clusterrolebinding.yaml b/charts/airlock/microgateway/4.3.1/templates/clusterrolebinding.yaml
new file mode 100644
index 000000000..04f87cb0f
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/templates/clusterrolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/configmap.yaml b/charts/airlock/microgateway/4.3.1/templates/configmap.yaml
new file mode 100644
index 000000000..b880116ef
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/templates/configmap.yaml
@@ -0,0 +1,22 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+data:
+ plugin-conf.json: |-
+ {
+ "type": "{{ include "airlock-microgateway-cni.fullname" . }}",
+ "debug": {{ eq .Values.config.logLevel "debug" }},
+ "logFilePath": "/var/log/{{ include "airlock-microgateway-cni.fullname" . }}.log",
+ "kubernetes": {
+ "kubeconfig": "{{ .Values.config.cniNetDir }}/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig",
+ "excludeNamespaces": {{ toJson .Values.config.excludeNamespaces }}
+ }
+ }
diff --git a/charts/airlock/microgateway/4.3.1/templates/daemonset.yaml b/charts/airlock/microgateway/4.3.1/templates/daemonset.yaml
new file mode 100644
index 000000000..4ba9f2669
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/templates/daemonset.yaml
@@ -0,0 +1,136 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "airlock-microgateway-cni.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ kubectl.kubernetes.io/default-container: cni-installer
+ {{- with mustMerge .Values.podAnnotations .Values.commonAnnotations}}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 8 }}
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ - args:
+ - --log-level
+ - "{{ .Values.config.logLevel }}"
+ env:
+ - name: CNI_NETWORK_CONFIG
+ valueFrom:
+ configMapKeyRef:
+ key: plugin-conf.json
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ - name: CNI_BIN_DIR
+ value: /host/opt/cni/bin
+ - name: CNI_NET_DIR
+ value: /host/etc/cni/net.d
+ - name: KUBECONFIG_FILE_NAME
+ value: "{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig"
+ - name: INSTALL_MODE
+ value: {{ .Values.config.installMode }}
+ - name: KUBERNETES_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ image: {{ include "airlock-microgateway-cni.image" .Values.image }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ name: cni-installer
+ {{- with .Values.resources }}
+ resources:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ startupProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 5
+ initialDelaySeconds: 3
+ periodSeconds: 3
+ timeoutSeconds: 3
+ readinessProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 1
+ periodSeconds: 60
+ timeoutSeconds: 3
+ securityContext:
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ - mountPath: /run/cni-installer
+ name: cni-installer-status
+ hostNetwork: true
+ priorityClassName: system-node-critical
+ restartPolicy: Always
+ securityContext:
+ fsGroup: 0
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ serviceAccountName: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ terminationGracePeriodSeconds: 5
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ tolerations:
+ - effect: NoSchedule
+ operator: Exists
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
+ - emptyDir: {}
+ name: cni-installer-status
diff --git a/charts/airlock/microgateway/4.3.1/templates/network-attachment-definition.yaml b/charts/airlock/microgateway/4.3.1/templates/network-attachment-definition.yaml
new file mode 100644
index 000000000..5d657e309
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/templates/network-attachment-definition.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.multusNetworkAttachmentDefinition.create -}}
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Values.multusNetworkAttachmentDefinition.namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/_operator_helpers.tpl b/charts/airlock/microgateway/4.3.1/templates/operator/_operator_helpers.tpl
deleted file mode 100644
index a540ff9f4..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/_operator_helpers.tpl
+++ /dev/null
@@ -1,42 +0,0 @@
-{{/*
-Create a default fully qualified name for operator components.
-*/}}
-{{- define "airlock-microgateway.operator.fullname" -}}
-{{ include "airlock-microgateway.fullname" . }}-operator
-{{- end }}
-
-
-{{/*
-Common operator labels
-*/}}
-{{- define "airlock-microgateway.operator.labels" -}}
-{{ include "airlock-microgateway.sharedLabels" . }}
-{{ include "airlock-microgateway.operator.selectorLabels" . }}
-{{- end }}
-
-{{/*
-Operator Selector labels
-*/}}
-{{- define "airlock-microgateway.operator.selectorLabels" -}}
-{{ include "airlock-microgateway.sharedSelectorLabels" . }}
-app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-operator
-app.kubernetes.io/component: controller
-{{- end }}
-
-{{/*
-Create the name of the service account to use for the operator
-*/}}
-{{- define "airlock-microgateway.operator.serviceAccountName" -}}
-{{- if .Values.operator.serviceAccount.create }}
-{{- default (include "airlock-microgateway.operator.fullname" .) .Values.operator.serviceAccount.name }}
-{{- else }}
-{{- default "default" .Values.operator.serviceAccount.name }}
-{{- end }}
-{{- end }}
-
-{{/*
-ServiceMonitor metrics regex pattern for leader only metrics
-*/}}
-{{- define "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" -}}
-^(microgateway_license|microgateway_sidecars).*$
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/_rbac.gen.tpl b/charts/airlock/microgateway/4.3.1/templates/operator/_rbac.gen.tpl
deleted file mode 100644
index 83b314cbc..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/_rbac.gen.tpl
+++ /dev/null
@@ -1,237 +0,0 @@
-{{/* AUTOGENERATED FILE DO NOT EDIT */}}
-
-{{/*
-Operator rbac permission rules
-*/}}
-{{- define "airlock-microgateway-operator.rbacRules" -}}
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
-- apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - delete
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - ""
- resources:
- - pods/finalizers
- verbs:
- - update
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
- - update
-- apiGroups:
- - ""
- resources:
- - secrets
- verbs:
- - create
- - delete
- - get
- - list
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - accesscontrols
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - contentsecurities
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - denyrules
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyclusters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyconfigurations
- verbs:
- - create
- - delete
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyconfigurations/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyhttpfilters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - graphqls
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - headerrewrites
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - identitypropagations
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - limits
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcrelyingparties
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - openapis
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - parsers
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - redisproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sessionhandlings
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways
- verbs:
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/finalizers
- verbs:
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - telemetries
- verbs:
- - get
- - list
- - watch
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/dashboard-configmap.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/dashboard-configmap.yaml
deleted file mode 100644
index b71ac89b6..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/dashboard-configmap.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-{{- if .Values.dashboards.create -}}
-{{- range $instance := (keys .Values.dashboards.instances | sortAlpha) -}}
-{{- $dashboard := get $.Values.dashboards.instances $instance -}}
-{{- if $dashboard.create }}
----
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: {{ include "airlock-microgateway.fullname" $ }}-dashboard-{{ $instance | lower }}
- namespace: {{ $.Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.dashboards.config.grafana.dashboardLabel -}}
- {{- .name | nindent 4 -}}: {{ .value | quote }}
- {{- end }}
- annotations:
- {{- with $.Values.dashboards.config.grafana.folderAnnotation -}}
- {{- .name | nindent 4 -}}: {{ .value | quote }}
- {{- end }}
- {{- with $.Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-data:
- {{- printf "%s.json" $instance | nindent 2 }}: |-
- {{- ($.Files.Get (printf "dashboards/%s.json" $instance)) | nindent 4 -}}
-{{- end -}}
-{{- end -}}
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/deployment.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/deployment.yaml
deleted file mode 100644
index db340cdec..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/deployment.yaml
+++ /dev/null
@@ -1,143 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- replicas: {{ .Values.operator.replicaCount }}
- {{- with .Values.operator.updateStrategy }}
- strategy:
- {{- toYaml . | trim | nindent 4 }}
- {{- end }}
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- template:
- metadata:
- annotations:
- checksum/config: {{ include (print $.Template.BasePath "/operator/configmap.yaml") . | sha256sum }}
- kubectl.kubernetes.io/default-container: manager
- {{- with mustMerge .Values.operator.podAnnotations .Values.commonAnnotations}}
- {{- toYaml . | nindent 8 }}
- {{- end }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 8 }}
- {{- with .Values.operator.podLabels }}
- {{- toYaml . | nindent 8 }}
- {{- end }}
- spec:
- containers:
- - args:
- - --config=operator_config.yaml
- env:
- - name: ENGINE_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.engine.image }}
- - name: NETWORK_VALIDATOR_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.networkValidator.image }}
- - name: SESSION_AGENT_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.sessionAgent.image }}
- - name: OPERATOR_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: OPERATOR_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- image: {{ include "airlock-microgateway.image" .Values.operator.image }}
- imagePullPolicy: {{ .Values.operator.image.pullPolicy }}
- livenessProbe:
- httpGet:
- path: /healthz
- port: 8081
- initialDelaySeconds: 15
- periodSeconds: 20
- timeoutSeconds: 5
- name: manager
- ports:
- - containerPort: 9443
- name: webhook-server
- protocol: TCP
- - containerPort: 13377
- name: xds-server
- protocol: TCP
- - containerPort: 8080
- protocol: TCP
- - containerPort: 8081
- protocol: TCP
- readinessProbe:
- httpGet:
- path: /readyz
- port: 8081
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- {{- with .Values.operator.resources }}
- resources:
- {{- toYaml . | nindent 10 }}
- {{- end }}
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 10 }}
- terminationMessagePath: /dev/termination-log
- terminationMessagePolicy: FallbackToLogsOnError
- volumeMounts:
- - mountPath: /tmp/k8s-webhook-server/serving-certs
- name: cert
- readOnly: true
- - mountPath: /opt/airlock/license/
- name: airlock-microgateway-license
- readOnly: true
- - mountPath: /operator_config.yaml
- name: operator-config
- subPath: operator_config.yaml
- - mountPath: /sidecar/engine_container_template.yaml
- name: operator-config
- subPath: engine_container_template.yaml
- - mountPath: /sidecar/network_validator_container_template.yaml
- name: operator-config
- subPath: network_validator_container_template.yaml
- - mountPath: /sidecar/session_agent_container_template.yaml
- name: operator-config
- subPath: session_agent_container_template.yaml
- - mountPath: /engine_bootstrap_config_template.yaml
- name: operator-config
- subPath: engine_bootstrap_config_template.yaml
- securityContext:
- runAsNonRoot: true
- serviceAccountName: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- terminationGracePeriodSeconds: 10
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.nodeSelector }}
- nodeSelector:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.tolerations }}
- tolerations:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.affinity }}
- affinity:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - name: cert
- secret:
- defaultMode: 420
- secretName: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-server-cert
- - name: airlock-microgateway-license
- secret:
- defaultMode: 292
- optional: true
- secretName: {{ .Values.license.secretName }}
- - configMap:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-config
- name: operator-config
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/manager-role.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/manager-role.yaml
deleted file mode 100644
index 90335bcfe..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/manager-role.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-{{- if .Values.operator.rbac.create }}
-{{- if empty .Values.operator.watchNamespaces }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
-{{ include "airlock-microgateway-operator.rbacRules" . -}}
-{{- else }}
-{{- range $namespace := (append .Values.operator.watchNamespaces .Release.Namespace | uniq) }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
- namespace: {{ $namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
-{{ include "airlock-microgateway-operator.rbacRules" $ }}
----
-{{- end -}}
-{{- end -}}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/manager-rolebinding.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/manager-rolebinding.yaml
deleted file mode 100644
index ae99cfb7b..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/manager-rolebinding.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-{{- if .Values.operator.rbac.create }}
-{{- if empty .Values.operator.watchNamespaces }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- namespace: {{ .Release.Namespace }}
-{{- else }}
-{{- range $namespace := (append .Values.operator.watchNamespaces .Release.Namespace | uniq) }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
- namespace: {{ $namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" $ }}
- namespace: {{ $.Release.Namespace }}
----
-{{- end -}}
-{{- end -}}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/metrics-service.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/metrics-service.yaml
deleted file mode 100644
index 34d23f6d6..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/metrics-service.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-metrics
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: http
- name: metrics
- port: 8080
- protocol: TCP
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
----
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-leader-metrics
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- operator.microgateway.airlock.com/isLeader: "true"
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: http
- name: metrics
- port: 8080
- protocol: TCP
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
- operator.microgateway.airlock.com/isLeader: "true"
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/mutating-webhook.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/mutating-webhook.yaml
deleted file mode 100644
index 311f9726a..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/mutating-webhook.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-{{ .Release.Namespace }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- annotations:
- cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- {{- with .Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-webhooks:
-{{- range $webhook := (include "airlock-microgateway-operator.mutatingWebhooks" .) | fromYamlArray }}
-- {{ toYaml $webhook | indent 2 | trim }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaceSelector:
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaceSelector:
- matchExpressions:
- - key: kubernetes.io/metadata.name
- operator: In
- values:
- {{- toYaml . | nindent 10 }}
- {{- end }}
-{{- end }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/podmonitor.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/podmonitor.yaml
deleted file mode 100644
index 1fe34fcb3..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/podmonitor.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-{{- if .Values.engine.sidecar.podMonitor.create }}
-apiVersion: monitoring.coreos.com/v1
-kind: PodMonitor
-metadata:
- name: {{ include "airlock-microgateway.fullname" . }}-engine
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.engine.sidecar.podMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- namespaceSelector:
- any: true
- selector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
- microgateway.airlock.com/managedBy: {{ .Release.Namespace }}
- podMetricsEndpoints:
- - targetPort: 19002
- path: /metrics
- scheme: http
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/role.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/role.yaml
deleted file mode 100644
index 5378be8ef..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/role.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
- - apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
- - apiGroups:
- - coordination.k8s.io
- resources:
- - leases
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
- - apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/rolebinding.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/rolebinding.yaml
deleted file mode 100644
index bafec1015..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/rolebinding.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/selfsigned-issuer.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/selfsigned-issuer.yaml
deleted file mode 100644
index 466c56338..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/selfsigned-issuer.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-selfsigned-issuer
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selfSigned: {}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/serviceaccount.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/serviceaccount.yaml
deleted file mode 100644
index 434d7e9d3..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/serviceaccount.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-{{- if .Values.operator.serviceAccount.create -}}
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with mustMerge .Values.operator.serviceAccount.annotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/servicemonitor.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/servicemonitor.yaml
deleted file mode 100644
index ff85a9a31..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/servicemonitor.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-{{- if .Values.operator.serviceMonitor.create }}
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- matchExpressions:
- - { key: "operator.microgateway.airlock.com/isLeader", operator: DoesNotExist }
- endpoints:
- - path: /metrics
- port: metrics
- scheme: http
- metricRelabelings:
- - sourceLabels:
- - __name__
- regex: {{ include "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" . }}
- action: drop
----
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- operator.microgateway.airlock.com/isLeader: "true"
- endpoints:
- - path: /metrics
- port: metrics
- scheme: http
- metricRelabelings:
- - sourceLabels:
- - __name__
- regex: {{ include "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" . }}
- action: keep
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/serving-certificate.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/serving-certificate.yaml
deleted file mode 100644
index 60b92e1e2..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/serving-certificate.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- dnsNames:
- - airlock-microgateway-operator-webhook.{{ .Release.Namespace }}.svc
- - airlock-microgateway-operator-webhook.{{ .Release.Namespace }}.svc.cluster.local
- issuerRef:
- kind: Issuer
- name: {{ include "airlock-microgateway.operator.fullname" . }}-selfsigned-issuer
- secretName: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-server-cert
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/validating-webhook.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/validating-webhook.yaml
deleted file mode 100644
index 5d6b4396b..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/validating-webhook.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-{{ .Release.Namespace }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- annotations:
- cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- {{- with .Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-webhooks:
-{{- range $webhook := (include "airlock-microgateway-operator.validatingWebhooks" .) | fromYamlArray }}
-- {{ toYaml $webhook | indent 2 | trim }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaceSelector:
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaceSelector:
- matchExpressions:
- - key: kubernetes.io/metadata.name
- operator: In
- values:
- {{- toYaml . | nindent 10 }}
- {{- end }}
-{{- end }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/webhook-service.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/webhook-service.yaml
deleted file mode 100644
index 477ea839f..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/webhook-service.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-webhook
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: https
- name: webhook
- port: 443
- protocol: TCP
- targetPort: 9443
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/xds-service.yaml b/charts/airlock/microgateway/4.3.1/templates/operator/xds-service.yaml
deleted file mode 100644
index 81b41acf5..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/operator/xds-service.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-xds
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: grpc
- name: xds
- port: 13377
- protocol: TCP
- targetPort: 13377
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
- operator.microgateway.airlock.com/isLeader: "true"
diff --git a/charts/airlock/microgateway/4.3.1/templates/scc-role.yaml b/charts/airlock/microgateway/4.3.1/templates/scc-role.yaml
new file mode 100644
index 000000000..862748692
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/templates/scc-role.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+- apiGroups:
+ - security.openshift.io
+ resourceNames:
+ - privileged
+ resources:
+ - securitycontextconstraints
+ verbs:
+ - use
+{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/scc-rolebinding.yaml b/charts/airlock/microgateway/4.3.1/templates/scc-rolebinding.yaml
new file mode 100644
index 000000000..ebd02982c
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/templates/scc-rolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+subjects:
+- kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/serviceaccount.yaml b/charts/airlock/microgateway/4.3.1/templates/serviceaccount.yaml
new file mode 100644
index 000000000..3dc8d58ea
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.1/templates/serviceaccount.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with mustMerge .Values.serviceAccount.annotations .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/tests/rbac.yaml b/charts/airlock/microgateway/4.3.1/templates/tests/rbac.yaml
index 93bd4cd1b..744799333 100644
--- a/charts/airlock/microgateway/4.3.1/templates/tests/rbac.yaml
+++ b/charts/airlock/microgateway/4.3.1/templates/tests/rbac.yaml
@@ -2,142 +2,63 @@
apiVersion: v1
kind: ServiceAccount
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
subjects:
- kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
rules:
- apiGroups:
- - microgateway.airlock.com
+ - "apps"
resources:
- - sidecargateways
+ - daemonsets
resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway"
+ - {{ include "airlock-microgateway-cni.fullname" . }}
verbs:
- - get
- - list
- - watch
- - delete
+ - get
+ - watch
+ - list
- apiGroups:
- - microgateway.airlock.com
+ - ""
resources:
- - sidecargateways
+ - pods
+ - pods/log
verbs:
- - create
+ - get
+ - list
+{{- if .Values.rbac.createSCCRole }}
- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - list
-- apiGroups:
- - "apps"
- resources:
- - deployments
+ - security.openshift.io
resourceNames:
- - "{{ include "airlock-microgateway.operator.fullname" . }}"
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - "apps"
+ - privileged
resources:
- - statefulsets
- - statefulsets/scale
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend"
+ - securitycontextconstraints
verbs:
- - get
- - list
- - watch
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- - pods/log
- - pods/status
- - pods/attach
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend-0"
- - "{{ include "airlock-microgateway.fullname" . }}-test-valid-request"
- - "{{ include "airlock-microgateway.fullname" . }}-test-injection-request"
- verbs:
- - get
- - list
- - create
- - watch
- - delete
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - create
-{{- if .Values.operator.watchNamespaceSelector }}
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-subjects:
- - kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
- namespace: {{ .Release.Namespace }}
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-rules:
-- apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
-{{- end }}
+ - use
+{{- end -}}
{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/templates/tests/service.yaml b/charts/airlock/microgateway/4.3.1/templates/tests/service.yaml
deleted file mode 100644
index 30ddc278d..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/tests/service.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-{{- if .Values.tests.enabled -}}
-apiVersion: v1
-kind: Service
-metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-service"
- namespace: {{ .Release.Namespace }}
- labels:
- app: test-service
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
-spec:
- selector:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
- ports:
- - name: http
- port: 8080
- targetPort: 8080
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/tests/statefulset.yaml b/charts/airlock/microgateway/4.3.1/templates/tests/statefulset.yaml
deleted file mode 100644
index 710a7b9f6..000000000
--- a/charts/airlock/microgateway/4.3.1/templates/tests/statefulset.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-{{- if .Values.tests.enabled -}}
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- namespace: {{ .Release.Namespace }}
- labels:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
-spec:
- serviceName: nginx
- replicas: 0
- selector:
- matchLabels:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 6 }}
- template:
- metadata:
- annotations:
- k8s.v1.cni.cncf.io/networks: default/airlock-microgateway-cni
- labels:
- sidecar.microgateway.airlock.com/inject: "true"
- sidecar.istio.io/inject: "false"
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 8 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 8 }}
- spec:
- containers:
- - image: cgr.dev/chainguard/nginx
- name: nginx
- ports:
- - containerPort: 8080
- volumeMounts:
- - mountPath: /var/lib/nginx/tmp/
- name: nginx-tmp
- - mountPath: /var/run
- name: nginx-run
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 12 }}
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - emptyDir: {}
- name: nginx-tmp
- - emptyDir: {}
- name: nginx-run
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/templates/tests/test-install.yaml b/charts/airlock/microgateway/4.3.1/templates/tests/test-install.yaml
index ab82abea7..12d8c8de7 100644
--- a/charts/airlock/microgateway/4.3.1/templates/tests/test-install.yaml
+++ b/charts/airlock/microgateway/4.3.1/templates/tests/test-install.yaml
@@ -2,14 +2,11 @@
apiVersion: v1
kind: Pod
metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-install"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-test-install"
namespace: {{ .Release.Namespace }}
labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- sidecar.istio.io/inject: "false"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
annotations:
helm.sh/hook: test
helm.sh/hook-delete-policy: before-hook-creation
@@ -19,209 +16,88 @@ spec:
- name: test
image: "bitnami/kubectl:{{ .Capabilities.KubeVersion.Major }}.{{ .Capabilities.KubeVersion.Minor }}"
securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ readOnly: true
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ readOnly: true
command:
- sh
- -c
- |
set -eu
- clean_up() {
- echo ""
- echo "### Clean up test resources"
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- echo ""
- echo "### Scale down '{{ include "airlock-microgateway.fullname" . }}-test-backend'"
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=60s
- sleep 3s
- echo ""
- }
-
fail() {
+ echo "Error: ${1}"
echo ""
- echo "### Error: ${1}"
- echo ""
-
- if kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway >/dev/null 2>&1; then
- echo ""
- echo 'Microgateway Sidecargateway status:'
- kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway -o jsonpath-as-json='{.status}' || true
- echo ""
- echo ""
- fi
-
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 >/dev/null 2>&1; then
- echo "Pod '{{ include "airlock-microgateway.fullname" . }}-test-backend-0':"
- kubectl describe -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 || true
- echo ""
- echo ""
- echo 'Logs of Nginx container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c nginx --tail 5 || true
- echo ""
- echo ""
- # Wait for engine logs
- sleep 10s
- echo 'Logs of Microgateway Engine container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c airlock-microgateway-engine --tail 5 || true
- fi
-
+ echo 'CNI installer logs:'
+ kubectl logs -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}} -c cni-installer
exit 1
}
- create_sidecargateway() {
- # create SidecarGateway resource for testing purposes
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- kubectl apply -f - </dev/null 2>&1; do sleep 1s; i=$((i+1)); done
- kubectl logs -f -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- kubectl delete pod --ignore-not-found=true -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- }
-
- {{- if .Values.operator.watchNamespaceSelector }}
- echo "### Verify that Namespace Selector matches Namespace '{{ .Release.Namespace }}'"
- if ! kubectl get namespace -l '{{ include "airlock-microgateway.watchNamespaceSelector.labelQuery" .Values.operator.watchNamespaceSelector }}' | grep -q {{ .Release.Namespace }}; then
- labels=$(kubectl get namespace {{ .Release.Namespace }} -o jsonpath={.metadata.labels} | jq | awk '{print " " $0}')
- fail {{printf `"Operator namespace '%s' is not part of the operator's watch scope. To execute 'helm test', the selector configured in the helm value 'operator.watchNamespaceSelector' must match the namespace's labels:\n* Current selector:\n%s\n\n* Current labels:\n$labels\n###"`
- .Release.Namespace
- (replace "\"" "\\\"" (replace "\n" "\\n" (.Values.operator.watchNamespaceSelector | toPrettyJson | indent 2)))
- }}
+ if ! kubectl rollout status --timeout=60s -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}}; then
+ fail 'CNI DaemonSet rollout did not complete within timeout'
fi
- echo ""
- {{- end }}
- trap clean_up EXIT
- echo ""
-
- echo "### Waiting for Microgateway Operator Deployments to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} --timeout=90s \
- deployments/{{ include "airlock-microgateway.operator.fullname" . }}; then
- fail 'Timout occurred'
+ echo "Checking whether CNI binary was installed"
+ if ! [ -f "/host/opt/cni/bin/{{ include "airlock-microgateway-cni.fullname" . }}" ]; then
+ fail 'CNI binary was not installed'
fi
- echo ""
- echo "### Scale '{{ include "airlock-microgateway.fullname" . }}-test-backend' to '1' replica"
- # scale to zero replicas to ensure no pods are present from previous runs
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=10s
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=1 --timeout=10s
- echo ""
-
- echo "### Waiting for backend pod"
- i=0
- while true; do
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0; then
- break
- elif [ $i -gt 3 ]; then
- fail 'Pod not ready'
- fi
- sleep 2s
- i=$((i+1))
- done
-
- echo "### Checking Microgateway Engine sidecar container was injected"
- if ! kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.spec.containers[?(@.name=="airlock-microgateway-engine")]}' | grep -q "airlock-microgateway-engine"; then
- fail 'Microgateway Engine sidecar container not injected'
+ echo "Checking whether CNI kubeconfig was installed"
+ if ! [ -f "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig" ]; then
+ fail 'CNI kubeconfig was not created'
fi
- echo "True"
- echo ""
- echo "### Checking for valid license"
- i=0
- while true; do
- if [ "$(kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.metadata.labels.sidecar\.microgateway\.airlock\.com/licensed}')" = 'true' ]; then
- break
- elif [ $i -gt 30 ]; then
- fail 'Microgateway license is missing or invalid'
- fi
- sleep 2s
- i=$((i+1))
- done
- echo "True"
- echo ""
+ echo "Checking whether CNI configuration was written"
+ case {{ .Values.config.installMode }} in
+ "chained")
+ for file in "/host/etc/cni/net.d/"*.conflist; do
+ if containsMGWCNIConf "${file}"; then
+ echo "Success"
+ exit 0
+ fi
+ done
+ ;;
+ "standalone")
+ if containsMGWCNIConf "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}.conflist"; then
+ echo "Success"
+ exit 0
+ fi
+ ;;
+ "manual")
+ echo "- Skipping because we are in 'manual' install mode"
+ echo "Success"
+ exit 0
+ ;;
+ esac
- echo "### Create SidecarGateway resource for testing"
- if ! create_sidecargateway ; then
- fail 'Creation of SidecarGateway resource failed'
- fi
- echo ""
-
- echo "### Waiting for '{{ include "airlock-microgateway.fullname" . }}-test-backend' to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --timeout=90s; then
- fail 'Timout occurred'
- fi
- echo ""
-
- echo "### Waiting for 'engine-config-valid' condition"
- if ! kubectl wait -n {{ .Release.Namespace }} pods --field-selector=metadata.name={{ include "airlock-microgateway.fullname" . }}-test-backend-0 --timeout=90s --for=condition=microgateway.airlock.com/engine-config-valid=True; then
- fail 'Configuration was never accepted by the Microgateway Engine'
- fi
- sleep 5s
- echo ""
- echo ""
-
- echo "### Checking whether a valid request is successful and returns HTTP status code '200'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "200 OK"; then
- fail 'A valid request was not successful'
- fi
- echo ""
- echo ""
-
- echo "### Checking whether a request with an injection attack is blocked and returns HTTP status code '400'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/?token='%20UnION%20all%20select%20A" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "400 Bad Request"; then
- fail 'A malicious request was not blocked'
- fi
- echo ""
- echo ""
-
- echo "### Installation of '{{ include "airlock-microgateway.fullname" . }}' succeeded"
- exit 0
- serviceAccountName: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ fail 'Configuration for plugin "{{ include "airlock-microgateway-cni.fullname" . }}" was not found'
+ serviceAccountName: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.1/values.schema.json b/charts/airlock/microgateway/4.3.1/values.schema.json
index 173d6b084..e087bd700 100644
--- a/charts/airlock/microgateway/4.3.1/values.schema.json
+++ b/charts/airlock/microgateway/4.3.1/values.schema.json
@@ -14,15 +14,6 @@
"commonAnnotations": {
"$ref": "#/definitions/StringMap"
},
- "crds": {
- "type": "object",
- "properties": {
- "skipVersionCheck": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
"imagePullSecrets": {
"type": "array",
"items": {
@@ -39,304 +30,120 @@
"additionalProperties": true
}
},
- "operator": {
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "podAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "podLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "resources": {
+ "type": "object"
+ },
+ "nodeSelector": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "affinity": {
+ "type": "object"
+ },
+ "rbac": {
"type": "object",
"properties": {
- "replicaCount": {
- "type": "integer",
- "minimum": 0
- },
- "updateStrategy": {
- "$ref": "#/definitions/UpdateStrategy"
- },
- "image": {
- "$ref": "#/definitions/Image"
- },
- "podAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "podLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "resources": {
- "type": "object"
- },
- "nodeSelector": {
- "$ref": "#/definitions/StringMap"
- },
- "tolerations": {
- "type": "array",
- "items": {
- "type": "object"
- }
- },
- "affinity": {
- "type": "object"
- },
- "config": {
- "type": "object",
- "properties": {
- "logLevel": {
- "type": "string",
- "enum": [
- "debug",
- "info",
- "warn",
- "error"
- ]
- }
- },
- "required": [
- "logLevel"
- ],
- "additionalProperties": false
- },
- "serviceAccount": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "annotations": {
- "$ref": "#/definitions/StringMap"
- },
- "name": {
- "type": "string"
- }
- },
- "required": [
- "annotations",
- "create",
- "name"
- ],
- "additionalProperties": false
- },
- "watchNamespaces": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "watchNamespaceSelector": {
- "$ref": "#/definitions/LabelSelector"
- },
- "rbac": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- },
- "serviceMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "oneOf": [
- {
- "properties": {
- "watchNamespaces": {
- "minItems": 1
- },
- "watchNamespaceSelector": {
- "additionalProperties": false
- }
- }
- },
- {
- "properties": {
- "watchNamespaces": {
- "maxItems": 0
- },
- "watchNamespaceSelector": {
- "$ref": "#/definitions/LabelSelector"
- }
- }
- }
- ],
- "required": [
- "affinity",
- "config",
- "image",
- "updateStrategy",
- "nodeSelector",
- "podAnnotations",
- "podLabels",
- "rbac",
- "replicaCount",
- "resources",
- "serviceAccount",
- "serviceAnnotations",
- "serviceLabels",
- "serviceMonitor",
- "tolerations"
- ],
- "additionalProperties": false
- },
- "engine": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- },
- "resources": {
- "type": "object"
- },
- "sidecar": {
- "type": "object",
- "properties":{
- "podMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "podMonitor"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "image",
- "resources",
- "sidecar"
- ],
- "additionalProperties": false
- },
- "networkValidator": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- }
- },
- "required": [
- "image"
- ],
- "additionalProperties": false
- },
- "sessionAgent": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- },
- "resources": {
- "type": "object"
- }
- },
- "required": [
- "image",
- "resources"
- ],
- "additionalProperties": false
- },
- "license": {
- "type": "object",
- "properties": {
- "secretName": {
- "type": "string",
- "minLength": 1
- }
- },
- "required": [
- "secretName"
- ],
- "additionalProperties": false
- },
- "dashboards": {
- "type": "object",
- "properties" : {
"create": {
"type": "boolean"
},
- "config": {
- "type": "object",
- "properties": {
- "grafana": {
- "type": "object",
- "properties": {
- "folderAnnotation": {
- "$ref": "#/definitions/NameValuePair"
- },
- "dashboardLabel": {
- "$ref": "#/definitions/NameValuePair"
- }
- },
- "required": [
- "folderAnnotation",
- "dashboardLabel"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "grafana"
- ],
- "additionalProperties": false
- },
- "instances": {
- "type": "object",
- "properties": {
- "overview": {
- "$ref": "#/definitions/DashboardInstance"
- },
- "license" : {
- "$ref": "#/definitions/DashboardInstance"
- },
- "blockMetrics" : {
- "$ref": "#/definitions/DashboardInstance"
- },
- "blockLogs" : {
- "$ref": "#/definitions/DashboardInstance"
- }
- },
- "required": [
- "overview",
- "license",
- "blockMetrics",
- "blockLogs"
- ],
- "additionalProperties": false
+ "createSCCRole": {
+ "type": "boolean"
}
},
"required": [
"create",
- "config",
- "instances"
+ "createSCCRole"
+ ],
+ "additionalProperties": false
+ },
+ "privileged": {
+ "type": "boolean"
+ },
+ "serviceAccount": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "annotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "annotations",
+ "create",
+ "name"
+ ],
+ "additionalProperties": false
+ },
+ "multusNetworkAttachmentDefinition": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "namespace": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "create",
+ "namespace"
+ ],
+ "additionalProperties": false
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "installMode": {
+ "type": "string",
+ "enum": [
+ "chained",
+ "standalone",
+ "manual"
+ ]
+ },
+ "logLevel": {
+ "type": "string",
+ "enum": [
+ "debug",
+ "info",
+ "warn",
+ "error"
+ ]
+ },
+ "cniNetDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "cniBinDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "excludeNamespaces": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "cniBinDir",
+ "cniNetDir",
+ "excludeNamespaces",
+ "installMode",
+ "logLevel"
],
"additionalProperties": false
},
@@ -357,18 +164,22 @@
}
},
"required": [
+ "affinity",
"commonAnnotations",
"commonLabels",
- "crds",
- "engine",
+ "config",
"fullnameOverride",
+ "image",
"imagePullSecrets",
- "license",
+ "multusNetworkAttachmentDefinition",
"nameOverride",
- "operator",
- "networkValidator",
- "sessionAgent",
- "dashboards",
+ "nodeSelector",
+ "podAnnotations",
+ "podLabels",
+ "privileged",
+ "rbac",
+ "resources",
+ "serviceAccount",
"tests"
],
"additionalProperties": false,
@@ -409,132 +220,6 @@
"tag"
],
"additionalProperties": false
- },
- "LabelSelector": {
- "type": "object",
- "properties": {
- "matchExpressions": {
- "type": "array",
- "items": {
- "type": "object",
- "required": [
- "key",
- "operator"
- ],
- "properties": {
- "key": {
- "type": "string"
- },
- "operator": {
- "type": "string"
- },
- "values": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
- }
- },
- "matchLabels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "additionalProperties": false
- },
- "UpdateStrategy": {
- "type": "object",
- "oneOf" : [
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RecreateType"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RollingUpdateType"
- },
- "rollingUpdate": {
- "$ref": "#/definitions/RollingUpdate"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- }
- ]
- },
- "RecreateType": {
- "type": "string",
- "enum": [
- "Recreate"
- ]
- },
- "RollingUpdateType": {
- "type": "string",
- "enum": [
- "RollingUpdate"
- ]
- },
- "RollingUpdate": {
- "type": "object",
- "properties": {
- "maxSurge": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- },
- "maxUnavailable": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- }
- },
- "anyOf": [
- {"required": ["maxSurge"]},
- {"required": ["maxUnavailable"]}
- ],
- "additionalProperties": false
- },
- "DashboardInstance" : {
- "type" : "object",
- "properties" : {
- "create" : {
- "type" : "boolean"
- }
- },
- "required" : [
- "create"
- ],
- "additionalProperties": false
- },
- "NameValuePair" : {
- "type" : "object",
- "properties" : {
- "name" : {
- "type": "string",
- "minLength": 1
- },
- "value" : {
- "type" : "string",
- "minLength": 1
- }
- },
- "required" : [
- "name",
- "value"
- ],
- "additionalProperties": false
}
}
}
diff --git a/charts/airlock/microgateway/4.3.1/values.yaml b/charts/airlock/microgateway/4.3.1/values.yaml
index 120df1946..8f518138a 100644
--- a/charts/airlock/microgateway/4.3.1/values.yaml
+++ b/charts/airlock/microgateway/4.3.1/values.yaml
@@ -1,4 +1,4 @@
-# -- Allows overriding the name to use instead of "microgateway".
+# -- Allows overriding the name to use instead of "microgateway-cni".
nameOverride: ""
# -- Allows overriding the name to use as full name of resources.
fullnameOverride: ""
@@ -10,203 +10,75 @@ commonAnnotations: {}
imagePullSecrets: []
# - name: myRegistryKeySecretName
-crds:
- # -- Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs.
- # The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster
- # when performing a "helm install/upgrade".
- skipVersionCheck: false
-operator:
- # -- Number of replicas for the operator Deployment.
- replicaCount: 2
- # -- Specifies the operator update strategy.
- updateStrategy:
- type: RollingUpdate
- # Specifies the Airlock Microgateway Operator image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Operator image.
- repository: "quay.io/airlock/microgateway-operator"
- # -- Image tag to pull.
- tag: "4.3.1"
- # -- SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63").
- # Overrides tag when specified.
- digest: "sha256:84b6eb914103d4c62024d9f761b7dd4371ea3ba8996fb04095d87ebfaf3db2bb"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Annotations to add to all Pods.
- podAnnotations: {}
- # -- Labels to add to all Pods.
- podLabels: {}
- # -- Annotations to add to the Service.
- serviceAnnotations: {}
- # prometheus.io/scrape: "true"
- # prometheus.io/port: "8080"
-
- # -- Labels to add to the Service.
- serviceLabels: {}
- # -- Resource restrictions to apply to the operator container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 1000m
- # memory: 512Mi
- # requests:
- # cpu: 100m
- # memory: 512Mi
-
- # -- Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes.
- nodeSelector: {}
- # -- Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes.
- tolerations: []
- # -- Custom affinity to apply to the operator Deployment. Used to influence the scheduling.
- affinity: {}
- # Parameters for the operator configuration.
- config:
- # -- Operator application log level.
- logLevel: "info"
- # Configures the generation of the ServiceAccount.
- serviceAccount:
- # -- Whether a ServiceAccount should be created.
- create: true
- # -- Annotations to add to the ServiceAccount.
- annotations: {}
- # -- Name of the ServiceAccount to use.
- # If not set and create is true, a name is generated using the fullname template.
- name: ""
- # -- Allows to restrict the operator to specific namespaces, depending on your needs.
- # For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`).
- # In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace.
- # For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`.
- # An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty.
- # Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces.
- # Please note that this feature requires a Premium license.
- watchNamespaces: []
- # -- Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector.
- # It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator.
- # This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings).
- # An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty.
- # Please note that this feature requires a Premium license.
- watchNamespaceSelector: {}
- # For further examples, see: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements.
- # matchLabels:
- # microgateway.airlock.com/enable: "true"
- # matchExpressions:
- # - { key: environment, operator: NotIn, values: [dev] }
-
- # Configures the generation of Role and RoleBinding as well as ClusterRoles and ClusterRoleBinding pairs for the ServiceAccount specified above.
- rbac:
- # -- Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function.
- create: true
- # Configures the generation of a Prometheus Operator ServiceMonitor.
- serviceMonitor:
- # -- Whether to create a ServiceMonitor resource for monitoring.
- create: false
- # -- Labels to add to the ServiceMonitor.
- labels: {}
- # release: ""
-engine:
- # Specifies the Airlock Microgateway Engine image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Engine image.
- repository: "quay.io/airlock/microgateway-engine"
- # -- Image tag to pull.
- tag: "4.3.1"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:6be782cc3f3206bfa61f462812d2a495e114ae13c59a7cdaed7ca406d5bc1b01"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Engine container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 500m
- # memory: 128Mi
- # requests:
- # cpu: 10m
- # memory: 40Mi
-
- # Additional configuration when deployed as a sidecar.
- sidecar:
- # Configures the generation of a Prometheus Operator PodMonitor.
- podMonitor:
- # -- Whether to create a PodMonitor resource for monitoring.
- create: false
- # -- Labels to add to the PodMonitor.
- labels: {}
- # release: ""
-networkValidator:
- # Specifies the Airlock Microgateway Network Validator image to be injected as an init-container.
- image:
- # -- Image repository from which to pull the netcat image for the Airlock Microgateway Network Validator init-container.
- repository: "cgr.dev/chainguard/netcat"
- # -- Image tag to pull.
- tag: ""
- # -- SHA256 image digest to pull (in the format "sha256:6626ab44066867687baa7bfcabedafce5adc50446be1207c90c3b211bd922f84").
- # Overrides tag when specified.
- digest: "sha256:6626ab44066867687baa7bfcabedafce5adc50446be1207c90c3b211bd922f84"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
-sessionAgent:
- # Specifies the Airlock Microgateway Session Agent image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Session Agent image.
- repository: "quay.io/airlock/microgateway-session-agent"
- # -- Image tag to pull.
- tag: "4.3.1"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:d62bdb16c74d340a81791be1696d620950d8232437676910bb6e5548411f2afd"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Session Agent container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 150m
- # memory: 32Mi
- # requests:
- # cpu: 10m
- # memory: 8Mi
-license:
- # -- Name of the secret containing the "microgateway-license.txt" key.
- secretName: "airlock-microgateway-license"
-# Creates dashboards in the form of ConfigMaps that can be imported
-# by Grafana using its sidecar setup.
-dashboards:
- # -- Whether to create any ConfigMaps containing Grafana dashboards to import.
+# Specifies the Airlock Microgateway CNI image.
+image:
+ # -- Image repository from which to pull the Airlock Microgateway CNI image.
+ repository: "quay.io/airlock/microgateway-cni"
+ # -- Image tag to pull.
+ tag: "4.3.1"
+ # -- SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a").
+ # Overrides tag when specified.
+ digest: "sha256:bdd216c8a8c56a0eee0134f67772cbd75358640a0685cf5d71add653abb2c53b"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+# -- Annotations to add to all Pods.
+podAnnotations: {}
+# -- Labels to add to all Pods.
+podLabels: {}
+# -- Resource restrictions to apply to the CNI installer container.
+resources:
+ requests:
+ cpu: 10m
+ memory: 100Mi
+# -- NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes.
+nodeSelector:
+ kubernetes.io/os: linux
+# -- Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes.
+affinity: {}
+# Configures the generation of RBAC Roles and RoleBindings.
+rbac:
+ # -- Whether to create RBAC resources which are required for the CNI plugin to function.
+ create: true
+ # -- (OpenShift) Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint.
+ createSCCRole: false
+# -- Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift).
+privileged: false
+# Configures the generation of the ServiceAccount.
+serviceAccount:
+ # -- Whether a ServiceAccount should be created.
+ create: true
+ # -- Annotations to add to the ServiceAccount.
+ annotations: {}
+ # -- Name of the ServiceAccount to use.
+ # If not set and create is true, a name is generated using the fullname template.
+ name: ""
+# Configures the generation of a NetworkAttachmentDefinition for use with Multus CNI (OpenShift)
+multusNetworkAttachmentDefinition:
+ # -- Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods.
create: false
- config:
- # Configures the necessary label and annotations along with their values
- # to enable Grafana to correctly identify the ConfigMaps containing
- # dashboards and file them within a dedicated folder in the dashboard overview.
- # These settings need to match the Grafana sidecar configuration.
- grafana:
- folderAnnotation:
- # -- Name of the annotation containing the folder name to file dashboards into.
- name: "grafana_folder"
- # -- Name of the folder dashboards are filed into within the Grafana UI.
- value: "Airlock Microgateway"
- dashboardLabel:
- # -- Name of the label that lets Grafana identify ConfigMaps that represent dashboards.
- name: "grafana_dashboard"
- # -- Value of the label that lets Grafana identify ConfigMaps that represent dashboards.
- value: "1"
- instances:
- # Available dashboard instances that can be individually created/deployed.
- overview:
- # -- Whether to create the overview dashboard.
- create: true
- license:
- # -- Whether to create the license dashboard.
- create: true
- blockMetrics:
- # -- Whether to create the block metrics dashboard.
- create: true
- blockLogs:
- # -- Whether to create the block logs dashboard.
- create: true
-# Check whether the installation of the Airlock Microgateway Helm Chart was successful.
-# Requires a secret with a valid Airlock Microgateway license key already to be present.
+ # -- Namespace in which the NetworkAttachmentDefinition is deployed.
+ # Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces
+ # may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation
+ namespace: default
+# Parameters for the CNI installer configuration.
+config:
+ # -- Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers),
+ # as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift)
+ # or in `manual` mode, where no CNI network configuration is written.
+ installMode: "chained"
+ # -- Log level for the CNI installer and plugin.
+ logLevel: info
+ # -- Directory where the CNI config files reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node.
+ cniNetDir: "/etc/cni/net.d"
+ # -- Directory where the CNI plugin binaries reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node.
+ cniBinDir: "/opt/cni/bin"
+ # -- Namespaces for which this CNI plugin should not apply any modifications.
+ excludeNamespaces:
+ - kube-system
tests:
# -- Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts).
# If set to false, `helm test` will not run any tests.
diff --git a/charts/airlock/microgateway/4.3.3/.helmignore b/charts/airlock/microgateway/4.3.3/.helmignore
index 101ff5ac5..8561d2892 100644
--- a/charts/airlock/microgateway/4.3.3/.helmignore
+++ b/charts/airlock/microgateway/4.3.3/.helmignore
@@ -21,8 +21,7 @@
.idea/
*.tmproj
.vscode/
-# CRDs kustomization.yaml
-/crds/kustomization.yaml
+
# Helm unit tests
/tests
/validation
diff --git a/charts/airlock/microgateway/4.3.3/Chart.yaml b/charts/airlock/microgateway/4.3.3/Chart.yaml
index c168f9d77..f22c19bb6 100644
--- a/charts/airlock/microgateway/4.3.3/Chart.yaml
+++ b/charts/airlock/microgateway/4.3.3/Chart.yaml
@@ -9,15 +9,15 @@ annotations:
- name: Airlock Microgateway Forum
url: https://forum.airlock.com/
catalog.cattle.io/certified: partner
- catalog.cattle.io/display-name: Airlock Microgateway
+ catalog.cattle.io/display-name: Airlock Microgateway CNI
catalog.cattle.io/kube-version: '>=1.25.0-0'
- catalog.cattle.io/release-name: microgateway
- charts.openshift.io/name: Airlock Microgateway
+ catalog.cattle.io/release-name: microgateway-cni
+ charts.openshift.io/name: Airlock Microgateway CNI
apiVersion: v2
appVersion: 4.3.3
-description: A Helm chart for deploying the Airlock Microgateway
+description: A Helm chart for deploying the Airlock Microgateway CNI plugin
home: https://www.airlock.com/en/microgateway
-icon: file://assets/icons/microgateway.svg
+icon: file://assets/icons/microgateway-cni.svg
keywords:
- WAF
- Web Application Firewall
@@ -30,14 +30,13 @@ keywords:
- Filtering
- DevSecOps
- shift left
-- control plane
-- Operator
+- CNI
kubeVersion: '>=1.25.0-0'
maintainers:
- email: support@airlock.com
name: Airlock
url: https://www.airlock.com/
-name: microgateway
+name: microgateway-cni
sources:
- https://github.com/airlock/microgateway
type: application
diff --git a/charts/airlock/microgateway/4.3.3/README.md b/charts/airlock/microgateway/4.3.3/README.md
index c98085da1..685c4f1f8 100644
--- a/charts/airlock/microgateway/4.3.3/README.md
+++ b/charts/airlock/microgateway/4.3.3/README.md
@@ -1,4 +1,4 @@
-# Airlock Microgateway
+# Airlock Microgateway CNI
![Version: 4.3.3](https://img.shields.io/badge/Version-4.3.3-informational?style=flat-square) ![AppVersion: 4.3.3](https://img.shields.io/badge/AppVersion-4.3.3-informational?style=flat-square)
@@ -40,58 +40,43 @@ Check the official documentation at **[docs.airlock.com](https://docs.airlock.co
The instructions below provide a quick start guide. Detailed information are provided in the **[manual](https://docs.airlock.com/microgateway/latest/)**.
## Prerequisites
-* [Airlock Microgateway CNI](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni)
-* [Airlock Microgateway License](#obtain-airlock-microgateway-license)
-* [cert-manager](https://cert-manager.io/)
* [helm](https://helm.sh/docs/intro/install/) (>= v3.8.0)
-In order to use Airlock Microgateway you need a license and the cert-manager. You may either request a community license free of charge or purchase a premium license.
-For an easy start in non-production environments, you may deploy the same cert-manager we are using internally for testing.
-### Obtain Airlock Microgateway License
-1. Either request a community or premium license
- * Community license: [airlock.com/microgateway-community](https://airlock.com/en/microgateway-community)
- * Premium license: [airlock.com/microgateway-premium](https://airlock.com/en/microgateway-premium)
-2. Check your inbox and save the license file microgateway-license.txt locally.
-
-> See [Community vs. Premium editions in detail](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) to choose the right license type.
-### Deploy cert-manager
-```bash
-helm repo add jetstack https://charts.jetstack.io
-helm install cert-manager jetstack/cert-manager --version '1.15.1' -n cert-manager --create-namespace --set crds.enabled=true --wait
-```
-
-## Deploy Airlock Microgateway Operator
-
-> This guide assumes a microgateway-license.txt file is present in the working directory.
-
-1. Install CRDs and Operator.
+## Deploy Airlock Microgateway CNI
+1. Install the CNI Plugin with Helm.
+ > **Note**: Certain environments such as OpenShift or GKE require non-default configurations when installing the CNI plugin. For the most common setups, values files are provided in the [chart folder](/deploy/charts/airlock-microgateway-cni).
```bash
- # Create namespace
- kubectl create namespace airlock-microgateway-system
-
- # Install License
- kubectl -n airlock-microgateway-system create secret generic airlock-microgateway-license --from-file=microgateway-license.txt
-
- # Install Operator (CRDs are included via the standard Helm 3 mechanism, i.e. Helm will handle initial installation but not upgrades)
- helm install airlock-microgateway -n airlock-microgateway-system oci://quay.io/airlockcharts/microgateway --version '4.3.3' --wait
+ # Standard setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.3.3'
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
```
+ ```bash
+ # GKE setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.3.3' -f https://raw.githubusercontent.com/airlock/microgateway/4.3.3/deploy/charts/airlock-microgateway-cni/gke-values.yaml
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ ```bash
+ # OpenShift setup
+ helm install airlock-microgateway-cni -n openshift-operators oci://quay.io/airlockcharts/microgateway-cni --version '4.3.3' -f https://raw.githubusercontent.com/airlock/microgateway/4.3.3/deploy/charts/airlock-microgateway-cni/openshift-values.yaml
+ kubectl -n openshift-operators rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ **Important:** On OpenShift, all pods which should be protected by Airlock Microgateway must explicitly reference the Airlock Microgateway CNI NetworkAttachmentDefinition via the annotation `k8s.v1.cni.cncf.io/networks` (see [documentation](https://docs.airlock.com/microgateway/latest/#data/1658483168033.html) for details).
2. (Recommended) You can verify the correctness of the installation with `helm test`.
```bash
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.3.3'
- helm test airlock-microgateway -n airlock-microgateway-system --logs
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.3.3'
+ # Standard and GKE setup
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.3'
+ helm test airlock-microgateway-cni -n kube-system --logs
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.3'
+ ```
+ ```bash
+ # OpenShift setup
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.3'
+ helm test airlock-microgateway-cni -n openshift-operators --logs
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.3'
```
-### Upgrading CRDs
-
-The `helm install/upgrade` command currently does not support upgrading CRDs that already exist in the cluster.
-CRDs should instead be manually upgraded before upgrading the Operator itself via the following command:
-```bash
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=4.3.3 --server-side --force-conflicts
-```
-
-**Note**: Certain GitOps solutions such as e.g. Argo CD or Flux CD have their own mechanisms for automatically upgrading CRDs included with Helm charts.
+ Consult our [documentation](https://docs.airlock.com/microgateway/latest/#data/1699611533587.html) in case of any installation error.
## Support
@@ -104,61 +89,33 @@ For the community edition, check our **[Airlock community forum](https://forum.a
| Key | Type | Default | Description |
|-----|------|---------|-------------|
+| affinity | object | `{}` | Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes. |
| commonAnnotations | object | `{}` | Annotations to add to all resources. |
| commonLabels | object | `{}` | Labels to add to all resources. |
-| crds.skipVersionCheck | bool | `false` | Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs. The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster when performing a "helm install/upgrade". |
-| dashboards.config.grafana.dashboardLabel.name | string | `"grafana_dashboard"` | Name of the label that lets Grafana identify ConfigMaps that represent dashboards. |
-| dashboards.config.grafana.dashboardLabel.value | string | `"1"` | Value of the label that lets Grafana identify ConfigMaps that represent dashboards. |
-| dashboards.config.grafana.folderAnnotation.name | string | `"grafana_folder"` | Name of the annotation containing the folder name to file dashboards into. |
-| dashboards.config.grafana.folderAnnotation.value | string | `"Airlock Microgateway"` | Name of the folder dashboards are filed into within the Grafana UI. |
-| dashboards.create | bool | `false` | Whether to create any ConfigMaps containing Grafana dashboards to import. |
-| dashboards.instances.blockLogs.create | bool | `true` | Whether to create the block logs dashboard. |
-| dashboards.instances.blockMetrics.create | bool | `true` | Whether to create the block metrics dashboard. |
-| dashboards.instances.license.create | bool | `true` | Whether to create the license dashboard. |
-| dashboards.instances.overview.create | bool | `true` | Whether to create the overview dashboard. |
-| engine.image.digest | string | `"sha256:3c0ebee0b560c8699723bfa433cd601b04b190c384e031d3789b83287fab7a9b"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| engine.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| engine.image.repository | string | `"quay.io/airlock/microgateway-engine"` | Image repository from which to pull the Airlock Microgateway Engine image. |
-| engine.image.tag | string | `"4.3.3"` | Image tag to pull. |
-| engine.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Engine container. |
-| engine.sidecar.podMonitor.create | bool | `false` | Whether to create a PodMonitor resource for monitoring. |
-| engine.sidecar.podMonitor.labels | object | `{}` | Labels to add to the PodMonitor. |
+| config.cniBinDir | string | `"/opt/cni/bin"` | Directory where the CNI plugin binaries reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node. |
+| config.cniNetDir | string | `"/etc/cni/net.d"` | Directory where the CNI config files reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node. |
+| config.excludeNamespaces | list | `["kube-system"]` | Namespaces for which this CNI plugin should not apply any modifications. |
+| config.installMode | string | `"chained"` | Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers), as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. |
+| config.logLevel | string | `"info"` | Log level for the CNI installer and plugin. |
| fullnameOverride | string | `""` | Allows overriding the name to use as full name of resources. |
+| image.digest | string | `"sha256:16317b9a8430059c15175673ad53e31d9e882a1d1af6576214eb1534d8ea6937"` | SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a"). Overrides tag when specified. |
+| image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| image.repository | string | `"quay.io/airlock/microgateway-cni"` | Image repository from which to pull the Airlock Microgateway CNI image. |
+| image.tag | string | `"4.3.3"` | Image tag to pull. |
| imagePullSecrets | list | `[]` | ImagePullSecrets to use when pulling images. |
-| license.secretName | string | `"airlock-microgateway-license"` | Name of the secret containing the "microgateway-license.txt" key. |
-| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway". |
-| networkValidator.image.digest | string | `"sha256:6051975a14c51b9d3b525a06004d62a4d323c08ca58e3468343095a55a42fff2"` | SHA256 image digest to pull (in the format "sha256:6051975a14c51b9d3b525a06004d62a4d323c08ca58e3468343095a55a42fff2"). Overrides tag when specified. |
-| networkValidator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| networkValidator.image.repository | string | `"cgr.dev/chainguard/netcat"` | Image repository from which to pull the netcat image for the Airlock Microgateway Network Validator init-container. |
-| networkValidator.image.tag | string | `""` | Image tag to pull. |
-| operator.affinity | object | `{}` | Custom affinity to apply to the operator Deployment. Used to influence the scheduling. |
-| operator.config.logLevel | string | `"info"` | Operator application log level. |
-| operator.image.digest | string | `"sha256:6d3ebca355de0a67f0bf5f088a15b9410564e500033d3e1f534a2f49a05bf4c3"` | SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63"). Overrides tag when specified. |
-| operator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| operator.image.repository | string | `"quay.io/airlock/microgateway-operator"` | Image repository from which to pull the Airlock Microgateway Operator image. |
-| operator.image.tag | string | `"4.3.3"` | Image tag to pull. |
-| operator.nodeSelector | object | `{}` | Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes. |
-| operator.podAnnotations | object | `{}` | Annotations to add to all Pods. |
-| operator.podLabels | object | `{}` | Labels to add to all Pods. |
-| operator.rbac.create | bool | `true` | Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function. |
-| operator.replicaCount | int | `2` | Number of replicas for the operator Deployment. |
-| operator.resources | object | `{}` | Resource restrictions to apply to the operator container. |
-| operator.serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
-| operator.serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
-| operator.serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
-| operator.serviceAnnotations | object | `{}` | Annotations to add to the Service. |
-| operator.serviceLabels | object | `{}` | Labels to add to the Service. |
-| operator.serviceMonitor.create | bool | `false` | Whether to create a ServiceMonitor resource for monitoring. |
-| operator.serviceMonitor.labels | object | `{}` | Labels to add to the ServiceMonitor. |
-| operator.tolerations | list | `[]` | Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes. |
-| operator.updateStrategy | object | `{"type":"RollingUpdate"}` | Specifies the operator update strategy. |
-| operator.watchNamespaceSelector | object | `{}` | Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector. It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator. This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings). An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty. Please note that this feature requires a Premium license. |
-| operator.watchNamespaces | list | `[]` | Allows to restrict the operator to specific namespaces, depending on your needs. For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`). In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace. For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`. An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty. Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces. Please note that this feature requires a Premium license. |
-| sessionAgent.image.digest | string | `"sha256:994bf4117adb74da4e05c22ffc168d9844bc68efa6a7fb96d73e849d1ef67b56"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| sessionAgent.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| sessionAgent.image.repository | string | `"quay.io/airlock/microgateway-session-agent"` | Image repository from which to pull the Airlock Microgateway Session Agent image. |
-| sessionAgent.image.tag | string | `"4.3.3"` | Image tag to pull. |
-| sessionAgent.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Session Agent container. |
+| multusNetworkAttachmentDefinition.create | bool | `false` | Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods. |
+| multusNetworkAttachmentDefinition.namespace | string | `"default"` | Namespace in which the NetworkAttachmentDefinition is deployed. Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation |
+| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway-cni". |
+| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes. |
+| podAnnotations | object | `{}` | Annotations to add to all Pods. |
+| podLabels | object | `{}` | Labels to add to all Pods. |
+| privileged | bool | `false` | Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift). |
+| rbac.create | bool | `true` | Whether to create RBAC resources which are required for the CNI plugin to function. |
+| rbac.createSCCRole | OpenShift | `false` | Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint. |
+| resources | object | `{"requests":{"cpu":"10m","memory":"100Mi"}}` | Resource restrictions to apply to the CNI installer container. |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
+| serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
+| serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
| tests.enabled | bool | `false` | Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts). If set to false, `helm test` will not run any tests. |
## License
diff --git a/charts/airlock/microgateway/4.3.3/app-readme.md b/charts/airlock/microgateway/4.3.3/app-readme.md
deleted file mode 100644
index e32cac025..000000000
--- a/charts/airlock/microgateway/4.3.3/app-readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Airlock Microgateway
-
-*Airlock Microgateway is a Kubernetes native WAAP (Web Application and API Protection) solution to protect microservices.*
-
-## Features
-* Kubernetes native integration with its Operator, Custom Resource Definitions, hot-reload, automatic sidecar injection.
-* Reverse proxy functionality with request routing rules, TLS termination and remote IP extraction
-* Using native Envoy HTTP filters like Lua scripting, RBAC, ext_authz, JWT authentication
-* Content security filters for protecting against known attacks (OWASP Top 10)
-* Access control to allow only authenticated users to access the protected services
-* API security features like JSON parsing or OpenAPI specification enforcement
-
-For a list of all features, view the **[comparison of the community and premium edition](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html)**.
-
-## Requirements
-* [Airlock Microgateway CNI Helm Chart](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni) (Also available as Rancher Chart)
-* [Airlock Microgateway License](https://github.com/airlock/microgateway?tab=readme-ov-file#obtain-airlock-microgateway-license) (After obtaining the license install it according to the [documentation](https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-operator))
-* [cert-manager](https://cert-manager.io/docs/installation/)
-
-## Documentation and links
-
-Check the official documentation at **[docs.airlock.com](https://docs.airlock.com/microgateway/latest/)** or the product website at **[airlock.com/microgateway](https://www.airlock.com/en/microgateway)**. The links below point out the most interesting documentation sites when starting with Airlock Microgateway.
-
-* [Getting Started](https://docs.airlock.com/microgateway/latest/#data/1660804708742.html)
-* [System Architecture](https://docs.airlock.com/microgateway/latest/#data/1660804709650.html)
-* [Installation](https://docs.airlock.com/microgateway/latest/#data/1660804708637.html)
-* [Troubleshooting](https://docs.airlock.com/microgateway/latest/#data/1659430054787.html)
-* [GitHub](https://github.com/airlock/microgateway)
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/crds/accesscontrols.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/accesscontrols.microgateway.airlock.com.yaml
deleted file mode 100644
index b6f1ab384..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/accesscontrols.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,124 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: accesscontrols.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: AccessControl
- listKind: AccessControlList
- plural: accesscontrols
- singular: accesscontrol
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: AccessControl specifies the options to perform access control with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies how the Airlock Microgateway Engine performs access control.
- properties:
- policies:
- description: Policies configures access control policies.
- items:
- properties:
- authorization:
- description: Authorization configures how requests are authorized. An empty object value {} disables authorization.
- properties:
- authentication:
- description: Authentication specifies that clients need to be authenticated with the provided method.
- properties:
- oidc:
- description: OIDC configures client authentication using OpenID Connect.
- properties:
- oidcRelyingPartyRef:
- description: OIDCRelyingPartyRef configures how the Airlock Microgateway Engine interacts with the OpenID provider.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - oidcRelyingPartyRef
- type: object
- type: object
- type: object
- identityPropagation:
- description: IdentityPropagation configures how the authenticated user's identity is communicated to the protected application.
- properties:
- actions:
- description: Actions specifies the propagation actions.
- items:
- properties:
- identityPropagationRef:
- description: IdentityPropagationRef selects an IdentityPropagation to apply.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - identityPropagationRef
- type: object
- type: array
- onFailure:
- description: |-
- OnFailure configures what should happen, if an identity propagation fails. Meaning of the possible values:
- _Pass_: The request should be forwarded to the upstream, without including the information from the failed identity propagations.
- enum:
- - Pass
- type: string
- required:
- - actions
- - onFailure
- type: object
- required:
- - authorization
- type: object
- maxItems: 1
- minItems: 1
- type: array
- required:
- - policies
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/contentsecurities.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/contentsecurities.microgateway.airlock.com.yaml
deleted file mode 100644
index 05e059f8a..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/contentsecurities.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,139 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: contentsecurities.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: ContentSecurity
- listKind: ContentSecurityList
- plural: contentsecurities
- singular: contentsecurity
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: ContentSecurity specifies the options to secure an upstream web application with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies the options to secure an upstream web application with a Microgateway Engine container.
- properties:
- apiProtection:
- description: |-
- APIProtection defines the relevant configurations to protect APIs.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- graphQLRef:
- description: |-
- GraphQLRef selects the relevant GraphQL configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- openAPIRef:
- description: |-
- OpenAPIRef selects the relevant OpenAPI configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- filter:
- description: |-
- Filter defines the set of filters, e.g. Airlock Deny Rules, to be applied to incoming requests
- to protect against various attack patterns.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- denyRulesRef:
- description: |-
- DenyRulesRef selects the relevant DenyRules configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- headerRewritesRef:
- description: |-
- HeaderRewritesRef selects the relevant HeaderRewrites.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- limitsRef:
- description: |-
- LimitsRef selects the relevant Limits configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- parserRef:
- description: |-
- ParserRef selects the relevant Parser configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/denyrules.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/denyrules.microgateway.airlock.com.yaml
deleted file mode 100644
index fddaa375d..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/denyrules.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,1804 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: denyrules.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: DenyRules
- listKind: DenyRulesList
- plural: denyrules
- singular: denyrules
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- DenyRules configures request filtering using Airlock built-in and custom deny rules.
- Deny rules establish a negative security model. They define prohibited patterns which, when a match is found in a request, lead to it being blocked from reaching the upstream web application.
- To handle possible false positives, lower the security level or define fine-granular deny rule exceptions
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired deny rules behavior.
- properties:
- request:
- description: Request configures deny rules for downstream requests.
- properties:
- builtIn:
- description: BuiltIn configures the built-in deny rules.
- properties:
- exceptions:
- description: Exceptions allows to define exceptions for specific requests and deny rules.
- items:
- description: |-
- DenyRulesException defines an exception for deny rules. Exceptions may be defined by any or a combination of the following elements: blockedData (the request data causing a block) or requestConditions (properties of a request without taking into consideration the reason why a request has been blocked).
- At least one of blockedData and requestConditions must be set.
- properties:
- blockedData:
- description: BlockedData defines an exception based on the request data causing the block.
- properties:
- graphQL:
- description: |-
- GraphQL defines an exception based on a blocked GraphQL query.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- argument:
- description: |-
- Argument defines an argument of a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field defines a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of an argument of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- header:
- description: |-
- Header defines an exception based on a blocked header.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: |-
- JSON defines an exception based on a blocked JSON property.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- jsonPath:
- description: |-
- JSONPath defines the JSONPath pattern to match the path within the JSON.
- Expressions in JSONPath i.e. `?(expr)` are not supported.
- minLength: 1
- type: string
- key:
- description: |-
- Key defines the key of the JSON property.
- At most one of key and value can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of the JSON property.
- At most one of key and value can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- parameter:
- description: |-
- Parameter defines an exception based on a blocked parameter.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- name:
- description: Name defines the name of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- source:
- default: Any
- description: Source defines the source of the parameter.
- enum:
- - Query
- - Post
- - Any
- type: string
- value:
- description: Value defines the value of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- path:
- description: |-
- Path defines an exception based on the blocked path.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- pathSegment:
- description: |-
- PathSegment defines an exception based on a blocked path segment.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- segments:
- description: Segments defines the position of a segment within the path.
- properties:
- index:
- description: Index specifies an exact path segment position by index (0-based).
- minimum: 0
- type: integer
- type: object
- value:
- description: Value defines the value of a path segment.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines an exception based on a property of a request without taking into consideration the reason why a request has been blocked.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- ruleKeys:
- description: RuleKeys restricts the exception to a set of deny rules.
- items:
- description: |-
- A deny rule name can be any of the following values:
- ENCODING |
- EXPLOIT |
- HPP |
- HTML |
- IDOR |
- LDAP |
- NOSQL |
- OGNL |
- PHP |
- PROTOCOL |
- SANITY |
- SCANNING |
- SQL |
- TEMPLATE |
- UNIXCMD |
- WINCMD |
- XSS
- enum:
- - ENCODING
- - EXPLOIT
- - HPP
- - HTML
- - IDOR
- - LDAP
- - NOSQL
- - OGNL
- - PHP
- - PROTOCOL
- - SANITY
- - SCANNING
- - SQL
- - TEMPLATE
- - UNIXCMD
- - WINCMD
- - XSS
- type: string
- minItems: 1
- type: array
- type: object
- type: array
- overrides:
- description: Overrides allows to override the builtIn settings for specific deny rules.
- items:
- description: DenyRulesOverride allows to override the builtIn settings for specific deny rules.
- properties:
- conditions:
- description: Conditions select which built-in deny rules' settings will be adjusted.
- properties:
- ruleKeys:
- description: RuleKeys is a list of built-in deny rule names.
- items:
- description: |-
- A deny rule name can be any of the following values:
- ENCODING |
- EXPLOIT |
- HPP |
- HTML |
- IDOR |
- LDAP |
- NOSQL |
- OGNL |
- PHP |
- PROTOCOL |
- SANITY |
- SCANNING |
- SQL |
- TEMPLATE |
- UNIXCMD |
- WINCMD |
- XSS
- enum:
- - ENCODING
- - EXPLOIT
- - HPP
- - HTML
- - IDOR
- - LDAP
- - NOSQL
- - OGNL
- - PHP
- - PROTOCOL
- - SANITY
- - SCANNING
- - SQL
- - TEMPLATE
- - UNIXCMD
- - WINCMD
- - XSS
- type: string
- minItems: 1
- type: array
- types:
- description: Types defines the type of attributes the override should be applied on. If Types are defined without any RuleKeys the override is applied to all deny rules.
- items:
- description: |-
- A deny rule override type name can be any of the following values:
- Header |
- Parameter |
- Path |
- JSON |
- GraphQL
- enum:
- - Header
- - Parameter
- - Path
- - PathSegment
- - JSON
- - GraphQL
- type: string
- minItems: 0
- type: array
- type: object
- settings:
- description: Settings override the corresponding properties for the selected rules.
- properties:
- level:
- description: Level specifies the filter strength.
- enum:
- - Unfiltered
- - Basic
- - Standard
- - Strict
- type: string
- threatHandlingMode:
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: array
- settings:
- description: Settings contains the keys which will be adjusted.
- properties:
- level:
- default: Standard
- description: Level represents a set of deny rules with different filter strengths.
- enum:
- - Unfiltered
- - Basic
- - Standard
- - Strict
- type: string
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a deny rule matches.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- custom:
- description: Custom allows configuring additional deny rules.
- properties:
- rules:
- description: Rules defines list of additional deny rules.
- items:
- properties:
- blockData:
- description: BlockData specifies the request data which should cause a block.
- properties:
- graphQL:
- description: |-
- GraphQL specifies to block requests containing a matching GraphQL property.
- At least one of field, argument and value must be set.
- properties:
- argument:
- description: |-
- Argument defines an argument of a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field defines a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of an argument of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- header:
- description: |-
- Header specifies to block requests containing a matching header.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: |-
- JSON specifies to block requests containing a matching JSON property in the body.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- key:
- description: Key defines the key of a JSON object.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a JSON object.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- parameter:
- description: |-
- Parameter specifies to block requests containing a matching parameter.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- path:
- description: |-
- Path specifies to block requests with a matching path.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- matcher:
- description: Matcher specifies which path to block.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- pathSegment:
- description: |-
- PathSegment specifies to block requests containing a matching path segment.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- segments:
- description: |-
- Segments restricts which path segments are filtered by this rule.
- If not specified, all segments of a path are filtered.
- properties:
- index:
- description: Index restricts the rule to the path segment at this index (0-based).
- minimum: 0
- type: integer
- type: object
- value:
- description: Value specifies which path segment values to block.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- required:
- - value
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this rule to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- ruleKey:
- description: RuleKey defines a technical key for the deny rule. Must be unique.
- minLength: 1
- pattern: ^[A-Z][A-Z0-9_]*$
- type: string
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a deny rule matches.
- enum:
- - Block
- - LogOnly
- type: string
- required:
- - blockData
- - ruleKey
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - ruleKey
- x-kubernetes-list-type: map
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/envoyclusters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/envoyclusters.microgateway.airlock.com.yaml
deleted file mode 100644
index bb564f942..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/envoyclusters.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: envoyclusters.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyCluster
- listKind: EnvoyClusterList
- plural: envoyclusters
- singular: envoycluster
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: EnvoyCluster is an additional Envoy Cluster resource which is added to those defined by the Airlock Microgateway.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired additional Envoy cluster.
- properties:
- value:
- description: Value defines the Envoy Cluster which is added to those configured by the Airlock Microgateway.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/envoyconfigurations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/envoyconfigurations.microgateway.airlock.com.yaml
deleted file mode 100644
index b6147ae08..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/envoyconfigurations.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: envoyconfigurations.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyConfiguration
- listKind: EnvoyConfigurationList
- plural: envoyconfigurations
- singular: envoyconfiguration
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .status.status
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- EnvoyConfiguration is the Schema for the envoyconfigurations API
- {{% notice warning %}} EnvoyConfiguration resources may contain sensitive information and thus RBAC permissions should be granted with care. {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: EnvoyConfigurationSpec defines the desired state of EnvoyConfiguration
- properties:
- envoyResources:
- properties:
- clusters:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- endpoints:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- extensions:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- listeners:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- routes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- runtimes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- scopedRoutes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- secrets:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- type: object
- envoyResourcesRaw:
- description: |-
- EnvoyResourcesRaw defines the desired state for each resource type. The resources are stored as zstd compressed JSON bytes.
- For debugging purposes, the resources can be inspected with the following command: `kubectl get envoyconfiguration -ojsonpath='{.spec.envoyResourcesRaw}' | base64 -d | zstd -d | jq`
- format: byte
- type: string
- nodeID:
- description: '**Deprecated:** This field is now ignored as NodeID is always derived from the resource name.'
- type: string
- type: object
- status:
- description: EnvoyConfigurationStatus defines the observed state of EnvoyConfiguration
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- description: Last time the condition transitioned from one status to another.
- format: date-time
- type: string
- message:
- description: A human-readable message indicating details about the transition.
- type: string
- reason:
- description: The reason for the condition's last transition.
- type: string
- status:
- description: Status of the condition, one of True, False, Unknown.
- type: string
- type:
- description: Type of EnvoyConfiguration condition.
- type: string
- required:
- - status
- - type
- type: object
- type: array
- status:
- type: string
- xds:
- properties:
- resourceTypes:
- additionalProperties:
- description: XdsResourceTypeSyncStatus defines the sync status of xDS for a specific resource type
- properties:
- errorMessage:
- description: ErrorMessage defines an optional message why the currently served resources of this resource type are rejected by the client.
- type: string
- resources:
- additionalProperties:
- description: XdsResourceStatus defines the status of xDS for a specific resource
- properties:
- version:
- description: Version defines the version which is currently served for this resource.
- type: string
- required:
- - version
- type: object
- description: Resources defines the resources which are currently served for this resource type.
- type: object
- status:
- description: Status defines the current sync status of this resource type.
- type: string
- version:
- description: Version defines the version which is currently served for this resource type.
- type: string
- required:
- - resources
- - status
- - version
- type: object
- description: ResourceTypes defines the sync statuses for each resource type.
- type: object
- version:
- description: Version defines the version of the underlying xDS snapshot.
- type: integer
- required:
- - version
- type: object
- required:
- - status
- - xds
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/envoyhttpfilters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/envoyhttpfilters.microgateway.airlock.com.yaml
deleted file mode 100644
index c5eaad364..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/envoyhttpfilters.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: envoyhttpfilters.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyHTTPFilter
- listKind: EnvoyHTTPFilterList
- plural: envoyhttpfilters
- singular: envoyhttpfilter
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: EnvoyHTTPFilter is an additional Envoy HTTP Filter resource which is added to those defined by the Airlock Microgateway.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired additional Envoy HTTP filter.
- properties:
- value:
- description: Value defines the HTTP filter which is added to those configured by the Airlock Microgateway.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/headerrewrites.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/headerrewrites.microgateway.airlock.com.yaml
deleted file mode 100644
index a9f832a2b..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/headerrewrites.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,759 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: headerrewrites.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: HeaderRewrites
- listKind: HeaderRewritesList
- plural: headerrewrites
- singular: headerrewrites
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: HeaderRewrites is the Schema for the headerrewrites API
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired header rewriting behavior.
- properties:
- request:
- description: Request defines manipulations on upstream request headers.
- properties:
- add:
- description: Add defines which request headers will be added before forwarding to the upstream.
- properties:
- custom:
- description: |-
- Custom allows configuring additional upstream request headers.
- Add selected headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which request headers will be forwarded to the upstream.
- This can either be allHeaders or matchingHeaders.
- Default: matchingHeaders: {...}
- properties:
- allHeaders:
- description: AllHeaders specifies that all request headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which request headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- standardHeaders:
- default: true
- description: StandardHeaders defines whether the request headers which are forwarded to the upstream will be restricted to a set of common request headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which request headers will be removed before forwarding to the upstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- alternativeForwardedHeaders:
- default: true
- description: |-
- AlternativeForwardedHeaders removes downstream request headers which could potentially
- be abused to alter the upstream's view of the remote connection.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- response:
- description: Response defines manipulations on upstream response headers.
- properties:
- add:
- description: Add defines which response headers will be added before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- csp:
- default: true
- description: |-
- CSP sets a content security policy which allows only same-origin requests except for images
- if the 'Content-Security-Policy' header is not set by the upstream.
- type: boolean
- featurePolicy:
- default: false
- description: |-
- FeaturePolicy sets a feature policy which prevents cross-origin use of several browser features
- if the 'Feature-Policy' header is not set by the upstream.
- **Deprecated:** Use permissionsPolicy instead.
- type: boolean
- hsts:
- default: true
- description: HSTS enforces the use of HTTPS if the 'Strict-Transport-Security' header is not already set by the upstream.
- type: boolean
- hstsPreload:
- default: false
- description: HSTSPreload enforces the use of HTTPS including for subdomains and enables HSTS preload.
- type: boolean
- permissionsPolicy:
- default: true
- description: |-
- PermissionsPolicy sets a permissions policy which prevents cross-origin use of several browser features
- if the 'Permissions-Policy' header is not set by the upstream.
- type: boolean
- referrerPolicy:
- default: true
- description: |-
- ReferrerPolicy ensures that no 'Referer' header is sent for cross-origin requests
- if the 'Referrer-Policy' header is not set by the upstream.
- type: boolean
- xContentTypeOptions:
- default: true
- description: XContentTypeOptions sets 'X-Content-Type-Options' to 'nosniff' if it is not set by the upstream.
- type: boolean
- xFrameOptions:
- default: true
- description: XFrameOptions sets 'X-Frame-Options' to SAMEORIGIN if it is not set by the upstream.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which response headers will be forwarded to the downstream.
- This can either be allHeaders or matchingHeaders.
- Default: allHeaders: {}
- properties:
- allHeaders:
- description: AllHeaders specifies that all response headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which response headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response header.
- properties:
- standardHeaders:
- default: false
- description: StandardHeaders defines whether the response headers which are forwarded to the downstream will be restricted to a set of common response headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which response headers will be removed before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- auth:
- description: Auth defines the categories of headers concerning authentication.
- properties:
- basic:
- default: false
- description: Basic removes upstream response headers that advise clients to authenticate with Basic Authentication.
- type: boolean
- negotiate:
- default: true
- description: Negotiate removes upstream response headers that advise clients to authenticate with Negotiate.
- type: boolean
- ntlm:
- default: true
- description: |-
- NTLM removes upstream response headers that advise clients to authenticate with NTLM.
- By default, these headers are removed, because NTLM pass-through is not supported.
- type: boolean
- type: object
- informationLeakage:
- description: InformationLeakage defines the categories of headers concerning information leakage.
- properties:
- application:
- default: true
- description: Application removes upstream response headers that leak information about the deployed software.
- type: boolean
- server:
- default: true
- description: Server removes upstream response headers that leak information about the server.
- type: boolean
- type: object
- permissiveCors:
- default: true
- description: PermissiveCORS removes upstream response headers for CORS (Cross-Origin Resource Sharing) which have no restrictions and therefore reduce client-side security.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured remove operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- settings:
- description: Settings configures the HeaderRewrites filter.
- properties:
- operationalMode:
- default: Production
- description: OperationalMode defines the behavior of the filter. In integration mode more information is logged about the requests and responses.
- enum:
- - Production
- - Integration
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.3/crds/identitypropagations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/identitypropagations.microgateway.airlock.com.yaml
deleted file mode 100644
index 4610fe8b8..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/identitypropagations.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: identitypropagations.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: IdentityPropagation
- listKind: IdentityPropagationList
- plural: identitypropagations
- singular: identitypropagation
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: IdentityPropagation specifies the desired identity propagation.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired identity propagation.
- properties:
- header:
- description: Header configures identity propagation via a request header.
- properties:
- name:
- description: Name of the header to set.
- minLength: 1
- type: string
- value:
- description: Value to propagate to the application.
- properties:
- source:
- description: Source from which to extract the value.
- properties:
- metadata:
- description: Metadata specifies to extract a value from an Envoy dynamic filter metadata key.
- properties:
- key:
- description: Key specifies the metadata key from which to load the value, e.g. `some_payload.aud`.
- minLength: 1
- type: string
- namespace:
- description: Namespace specifies the metadata namespace within which the lookup should be performed, e.g. `envoy.filters.http.jwt_authn`.
- minLength: 1
- type: string
- required:
- - key
- - namespace
- type: object
- oidc:
- description: OIDC specifies to extract a value from the result of an OpenID Connect flow.
- properties:
- idToken:
- description: IDToken specifies to extract the value from the OpenID Connect ID Token.
- properties:
- claim:
- description: Claim selects the JWT claim from which to extract the value.
- minLength: 1
- type: string
- required:
- - claim
- type: object
- required:
- - idToken
- type: object
- type: object
- required:
- - source
- type: object
- required:
- - name
- - value
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/limits.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/limits.microgateway.airlock.com.yaml
deleted file mode 100644
index 727b02496..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/limits.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,651 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: limits.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Limits
- listKind: LimitsList
- plural: limits
- singular: limits
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Limits contains the configuration for limits.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired limits behavior.
- properties:
- request:
- description: Request defines the limits for requests.
- properties:
- limited:
- description: Limited enables limits on request scope.
- properties:
- exceptions:
- description: Exceptions defines limit exceptions.
- items:
- description: LimitsException defines an exception for limits.
- properties:
- length:
- description: Length defines an exception for length limits based on the data element exceeding the limit.
- properties:
- graphQL:
- description: GraphQL defines a field, argument or value length limit exception for a GraphQL query.
- properties:
- argument:
- description: |-
- Argument restricts the exception to GraphQL queries with a matching argument of a field.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field restricts the exception to GraphQL queries with a matching field.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value restricts the exception to GraphQL queries with a matching argument value.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: JSON defines a key and value length limit exception for a JSON property.
- properties:
- jsonPath:
- description: |-
- JSONPath restricts the exception to JSON properties with a matching JSONPath.
- Expressions in JSONPath i.e. `?(expr)` are not supported.
- minLength: 1
- type: string
- required:
- - jsonPath
- type: object
- parameter:
- description: Parameter defines a name and value length limit exception for a parameter.
- properties:
- name:
- description: Name restricts the exception to parameters with a matching name.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- source:
- default: Any
- description: Source restricts the exception to parameters of this kind.
- enum:
- - Query
- - Post
- - Any
- type: string
- required:
- - name
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this exception to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- type: object
- type: array
- general:
- description: General defines general request limits.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Mi
- description: BodySize limits the total size of the request body. It specifies the number of bytes (0 = unlimited). This limit is effective for any request not processed by one of the content parsers (e.g. json) as configured in the Parser CRD. **Note** This limit does not apply to WebSocket or gRPC traffic.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- pathLength:
- anyOf:
- - type: integer
- - type: string
- default: 1Ki
- description: PathLength defines the maximum path length for all requests (parsed and unparsed).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- graphQL:
- description: GraphQL defines the limits for GraphQL requests.
- properties:
- nestingDepth:
- default: 10
- description: NestingDepth defines the maximum depth of nesting for GraphQL objects.
- format: int64
- type: integer
- querySize:
- anyOf:
- - type: integer
- - type: string
- default: 1Ki
- description: QuerySize defines the maximum size for GraphQL queries.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: "256"
- description: ValueLength defines the maximum length for GraphQL values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- json:
- description: JSON defines the limits for JSON requests.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Ki
- description: BodySize limits the total size of the JSON request body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- elementCount:
- default: 10000
- description: ElementCount defines the maximum number of keys and array items in the whole JSON document (recursive).
- format: int64
- type: integer
- keyCount:
- default: 250
- description: KeyCount defines the maximum number of keys of a single JSON object (non-recursive).
- format: int64
- type: integer
- keyLength:
- anyOf:
- - type: integer
- - type: string
- default: "128"
- description: KeyLength defines the maximum length for JSON keys.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- nestingDepth:
- default: 100
- description: NestingDepth defines the maximum depth of nesting for JSON objects and JSON arrays.
- format: int64
- type: integer
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: 8Ki
- description: ValueLength defines the maximum length for JSON values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- multipart:
- description: Multipart defines the limits for Multipart requests.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Mi
- description: BodySize limits the total size of the Multipart request body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- parameter:
- description: Parameter defines the limits for request parameters.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Ki
- description: BodySize limits the total size of the form data body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- count:
- default: 128
- description: Count defines the maximum number of request parameters.
- format: int64
- type: integer
- nameLength:
- anyOf:
- - type: integer
- - type: string
- default: "128"
- description: NameLength defines the maximum length for parameter names.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: 8Ki
- description: ValueLength defines the maximum length for parameter values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- unlimited:
- description: Unlimited disables all limits on request scope.
- type: object
- type: object
- settings:
- description: Settings configures the limits filter.
- properties:
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a limit hits.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.3/crds/oidcproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/oidcproviders.microgateway.airlock.com.yaml
deleted file mode 100644
index 74acbf4da..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/oidcproviders.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,305 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: oidcproviders.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OIDCProvider
- listKind: OIDCProviderList
- plural: oidcproviders
- singular: oidcprovider
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- OIDCProvider specifies an OpenID Provider (OP).
-
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - Sessions are always shared across all Microgateway Engines using the same Redis instance.
- I.e. if application A and B (with different SidecarGateways) have the same Redis instance configured in their SessionHandling CR, users which are logged into application A
- may be able to access authenticated routes on application B, even if their OIDCRelyingParty configuration differs.
-
-
- {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of an OpenID Provider.
- properties:
- static:
- description: Static configures an OpenID Provider by explicitly specifying all endpoints.
- properties:
- endpoints:
- description: Endpoints specifies the OpenID Provider endpoints.
- properties:
- authorization:
- description: Authorization specifies the endpoint to which the authorization request is sent.
- properties:
- uri:
- description: URI specifies the endpoint address.
- format: uri
- minLength: 1
- pattern: ^(http|https)://.*$
- type: string
- required:
- - uri
- type: object
- token:
- description: Token configures the endpoint from which the access, ID and refresh tokens are obtained.
- properties:
- tls:
- description: TLS defines TLS settings.
- properties:
- certificateVerification:
- description: CertificateVerification specifies how the certificate presented by the server is verified.
- properties:
- custom:
- description: |-
- Custom explicitly specifies how the server certificate should be verified.
- Typical use cases include specifying a custom CA and SAN match when working with self-signed certificates or pinning a specific public key.
- properties:
- allowedSANs:
- description: |-
- AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
- that is to say, the SAN is verified if at least one matcher is matched.
- AllowedSANs requires trustedCA to be set.
- items:
- description: |-
- TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers.
- properties:
- matcher:
- description: Matcher defines the string matcher for the SAN value.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- sanType:
- description: SanType defines the type of SAN matcher.
- enum:
- - DNS
- - Email
- - URI
- - IPAddress
- type: string
- required:
- - matcher
- - sanType
- type: object
- minItems: 1
- type: array
- certificatePinning:
- description: |-
- CertificatePinning defines constraints the presented certificate must fulfill.
- If more than one constraint is configured only one must be satisfied.
- At least one of allowedSPKIs and allowedHashes must be set.
- properties:
- allowedHashes:
- description: |-
- AllowedHashes is a list of hex-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- allowedSPKIs:
- description: |-
- AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- type: object
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- type: object
- disabled:
- description: |-
- Disabled specifies to trust any certificate without verification.
- THIS IS INSECURE AND SHOULD ONLY BE USED FOR TESTING.
- type: object
- publicCAs:
- description: PublicCAs specifies to only accept certificates with a SAN matching "uri" and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Engine's base image.
- type: object
- type: object
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- type: object
- uri:
- description: URI specifies the endpoint address.
- format: uri
- minLength: 1
- pattern: ^(http|https)://.*$
- type: string
- required:
- - uri
- type: object
- required:
- - authorization
- - token
- type: object
- required:
- - endpoints
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/oidcrelyingparties.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/oidcrelyingparties.microgateway.airlock.com.yaml
deleted file mode 100644
index baa26ebcc..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/oidcrelyingparties.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,224 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: oidcrelyingparties.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OIDCRelyingParty
- listKind: OIDCRelyingPartyList
- plural: oidcrelyingparties
- singular: oidcrelyingparty
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- OIDCRelyingParty specifies how the Airlock Microgateway Engine interacts with an OpenID Provider (OP).
-
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - Sessions are always shared across all Microgateway Engines using the same Redis instance.
- I.e. if application A and B (with different SidecarGateways) have the same Redis instance configured in their SessionHandling CR, users which are logged into application A
- may be able to access authenticated routes on application B, even if their OIDCRelyingParty configuration differs.
-
-
- {{% /notice %}}
- {{% notice info %}} The OIDC feature requires SessionHandling to be configured in the SidecarGateway. {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the OIDC Relying Party configuration.
- properties:
- clientID:
- description: ClientID specifies the OIDCRelyingParty "client_id".
- minLength: 1
- type: string
- credentials:
- description: Credentials used for client authentication on the back-channel with the authorization server.
- properties:
- clientSecret:
- description: ClientSecret authenticates with the client password issued by the OpenID Provider (OP).
- properties:
- method:
- default: BasicAuth
- description: Method specifies in which format the client secret is sent with the authorization request.
- enum:
- - BasicAuth
- - FormURLEncoded
- type: string
- secretRef:
- description: SecretRef specifies the kubernetes secret containing the client password with key "client.secret".
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- required:
- - clientSecret
- type: object
- oidcProviderRef:
- description: OIDCProviderRef selects the OpenID Provider (OP) used to authenticate users.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- pathMapping:
- description: PathMapping configures the action matching.
- properties:
- logoutPath:
- description: LogoutPath specifies which request paths should initiate a logout.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- redirectPath:
- description: RedirectPath specifies which request paths should be interpreted as a response from the authorization endpoint.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- required:
- - logoutPath
- - redirectPath
- type: object
- redirectURI:
- description: |-
- RedirectURI configures the "redirect_uri" parameter included in the authorization request.
- May contain envoy command operators, e.g. '%REQ(:x-forwarded-proto)%://%REQ(:authority)%/callback'.
- minLength: 1
- type: string
- required:
- - clientID
- - credentials
- - oidcProviderRef
- - pathMapping
- - redirectURI
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/openapis.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/openapis.microgateway.airlock.com.yaml
deleted file mode 100644
index 1c0928710..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/openapis.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,167 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: openapis.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OpenAPI
- listKind: OpenAPIList
- plural: openapis
- singular: openapi
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: OpenAPI contains the configuration for the OpenAPI specification.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired OpenAPI specification.
- properties:
- response:
- description: Response defines the validation behaviour for responses.
- properties:
- secured:
- description: Secured enables response checking.
- properties:
- validation:
- default: Lax
- description: Validation defines the validation mode for responses.
- enum:
- - Lax
- - Strict
- type: string
- type: object
- unsecured:
- description: Unsecured disables response checking.
- type: object
- type: object
- settings:
- description: Settings defines the settings to configure OpenAPI specification enforcement.
- properties:
- logging:
- description: Logging specifies the access log behavior.
- properties:
- maxFailedSubvalidations:
- default: 10
- description: MaxFailedSubvalidations defines the maximum number of failed subvalidations being logged.
- format: int64
- type: integer
- type: object
- schema:
- description: Schema configures the OpenAPI specification.
- properties:
- source:
- description: Source specifies the OpenAPI specification to be enforced.
- properties:
- configMapRef:
- description: ConfigMapRef references the configmap by its name containing the well-known key 'openapi.json'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- required:
- - source
- type: object
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- validation:
- description: Validation specifies the patterns for the validation behavior.
- properties:
- authentication:
- description: Authentication defines the settings for the authentication scheme.
- properties:
- oAuth2:
- description: OAuth2 specifies the OAuth2 parameters.
- properties:
- allowedParameters:
- description: AllowedParameters specifies the allowed parameters for the authentication scheme.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined allowed parameters.
- properties:
- standardParameters:
- default: true
- description: StandardParameters defines whether the allowed parameters should be expanded by the set of common parameters.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional allowed parameters.
- items:
- minLength: 1
- type: string
- minItems: 1
- type: array
- type: object
- type: object
- oidc:
- description: Oidc specifies the OIDC parameters.
- properties:
- allowedParameters:
- description: AllowedParameters specifies the allowed parameters for the authentication scheme.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined allowed parameters.
- properties:
- standardParameters:
- default: true
- description: StandardParameters defines whether the allowed parameters should be expanded by the set of common parameters.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional allowed parameters.
- items:
- minLength: 1
- type: string
- minItems: 1
- type: array
- type: object
- type: object
- type: object
- type: object
- required:
- - schema
- type: object
- required:
- - settings
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.3/crds/redisproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/redisproviders.microgateway.airlock.com.yaml
deleted file mode 100644
index 8c662a2d0..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/redisproviders.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,159 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: redisproviders.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: RedisProvider
- listKind: RedisProviderList
- plural: redisproviders
- singular: redisprovider
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: RedisProvider contains a client configuration for connecting to a Redis database.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of a Redis database client configuration.
- properties:
- auth:
- description: Auth specifies the Redis credentials.
- properties:
- password:
- description: Password specifies the Redis password.
- properties:
- secretRef:
- description: SecretRef selects the secret containing the Redis password under the key 'redis.password'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- username:
- default: default
- description: Username specifies the Redis username to authenticate with.
- minLength: 1
- pattern: ^[^\s]+$
- type: string
- required:
- - password
- type: object
- mode:
- description: Mode configures the redis deployment mode.
- properties:
- standalone:
- description: Standalone specifies the standalone Redis instance to connect to.
- properties:
- host:
- description: Host specifies the IP or hostname.
- minLength: 1
- pattern: ^(\d{1,3}(\.\d{1,3}){3}|([0-9a-fA-F]{1,4}|:)+(:\d{1,3}(\.\d{1,3}){3})?|[a-z0-9\-]+(\.[a-z0-9\-]+)*)$
- type: string
- port:
- default: 6379
- description: Port specifies the port.
- maximum: 65535
- minimum: 1
- type: integer
- required:
- - host
- type: object
- type: object
- timeouts:
- description: Timeouts specifies the timeouts when interacting with the Redis endpoint.
- properties:
- connect:
- default: 5s
- description: Connect specifies the timeout for establishing a connection.
- type: string
- maxDuration:
- default: 2s
- description: MaxDuration specifies the response timeout.
- type: string
- type: object
- tls:
- description: TLS defines TLS settings. If not specified, TLS is disabled i.e. unencrypted TCP is used when connecting to the Redis instance.
- properties:
- certificateVerification:
- description: CertificateVerification specifies how the certificate presented by the server is verified.
- properties:
- custom:
- description: Custom explicitly specifies how the server certificate should be verified.
- properties:
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- required:
- - certificates
- type: object
- required:
- - trustedCA
- type: object
- disabled:
- description: 'Disabled specifies to trust any certificate without verification. THIS IS INSECURE AND SHOULD ONLY BE USED FOR TESTING. Note: This setting currently also disables TLS SNI.'
- type: object
- publicCAs:
- description: PublicCAs specifies to only accept certificates with a SAN matching the host and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Session Agent’s base image.
- type: object
- type: object
- type: object
- required:
- - mode
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.3/crds/sessionhandlings.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/sessionhandlings.microgateway.airlock.com.yaml
deleted file mode 100644
index 72747df77..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/sessionhandlings.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,77 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: sessionhandlings.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: SessionHandling
- listKind: SessionHandlingList
- plural: sessionhandlings
- singular: sessionhandling
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- SessionHandling contains the configuration for session handling.
-
-
- {{% notice warning %}} The Session Handling feature (required for OIDC) is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as high-availability Redis configurations (e.g. Sentinel/Cluster) are not yet supported.
- {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired session handling behavior.
- properties:
- persistence:
- description: Persistence configures where to store the session state.
- properties:
- redisProviderRef:
- description: RedisProviderRef specifies to cache session information in the provided Redis instance.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - redisProviderRef
- type: object
- required:
- - persistence
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.3/crds/sidecargateways.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/sidecargateways.microgateway.airlock.com.yaml
deleted file mode 100644
index 6e1c04a48..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/sidecargateways.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,758 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: sidecargateways.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: SidecarGateway
- listKind: SidecarGatewayList
- plural: sidecargateways
- singular: sidecargateway
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .status.status
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: SidecarGateway contains the configuration how to configure the Airlock Microgateway Engine when used as Sidecar Container within the Pod of an application.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired sidecar gateway behavior.
- properties:
- applications:
- description: Applications defines applications which run on different ports.
- items:
- properties:
- containerPort:
- default: 8080
- description: |-
- ContainerPort refers to the container port.
- This must be a valid port number, 0 < x < 65536.
- format: int32
- maximum: 65535
- minimum: 1
- type: integer
- downstream:
- description: Downstream defines the downstream configuration for this application
- properties:
- protocol:
- description: |-
- Protocol defines the exposed HTTP protocol version. At most one of http1, http2 and auto can be set.
- Default: auto: {}
- properties:
- auto:
- description: Auto specifies that the protocol should be inferred.
- properties:
- http2:
- description: HTTP2 specifies the settings for when HTTP/2 is inferred.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- http1:
- description: HTTP1 specifies that the client is assumed to speak HTTP/1.1.
- type: object
- http2:
- description: HTTP2 specifies that the client is assumed to speak HTTP/2.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- remoteIP:
- description: |-
- RemoteIP defines how the remote IP of a client is propagated.
- Default: xff: {...}
- properties:
- connectionIP:
- description: ConnectionIP configures to use the source IP address of the direct downstream connection.
- type: object
- customHeader:
- description: CustomHeader specifies to use a custom header for remote IP extraction.
- properties:
- headerName:
- description: HeaderName specifies the name of the custom header containing the remote IP.
- minLength: 1
- type: string
- required:
- default: true
- description: Required specifies if the custom header is required. If true and not available the request will be rejected with 403.
- type: boolean
- required:
- - headerName
- type: object
- xff:
- description: XFF configures to use the standard 'X-Forwarded-For' header for IP extraction.
- properties:
- numTrustedHops:
- default: 1
- description: NumTrustedHops specifies to extract the client's originating IP from the nth rightmost entry in the X-Forwarded-For header. With the default value of 1, the IP is extracted from the rightmost entry.
- format: int32
- minimum: 1
- type: integer
- type: object
- type: object
- requestNormalizations:
- description: RequestNormalizations defines a set of normalization actions which are applied to the request before route matching.
- properties:
- mergeSlashes:
- default: true
- description: MergeSlashes ensures that adjacent slashes in the path are merged into one.
- type: boolean
- normalizePath:
- default: true
- description: NormalizePath ensures normalization according to RFC 3986 without case normalization.
- type: boolean
- type: object
- restrictions:
- description: Restrictions defines restrictions for downstream.
- properties:
- http:
- description: HTTP defines limits for the HTTP protocol.
- properties:
- headersLength:
- anyOf:
- - type: integer
- - type: string
- default: 60Ki
- description: HeadersLength defines maximum size of all request headers combined. Requests that exceed this limit will receive a 431 response.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- timeouts:
- description: Timeouts defines timeouts for downstream
- properties:
- http:
- description: HTTP defines the settings for HTTP timeouts.
- properties:
- idle:
- default: 5m
- description: |-
- Idle defines the settings for the idle timeout when no data is sent or received.
- A value of 0 will completely disable the timeout.
- Default: 5m
- type: string
- maxDuration:
- default: 5m
- description: |-
- MaxDuration defines the total duration for a HTTP request/response stream.
- A value of 0 will completely disable the timeout.
- Default: 5m
- type: string
- requestHeaders:
- default: 10s
- description: |-
- RequestHeaders defines the duration before all request headers must be received.
- A value of 0 will completely disable the timeout.
- Default: 10s
- type: string
- type: object
- type: object
- tls:
- description: TLS defines the TLS settings.
- properties:
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- clientCertificate:
- description: |-
- ClientCertificate defines the TLS settings for verification of client certificates.
- At most one of ignored, optional and required can be set.
- Default: ignored: {}
- properties:
- ignored:
- description: Ignored disables verification of the client certificate.
- type: object
- optional:
- description: |-
- Optional enables verification of the client certificate if one is presented.
- In this mode only trustedCA and crl settings can be configured since certificatePinning and allowedSANs require a client certificate.
- properties:
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- required:
- - trustedCA
- type: object
- required:
- description: |-
- Required contains settings for client certificate verification. A client must present a valid certificate.
- At least one of trustedCA and certificatePinning must be set.
- properties:
- allowedSANs:
- description: |-
- AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
- that is to say, the SAN is verified if at least one matcher is matched.
- AllowedSANs requires trustedCA to be set.
- items:
- description: |-
- TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers.
- properties:
- matcher:
- description: Matcher defines the string matcher for the SAN value.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- sanType:
- description: SanType defines the type of SAN matcher.
- enum:
- - DNS
- - Email
- - URI
- - IPAddress
- type: string
- required:
- - matcher
- - sanType
- type: object
- minItems: 1
- type: array
- certificatePinning:
- description: |-
- CertificatePinning defines the constraints a client certificate must fulfill.
- If more than one constraint is configured only one must be satisfied.
- At least one of allowedSPKIs and allowedHashes must be set.
- properties:
- allowedHashes:
- description: |-
- AllowedHashes is a list of hex-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- allowedSPKIs:
- description: |-
- AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- type: object
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- type: object
- type: object
- enable:
- default: false
- description: Enable defines if the downstream connection is encrypted.
- type: boolean
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- secretRef:
- description: SecretRef defines the reference to the TLS server certificate (secret of type kubernetes.io/tls).
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- xfcc:
- description: |-
- XFCC defines the handling of X-Forwarded-Client-Cert header. Meaning of the possible values:
- _Sanitize_: Do not send the XFCC header to the next hop. This is the default value.
- _ForwardOnly_: When the client connection is mTLS (Mutual TLS), forward the XFCC header in the request.
- _AppendAndForward_: When the client connection is mTLS, append the client certificate information to the request’s XFCC header and forward it.
- _SanitizeAndSet_: When the client connection is mTLS, reset the XFCC header with the client certificate information and send it to the next hop.
- _AlwaysForwardOnly_: Always forward the XFCC header in the request, regardless of whether the client connection is mTLS.
- Note: When forwarding the XFCC header in the request you might have to adjust the header length restrictions (See sidecargateway.spec.applications.downstream.restrictions.http)
- enum:
- - Sanitize
- - ForwardOnly
- - AppendAndForward
- - SanitizeAndSet
- - AlwaysForwardOnly
- type: string
- type: object
- type: object
- envoyHTTPFilterRefs:
- description: EnvoyHTTPFilterRefs selects the relevant EnvoyHTTPFilters.
- properties:
- prepend:
- description: Prepend selects the relevant EnvoyHTTPFilters which are added before those configured by the Airlock Microgateway.
- items:
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: array
- type: object
- routes:
- description: Routes defines the security configurations for different paths. The first matching route (from top to bottom) applies.
- items:
- description: |-
- SidecarGatewayApplicationRoute defines the security configurations for different paths.
- At most one of secured and unsecured can be set.
- Default: secured: {...}
- properties:
- pathPrefix:
- default: /
- description: PathPrefix defines the path prefix used during route selection.
- minLength: 1
- type: string
- secured:
- description: Secured enables WAF processing for this route.
- properties:
- accessControlRef:
- description: |-
- AccessControlRef selects the relevant AccessControl configuration resource.
- If undefined, Airlock Microgateway does not perform any access control.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- contentSecurityRef:
- description: |-
- ContentSecurityRef selects the relevant ContentSecurity configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- unsecured:
- description: |-
- Unsecured disables all WAF functionality and therefore protection for this route.
- WARNING: Using this setting when the application is exposed to untrusted downstream traffic is highly discouraged.
- type: object
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - pathPrefix
- x-kubernetes-list-type: map
- telemetryRef:
- description: |-
- TelemetryRef selects the relevant Telemetry configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- upstream:
- description: Upstream defines the upstream configuration for this application
- properties:
- protocol:
- description: |-
- Protocol defines HTTP protocol version used to communicate with the upstream. At most one of http1, http2 and auto can be set.
- Default: auto: {}
- properties:
- auto:
- description: Auto specifies to negotiate the protocol with TLS ALPN (if TLS is enabled) or, as a fallback, use the same protocol that is used by the downstream connection.
- properties:
- http2:
- description: HTTP2 specifies the settings for when HTTP/2 is inferred.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- http1:
- description: HTTP1 specifies to use HTTP/1.1.
- type: object
- http2:
- description: HTTP2 specifies to use HTTP/2.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- timeouts:
- description: Timeouts defines the timeout settings.
- properties:
- http:
- description: HTTP defines the settings for HTTP timeouts.
- properties:
- idle:
- description: |-
- Timeout defines the settings for http timeouts. If this setting is not specified, the value of applications[].downstream.timeouts.http.idle is inherited.
- A value of 0 will completely disable the timeout.
- type: string
- maxDuration:
- default: 15s
- description: |-
- MaxDuration defines the total duration for a HTTP request/response stream.
- Default: 15s
- type: string
- type: object
- type: object
- tls:
- description: TLS defines the TLS settings.
- properties:
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- enable:
- default: false
- description: Enable defines if the upstream connection is encrypted.
- type: boolean
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- type: object
- type: object
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - containerPort
- x-kubernetes-list-type: map
- envoyClusterRefs:
- description: EnvoyClusterRefs selects the relevant EnvoyClusters.
- items:
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- podSelector:
- description: PodSelector defines to which Pods the configuration will be applied to.
- properties:
- matchLabels:
- additionalProperties:
- type: string
- description: MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels.
- type: object
- type: object
- sessionHandlingRef:
- description: SessionHandlingRef selects the SessionHandling configuration to apply.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - applications
- type: object
- status:
- description: Most recently observed status of the SidecarGateway which is populated by the system. This data is read-only and may not be up to date.
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- description: Last time the condition transitioned from one status to another.
- format: date-time
- type: string
- message:
- description: A human-readable message indicating details about the transition.
- type: string
- reason:
- description: The reason for the condition's last transition.
- type: string
- status:
- description: Status of the condition, one of True, False, Unknown.
- type: string
- type:
- description: Type of SidecarGateway condition.
- type: string
- required:
- - status
- - type
- type: object
- type: array
- pods:
- items:
- properties:
- envoyConfig:
- description: EnvoyConfig indicates the name of the EnvoyConfig CR for the Pod.
- type: string
- name:
- description: Name indicates the name of a Pod selected by the SidecarGateway.
- type: string
- sessionAgentSecret:
- type: string
- required:
- - name
- type: object
- type: array
- status:
- type: string
- unmanagedPods:
- items:
- properties:
- managedBy:
- description: ManagedBy indicates the Airlock Microgateway Operator instance which manages this Pod.
- type: string
- name:
- description: Name indicates the name of a Pod selected by the SidecarGateway.
- type: string
- sessionAgentSecret:
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - status
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/charts/airlock/microgateway/4.3.3/crds/telemetries.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.3/crds/telemetries.microgateway.airlock.com.yaml
deleted file mode 100644
index 3262cb1f0..000000000
--- a/charts/airlock/microgateway/4.3.3/crds/telemetries.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,96 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
- name: telemetries.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Telemetry
- listKind: TelemetryList
- plural: telemetries
- singular: telemetry
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Telemetry contains the configuration for telemetry (logging, metrics & tracing).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired telemetry behavior.
- properties:
- correlation:
- description: Correlation defines the correlation aspects of Telemetry.
- properties:
- idSource:
- description: IDSource specifies how an external correlation ID should be obtained for a request. If not specified, no correlation ID will be logged.
- properties:
- header:
- description: Header specifies to extract the correlation ID from a request header. If the header is absent from a request, no correlation ID will be logged.
- properties:
- name:
- default: X-Correlation-Id
- description: Name of the header (case-insensitive) from which to extract the correlation ID.
- minLength: 1
- type: string
- type: object
- required:
- - header
- type: object
- request:
- description: Request defines the request related correlation settings of Telemetry.
- properties:
- allowDownstreamRequestID:
- default: true
- description: AllowDownstreamRequestID defines whether trace sampling will consider a provided x-request-id.
- type: boolean
- alterRequestID:
- default: true
- description: AlterRequestID defines whether to alter the UUID to reflect the trace sampling decision. If disabled no modification to the UUID will be performed, this may break tracing in the upstream.
- type: boolean
- type: object
- type: object
- logging:
- description: Logging defines the logging aspects of Telemetry.
- properties:
- accessLog:
- description: AccessLog defines the access log settings of Telemetry.
- properties:
- format:
- description: Format defines the Access Log format of the sidecar.
- properties:
- json:
- description: JSON defines the Access Log format as JSON.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.3/dashboards/blockMetrics.json b/charts/airlock/microgateway/4.3.3/dashboards/blockMetrics.json
deleted file mode 100644
index ba383d22e..000000000
--- a/charts/airlock/microgateway/4.3.3/dashboards/blockMetrics.json
+++ /dev/null
@@ -1,758 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "panel",
- "id": "barchart",
- "name": "Bar chart",
- "version": ""
- },
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "stat",
- "name": "Stat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "timeseries",
- "name": "Time series",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "Metrics on requests blocked by Airlock Microgateway.\n\nDashboard can be filtered by namespaces as well as block types.",
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 6,
- "title": "Airlock Microgateway Block Metrics",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Total number of requests processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 0,
- "y": 1
- },
- "id": 1,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "format": "time_series",
- "fullMetaSearch": false,
- "hide": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Processed Requests",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Ratio of blocked requests vs. processed requests by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [
- {
- "options": {
- "match": "nan",
- "result": {
- "index": 0,
- "text": "n/a"
- }
- },
- "type": "special"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "percentunit"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 4,
- "y": 1
- },
- "id": 2,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])) / sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range]))",
- "fullMetaSearch": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Blocked Requests (%)",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "% Blocked Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Requests per second processed by Airlock Microgateway along with the corresponding block rate.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "blue",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "left",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "blue",
- "value": null
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "% Blocks"
- },
- "properties": [
- {
- "id": "custom.axisPlacement",
- "value": "right"
- },
- {
- "id": "unit",
- "value": "percentunit"
- },
- {
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
- },
- {
- "id": "max",
- "value": 1
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Requests per second"
- },
- "properties": [
- {
- "id": "unit",
- "value": "short"
- },
- {
- "id": "custom.fillOpacity",
- "value": 25
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 10,
- "w": 20,
- "x": 0,
- "y": 5
- },
- "id": 3,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "timezone": [
- ""
- ],
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "instant": false,
- "legendFormat": "Requests per second",
- "range": true,
- "refId": "Requests per Second"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(rate(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) / sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "hide": false,
- "instant": false,
- "legendFormat": "% Blocks",
- "range": true,
- "refId": "Blocks"
- }
- ],
- "title": "Requests vs. % Blocks",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Blocked requests by block type.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "super-light-orange",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisGridShow": true,
- "axisLabel": "",
- "axisPlacement": "auto",
- "fillOpacity": 80,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "lineWidth": 0,
- "scaleDistribution": {
- "type": "linear"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "fieldMinMax": false,
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "none"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 11,
- "w": 10,
- "x": 0,
- "y": 15
- },
- "id": 4,
- "options": {
- "barRadius": 0,
- "barWidth": 0.8,
- "fullHighlight": false,
- "groupWidth": 0.7,
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": false
- },
- "orientation": "horizontal",
- "showValue": "never",
- "stacking": "none",
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "asc"
- },
- "xField": "block_type",
- "xTickLabelRotation": 0,
- "xTickLabelSpacing": 0
- },
- "pluginVersion": "10.4.3",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum by (block_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "format": "time_series",
- "instant": true,
- "legendFormat": "__auto",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Block Type",
- "transformations": [
- {
- "id": "reduce",
- "options": {
- "includeTimeField": false,
- "labelsToFields": true,
- "mode": "seriesToRows",
- "reducers": [
- "sum"
- ]
- }
- }
- ],
- "type": "barchart"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Blocked requests by attack type, which are subsets of the various block types.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "light-orange",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "fillOpacity": 80,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "lineWidth": 1,
- "scaleDistribution": {
- "type": "linear"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 11,
- "w": 10,
- "x": 10,
- "y": 15
- },
- "id": 5,
- "options": {
- "barRadius": 0,
- "barWidth": 0.8,
- "fullHighlight": false,
- "groupWidth": 0.7,
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": false
- },
- "orientation": "horizontal",
- "showValue": "never",
- "stacking": "none",
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- },
- "xField": "attack_type",
- "xTickLabelRotation": 0,
- "xTickLabelSpacing": 0
- },
- "pluginVersion": "10.4.3",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum by (attack_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "instant": true,
- "legendFormat": "__auto",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Attack Type",
- "transformations": [
- {
- "id": "reduce",
- "options": {
- "labelsToFields": true,
- "reducers": [
- "sum"
- ]
- }
- }
- ],
- "type": "barchart"
- }
- ],
- "refresh": "",
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "Datasource Prometheus",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "current": {
- "selected": false,
- "text": "Loki",
- "value": "P8E80F9AEF21F6940"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_LOKI",
- "multi": false,
- "name": "DS_LOKI",
- "options": [],
- "query": "loki",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_valid,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Operator Namespace",
- "multi": true,
- "name": "operator_namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": ".*",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_http_rq_total,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Application Namespace",
- "multi": true,
- "name": "namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_http_rq_total,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 5,
- "type": "query"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "hide": 0,
- "includeAll": true,
- "label": "Block Type",
- "multi": true,
- "name": "blockType",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 5,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-24h",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {
- "hidden": false
- },
- "timezone": "browser",
- "title": "Airlock Microgateway Block Metrics",
- "uid": "ddnqoczu7qvb4cdd3dd",
- "version": 3,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/dashboards/license.json b/charts/airlock/microgateway/4.3.3/dashboards/license.json
deleted file mode 100644
index b9d5777e2..000000000
--- a/charts/airlock/microgateway/4.3.3/dashboards/license.json
+++ /dev/null
@@ -1,521 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "stat",
- "name": "Stat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "timeseries",
- "name": "Time series",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "License status of Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [
- {
- "options": {
- "0": {
- "color": "red",
- "index": 1,
- "text": "Invalid"
- },
- "1": {
- "color": "green",
- "index": 0,
- "text": "Valid"
- }
- },
- "type": "value"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 0
- },
- "id": 1,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_valid{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "License Status",
- "range": false,
- "refId": "Licenses"
- }
- ],
- "title": "License Status",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Expiry date of the Airlock Microgateway license associated with the selected operator.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "time: L"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 3,
- "y": 0
- },
- "id": 4,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_expiry_timestamp_seconds{namespace=~\"${operator_namespace.regex}\"})*1000",
- "instant": true,
- "legendFormat": "Expiry Date (MM/DD/YYYY)",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "License Expiry Date",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of licensed requests for applications protected by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 7,
- "y": 0
- },
- "id": 6,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(microgateway_license_max_rq_count_per_month{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "Licensed Requests",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Licensed Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Estimated number of requests protected by Airlock Microgateway over 30 days based on the last 7 days.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 5,
- "x": 11,
- "y": 0
- },
- "id": 2,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_license_http_rq_total{job=~\"${operator_namespace.regex}/.*-engine\"}[7d]))/7*30",
- "instant": true,
- "legendFormat": "Estimated Requests",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Requests over 30 days (estimated)",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of requests per week processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "blue",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 12,
- "w": 16,
- "x": 0,
- "y": 4
- },
- "id": 5,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(avg_over_time(increase(microgateway_license_http_rq_total{job=~\"${operator_namespace.regex}/.*-engine\"}[7d])[2m:30s]))",
- "instant": false,
- "legendFormat": "# Requests per week",
- "range": true,
- "refId": "A"
- }
- ],
- "title": "Processed Requests per week",
- "type": "timeseries"
- }
- ],
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_PROMETHEUS",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_valid,namespace)",
- "description": "",
- "hide": 0,
- "includeAll": false,
- "label": "Operator Namespace",
- "multi": false,
- "name": "operator_namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-7d",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {},
- "timezone": "browser",
- "title": "Airlock Microgateway License",
- "uid": "cdpq79bzrr01se",
- "version": 2,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/gke-values.yaml b/charts/airlock/microgateway/4.3.3/gke-values.yaml
new file mode 100644
index 000000000..d6d5c21d1
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/gke-values.yaml
@@ -0,0 +1,4 @@
+# values for deploying on GKE
+
+config:
+ cniBinDir: "/home/kubernetes/bin"
diff --git a/charts/airlock/microgateway/4.3.3/openshift-values.yaml b/charts/airlock/microgateway/4.3.3/openshift-values.yaml
new file mode 100644
index 000000000..3b1d6cccd
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/openshift-values.yaml
@@ -0,0 +1,15 @@
+# values for deploying on OpenShift
+
+rbac:
+ createSCCRole: true
+
+privileged: true
+
+multusNetworkAttachmentDefinition:
+ create: true
+ namespace: default
+
+config:
+ installMode: "standalone"
+ cniNetDir: "/etc/cni/multus/net.d"
+ cniBinDir: "/var/lib/cni/bin"
diff --git a/charts/airlock/microgateway/4.3.3/questions.yml b/charts/airlock/microgateway/4.3.3/questions.yml
new file mode 100644
index 000000000..73ed44d64
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/questions.yml
@@ -0,0 +1,18 @@
+questions:
+ - variable: config.cniNetDir
+ required: true
+ type: string
+ label: CNI Network Configuration Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI config files reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your kubernetes host."
+ - variable: config.cniBinDir
+ required: true
+ type: string
+ label: CNI Plugin Binaries Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI plugin binaries reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your kubernetes host."
+ - variable: config.installMode
+ required: true
+ label: CNI Plugin Installation Mode
+ group: "CNI Settings"
+ description: "Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers) as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. Please refer to the CNI installation documentation (https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-cni) to correctly setup the CNI Plugin for your environment."
diff --git a/charts/airlock/microgateway/4.3.3/templates/NOTES.txt b/charts/airlock/microgateway/4.3.3/templates/NOTES.txt
index 6e5ce218a..bb94ff521 100644
--- a/charts/airlock/microgateway/4.3.3/templates/NOTES.txt
+++ b/charts/airlock/microgateway/4.3.3/templates/NOTES.txt
@@ -1,47 +1,15 @@
-Thank you for installing Airlock Microgateway.
+Thank you for installing Airlock Microgateway CNI.
-Please ensure the following prerequisites are fulfilled:
-* Cert-Manager is installed.
- https://cert-manager.io/docs/installation/helm/
-* Airlock Microgateway CNI is also installed on the cluster.
- https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni
-* A valid Airlock Microgateway license is deployed in the Kubernetes secret 'airlock-microgateway-license'.
- * Get a free Community license: https://airlock.com/en/microgateway-community
- * Order a Premium license: https://airlock.com/en/microgateway-premium
+Please ensure that the helm values'.config.cniNetDir' and '.config.cniBinDir' are configured for your Kubernetes distribution.
+For further information, consider our manual https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" . }}.
+The chapter 'Setup > Installation' describes how to set those settings correctly.
Further information:
-* Documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" . }}
-* CRD API reference documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" . }}/api/crds
+* Documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" . }}
* Airlock Microgateway Labs: https://play.instruqt.com/airlock/invite/hyi9fy4b4jzc?icp_referrer=helm
-{{- if .Values.crds.skipVersionCheck }}
-Warning: CRD version check skipped
-{{- else -}}
-{{- $outdatedCRDs := (include "airlock-microgateway.outdatedCRDs" .) -}}
-{{- if $outdatedCRDs -}}
- {{- fail (printf `
-
-Helm does not automatically upgrade CRDs from the chart's 'crds/' directory during 'helm install/upgrade'.
-Therefore, the CRDs must be manually upgraded with the following command before deploying this chart:
-
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=%s --server-side --force-conflicts
-
-If you are not using the helm install/upgrade command and instead rely on some other mechanism which is able to upgrade CRDs for deploying this chart, you can suppress this error by setting the helm value 'crds.skipVersionCheck=true'.`
- .Chart.AppVersion)
- -}}
-{{- end -}}
-{{- end -}}
-{{- if .Values.tests.enabled -}}
- {{- if .Values.operator.watchNamespaces -}}
- {{- if not (has .Release.Namespace .Values.operator.watchNamespaces) -}}
- {{- fail (printf `
-
-To execute 'helm test', it is necessary that the release namespace '%s' is part of the operator's watch scope. Either disable the tests or ensure that the release namespace is added to watch namspace list ('operator.watchNamespaces') in the helm values.
-`
- .Release.Namespace)
- -}}
- {{- end -}}
- {{- end -}}
-{{- end }}
+Next steps:
+* Install Airlock Microgateway (if not done already)
+ https://artifacthub.io/packages/helm/airlock-microgateway/microgateway
Your release version is {{ .Chart.Version }}.
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/_helpers.tpl b/charts/airlock/microgateway/4.3.3/templates/_helpers.tpl
index 733ba9648..996491a87 100644
--- a/charts/airlock/microgateway/4.3.3/templates/_helpers.tpl
+++ b/charts/airlock/microgateway/4.3.3/templates/_helpers.tpl
@@ -1,16 +1,14 @@
{{/*
Expand the name of the chart.
-We truncate at 49 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest explicit suffix is 14 characters.
*/}}
-{{- define "airlock-microgateway.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 49 | trimSuffix "-" }}
+{{- define "airlock-microgateway-cni.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Convert an image configuration object into an image ref string.
*/}}
-{{- define "airlock-microgateway.image" -}}
+{{- define "airlock-microgateway-cni.image" -}}
{{- if .digest -}}
{{- printf "%s@%s" .repository .digest -}}
{{- else if .tag -}}
@@ -22,19 +20,19 @@ Convert an image configuration object into an image ref string.
{{/*
Create a default fully qualified app name.
-We truncate at 36 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest implicit suffix is 27 characters.
+We truncate at 50 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
+and the longest suffix is 13 characters.
If release name contains chart name it will be used as a full name.
*/}}
-{{- define "airlock-microgateway.fullname" -}}
+{{- define "airlock-microgateway-cni.fullname" -}}
{{- if .Values.fullnameOverride }}
-{{- .Values.fullnameOverride | trunc 36 | trimSuffix "-" }}
+{{- .Values.fullnameOverride | trunc 50 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
-{{- .Release.Name | trunc 36 | trimSuffix "-" }}
+{{- .Release.Name | trunc 50 | trimSuffix "-" }}
{{- else }}
-{{- printf "%s-%s" .Release.Name $name | trunc 36 | trimSuffix "-" }}
+{{- printf "%s-%s" .Release.Name $name | trunc 50 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
@@ -42,112 +40,62 @@ If release name contains chart name it will be used as a full name.
{{/*
Create chart name and version as used by the chart label.
*/}}
-{{- define "airlock-microgateway.chart" -}}
+{{- define "airlock-microgateway-cni.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
-{{- define "airlock-microgateway.sharedLabels" -}}
-helm.sh/chart: {{ include "airlock-microgateway.chart" . }}
+{{- define "airlock-microgateway-cni.labels" -}}
+helm.sh/chart: {{ include "airlock-microgateway-cni.chart" . }}
+{{ include "airlock-microgateway-cni.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
-app.kubernetes.io/part-of: {{ .Chart.Name }}
{{- with .Values.commonLabels }}
{{ toYaml .}}
{{- end }}
{{- end }}
{{/*
-Common Selector labels
+Common labels without component
*/}}
-{{- define "airlock-microgateway.sharedSelectorLabels" -}}
-app.kubernetes.io/instance: {{ .Release.Name }}
+{{- define "airlock-microgateway-cni.labelsWithoutComponent" -}}
+{{- $labels := fromYaml (include "airlock-microgateway-cni.labels" .) -}}
+{{ unset $labels "app.kubernetes.io/component" | toYaml }}
{{- end }}
{{/*
-Restricted Container Security Context
+Selector labels
*/}}
-{{- define "airlock-microgateway.restrictedSecurityContext" -}}
-allowPrivilegeEscalation: false
-privileged: false
-runAsNonRoot: true
-capabilities:
- drop: ["ALL"]
-readOnlyRootFilesystem: true
-seccompProfile:
- type: RuntimeDefault
+{{- define "airlock-microgateway-cni.selectorLabels" -}}
+app.kubernetes.io/component: cni-plugin-installer
+app.kubernetes.io/instance: {{ .Release.Name }}
+app.kubernetes.io/name: {{ include "airlock-microgateway-cni.name" . }}
{{- end }}
-{{/* Precondition: May only be used if AppVersion is isSemver */}}
-{{- define "airlock-microgateway.supportedCRDVersionPattern" -}}
-{{- $version := (semver .Chart.AppVersion) -}}
-{{- if $version.Prerelease -}}
->= {{ $version.Major }}.{{ $version.Minor }}.{{ $version.Patch }}-{{ $version.Prerelease }}
-{{- else -}}
->= {{ $version.Major }}.{{ $version.Minor }}.0 || >= {{ $version.Major }}.{{ $version.Minor }}.{{ add1 $version.Patch }}-0
-{{- end -}}
-{{- end -}}
+{{/*
+Create the name of the service account to use for the CNI Plugin
+*/}}
+{{- define "airlock-microgateway-cni.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "airlock-microgateway-cni.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
-{{- define "airlock-microgateway.outdatedCRDs" -}}
-{{- if (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) -}}
- {{- $supportedVersion := (include "airlock-microgateway.supportedCRDVersionPattern" .) -}}
- {{- range $path, $_ := .Files.Glob "crds/*.yaml" -}}
- {{- $api := ($.Files.Get $path | fromYaml).metadata.name -}}
- {{- $crd := (lookup "apiextensions.k8s.io/v1" "CustomResourceDefinition" "" $api) -}}
- {{- $isOutdated := false -}}
- {{- if $crd -}}
- {{/* If CRD is already present in the cluster, it must have the minimum supported version */}}
- {{- $isOutdated = true -}}
- {{- if hasKey $crd.metadata "labels" -}}
- {{- $crdVersion := get $crd.metadata.labels "app.kubernetes.io/version" -}}
- {{- if (eq "true" (include "airlock-microgateway.isSemver" $crdVersion)) -}}
- {{- if (semverCompare $supportedVersion $crdVersion) }}
- {{- $isOutdated = false -}}
- {{- end }}
- {{- end -}}
- {{- end -}}
- {{- end -}}
- {{- if $isOutdated }}
-{{ base $path }}
- {{- end }}
- {{- end -}}
-{{- end -}}
-{{- end -}}
-
-{{- define "airlock-microgateway.isSemver" -}}
+{{- define "airlock-microgateway-cni.isSemver" -}}
{{- regexMatch `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` . -}}
{{- end -}}
-{{- define "airlock-microgateway.docsVersion" -}}
-{{- if and (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
+{{- define "airlock-microgateway-cni.docsVersion" -}}
+{{- if and (eq "true" (include "airlock-microgateway-cni.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
{{- $version := (semver .Chart.AppVersion) -}}
{{- $version.Major }}.{{ $version.Minor -}}
{{- else -}}
{{- print "latest" -}}
{{- end -}}
{{- end -}}
-
-{{- define "airlock-microgateway.watchNamespaceSelector.labelQuery" -}}
-{{- $list := list -}}
-{{- with .matchLabels -}}
- {{- range $key, $value := . -}}
- {{- $list = append $list (printf "%s=%s" $key $value) -}}
- {{- end -}}
-{{- end -}}
-{{- with .matchExpressions -}}
- {{- range . -}}
- {{- if has .operator (list "In" "NotIn") -}}
- {{- $list = append $list (printf "%s %s (%s)" .key (lower .operator) (join "," .values)) -}}
- {{- else if eq .operator "Exists" -}}
- {{- $list = append $list .key -}}
- {{- else if eq .operator "DoesNotExist" -}}
- {{- $list = append $list (printf "!%s" .key) -}}
- {{- end -}}
- {{- end -}}
-{{- end -}}
-{{- join "," $list -}}
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/clusterrole.yaml b/charts/airlock/microgateway/4.3.3/templates/clusterrole.yaml
new file mode 100644
index 000000000..ef88ac783
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/templates/clusterrole.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+ - patch
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/clusterrolebinding.yaml b/charts/airlock/microgateway/4.3.3/templates/clusterrolebinding.yaml
new file mode 100644
index 000000000..04f87cb0f
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/templates/clusterrolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/configmap.yaml b/charts/airlock/microgateway/4.3.3/templates/configmap.yaml
new file mode 100644
index 000000000..b880116ef
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/templates/configmap.yaml
@@ -0,0 +1,22 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+data:
+ plugin-conf.json: |-
+ {
+ "type": "{{ include "airlock-microgateway-cni.fullname" . }}",
+ "debug": {{ eq .Values.config.logLevel "debug" }},
+ "logFilePath": "/var/log/{{ include "airlock-microgateway-cni.fullname" . }}.log",
+ "kubernetes": {
+ "kubeconfig": "{{ .Values.config.cniNetDir }}/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig",
+ "excludeNamespaces": {{ toJson .Values.config.excludeNamespaces }}
+ }
+ }
diff --git a/charts/airlock/microgateway/4.3.3/templates/daemonset.yaml b/charts/airlock/microgateway/4.3.3/templates/daemonset.yaml
new file mode 100644
index 000000000..4ba9f2669
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/templates/daemonset.yaml
@@ -0,0 +1,136 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "airlock-microgateway-cni.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ kubectl.kubernetes.io/default-container: cni-installer
+ {{- with mustMerge .Values.podAnnotations .Values.commonAnnotations}}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 8 }}
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ - args:
+ - --log-level
+ - "{{ .Values.config.logLevel }}"
+ env:
+ - name: CNI_NETWORK_CONFIG
+ valueFrom:
+ configMapKeyRef:
+ key: plugin-conf.json
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ - name: CNI_BIN_DIR
+ value: /host/opt/cni/bin
+ - name: CNI_NET_DIR
+ value: /host/etc/cni/net.d
+ - name: KUBECONFIG_FILE_NAME
+ value: "{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig"
+ - name: INSTALL_MODE
+ value: {{ .Values.config.installMode }}
+ - name: KUBERNETES_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ image: {{ include "airlock-microgateway-cni.image" .Values.image }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ name: cni-installer
+ {{- with .Values.resources }}
+ resources:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ startupProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 5
+ initialDelaySeconds: 3
+ periodSeconds: 3
+ timeoutSeconds: 3
+ readinessProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 1
+ periodSeconds: 60
+ timeoutSeconds: 3
+ securityContext:
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ - mountPath: /run/cni-installer
+ name: cni-installer-status
+ hostNetwork: true
+ priorityClassName: system-node-critical
+ restartPolicy: Always
+ securityContext:
+ fsGroup: 0
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ serviceAccountName: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ terminationGracePeriodSeconds: 5
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ tolerations:
+ - effect: NoSchedule
+ operator: Exists
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
+ - emptyDir: {}
+ name: cni-installer-status
diff --git a/charts/airlock/microgateway/4.3.3/templates/network-attachment-definition.yaml b/charts/airlock/microgateway/4.3.3/templates/network-attachment-definition.yaml
new file mode 100644
index 000000000..5d657e309
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/templates/network-attachment-definition.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.multusNetworkAttachmentDefinition.create -}}
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Values.multusNetworkAttachmentDefinition.namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/_operator_helpers.tpl b/charts/airlock/microgateway/4.3.3/templates/operator/_operator_helpers.tpl
deleted file mode 100644
index a540ff9f4..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/_operator_helpers.tpl
+++ /dev/null
@@ -1,42 +0,0 @@
-{{/*
-Create a default fully qualified name for operator components.
-*/}}
-{{- define "airlock-microgateway.operator.fullname" -}}
-{{ include "airlock-microgateway.fullname" . }}-operator
-{{- end }}
-
-
-{{/*
-Common operator labels
-*/}}
-{{- define "airlock-microgateway.operator.labels" -}}
-{{ include "airlock-microgateway.sharedLabels" . }}
-{{ include "airlock-microgateway.operator.selectorLabels" . }}
-{{- end }}
-
-{{/*
-Operator Selector labels
-*/}}
-{{- define "airlock-microgateway.operator.selectorLabels" -}}
-{{ include "airlock-microgateway.sharedSelectorLabels" . }}
-app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-operator
-app.kubernetes.io/component: controller
-{{- end }}
-
-{{/*
-Create the name of the service account to use for the operator
-*/}}
-{{- define "airlock-microgateway.operator.serviceAccountName" -}}
-{{- if .Values.operator.serviceAccount.create }}
-{{- default (include "airlock-microgateway.operator.fullname" .) .Values.operator.serviceAccount.name }}
-{{- else }}
-{{- default "default" .Values.operator.serviceAccount.name }}
-{{- end }}
-{{- end }}
-
-{{/*
-ServiceMonitor metrics regex pattern for leader only metrics
-*/}}
-{{- define "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" -}}
-^(microgateway_license|microgateway_sidecars).*$
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/_rbac.gen.tpl b/charts/airlock/microgateway/4.3.3/templates/operator/_rbac.gen.tpl
deleted file mode 100644
index 83b314cbc..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/_rbac.gen.tpl
+++ /dev/null
@@ -1,237 +0,0 @@
-{{/* AUTOGENERATED FILE DO NOT EDIT */}}
-
-{{/*
-Operator rbac permission rules
-*/}}
-{{- define "airlock-microgateway-operator.rbacRules" -}}
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
-- apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - delete
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - ""
- resources:
- - pods/finalizers
- verbs:
- - update
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
- - update
-- apiGroups:
- - ""
- resources:
- - secrets
- verbs:
- - create
- - delete
- - get
- - list
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - accesscontrols
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - contentsecurities
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - denyrules
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyclusters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyconfigurations
- verbs:
- - create
- - delete
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyconfigurations/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyhttpfilters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - graphqls
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - headerrewrites
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - identitypropagations
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - limits
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcrelyingparties
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - openapis
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - parsers
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - redisproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sessionhandlings
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways
- verbs:
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/finalizers
- verbs:
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - telemetries
- verbs:
- - get
- - list
- - watch
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/_webhooks.gen.tpl b/charts/airlock/microgateway/4.3.3/templates/operator/_webhooks.gen.tpl
deleted file mode 100644
index 02e304890..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/_webhooks.gen.tpl
+++ /dev/null
@@ -1,339 +0,0 @@
-{{/* AUTOGENERATED FILE DO NOT EDIT */}}
-
-{{/*
-Operator mutating webhooks
-*/}}
-{{- define "airlock-microgateway-operator.mutatingWebhooks" -}}
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /mutate-v1-pod
- failurePolicy: Fail
- name: mutate-pod.microgateway.airlock.com
- reinvocationPolicy: IfNeeded
- rules:
- - apiGroups:
- - ""
- apiVersions:
- - v1
- operations:
- - CREATE
- resources:
- - pods
- sideEffects: None
- objectSelector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
-{{- end }}
-
-{{/*
-Operator validating webhooks
-*/}}
-{{- define "airlock-microgateway-operator.validatingWebhooks" -}}
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-v1-pod
- failurePolicy: Fail
- name: validate-pod.microgateway.airlock.com
- rules:
- - apiGroups:
- - ""
- apiVersions:
- - v1
- operations:
- - CREATE
- - UPDATE
- resources:
- - pods
- sideEffects: None
- objectSelector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-accesscontrol
- failurePolicy: Fail
- name: validate-accesscontrol.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - accesscontrols
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-denyrules
- failurePolicy: Fail
- name: validate-denyrules.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - denyrules
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-envoycluster
- failurePolicy: Fail
- name: validate-envoycluster.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - envoyclusters
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-envoyhttpfilter
- failurePolicy: Fail
- name: validate-envoyhttpfilter.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - envoyhttpfilters
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-graphql
- failurePolicy: Fail
- name: validate-graphql.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - graphqls
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-headerrewrites
- failurePolicy: Fail
- name: validate-headerrewrites.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - headerrewrites
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-identitypropagation
- failurePolicy: Fail
- name: validate-identitypropagation.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - identitypropagations
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-limits
- failurePolicy: Fail
- name: validate-limits.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - limits
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-oidcprovider
- failurePolicy: Fail
- name: validate-oidcprovider.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - oidcproviders
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-oidcrelyingparty
- failurePolicy: Fail
- name: validate-oidcrelyingparty.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - oidcrelyingparties
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-openapi
- failurePolicy: Fail
- name: validate-openapi.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - openapis
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-parser
- failurePolicy: Fail
- name: validate-parser.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - parsers
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-redisprovider
- failurePolicy: Fail
- name: validate-redisprovider.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - redisproviders
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-sidecargateway
- failurePolicy: Fail
- name: validate-sidecargateway.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - sidecargateways
- sideEffects: None
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/configmap.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/configmap.yaml
deleted file mode 100644
index 95e52d7df..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/configmap.yaml
+++ /dev/null
@@ -1,394 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-config
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-data:
- engine_bootstrap_config_template.yaml: |
- # Base configuration, admin interface on port 19000
- admin:
- address:
- socket_address:
- address: 127.0.0.1
- port_value: 19000
- dynamic_resources:
- cds_config:
- initial_fetch_timeout: 10s
- resource_api_version: V3
- api_config_source:
- api_type: GRPC
- transport_api_version: V3
- grpc_services:
- - envoy_grpc:
- cluster_name: xds_cluster
- set_node_on_first_message_only: true
- # Prevent Envoy Node from overloading the xDS server due to rejected configuration when using xDS SotW gRPC
- rate_limit_settings:
- max_tokens: 5
- fill_rate: 0.2
- lds_config:
- resource_api_version: V3
- initial_fetch_timeout: 10s
- api_config_source:
- api_type: GRPC
- transport_api_version: V3
- grpc_services:
- - envoy_grpc:
- cluster_name: xds_cluster
- set_node_on_first_message_only: true
- # Prevent Envoy Node from overloading the xDS server due to rejected configuration when using xDS SotW gRPC
- rate_limit_settings:
- max_tokens: 5
- fill_rate: 0.2
- static_resources:
- listeners:
- - name: probe
- address:
- socket_address:
- address: 0.0.0.0
- port_value: 19001
- filter_chains:
- - filters:
- - name: http_connection_manager
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- stat_prefix: probe
- codec_type: AUTO
- http2_protocol_options:
- initial_connection_window_size: 1048576
- initial_stream_window_size: 65536
- max_concurrent_streams: 100
- route_config:
- name: probe
- virtual_hosts:
- - name: probe
- domains:
- - '*'
- routes:
- - name: ready
- match:
- path: /ready
- headers:
- - name: ':method'
- string_match:
- exact: 'GET'
- route:
- cluster: airlock_microgateway_engine_admin
- http_filters:
- - name: envoy.filters.http.router
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- - name: metrics
- address:
- socket_address:
- address: 0.0.0.0
- port_value: 19002
- filter_chains:
- - filters:
- - name: http_connection_manager
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- stat_prefix: metrics
- codec_type: AUTO
- http2_protocol_options:
- initial_connection_window_size: 1048576
- initial_stream_window_size: 65536
- max_concurrent_streams: 100
- route_config:
- name: metrics
- virtual_hosts:
- - name: metrics
- domains:
- - '*'
- routes:
- - name: metrics
- match:
- path: /metrics
- headers:
- - name: ':method'
- string_match:
- exact: 'GET'
- route:
- prefix_rewrite: '/stats/prometheus'
- cluster: airlock_microgateway_engine_admin
- http_filters:
- - name: envoy.filters.http.router
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- clusters:
- - name: xds_cluster
- connect_timeout: 1s
- type: STRICT_DNS
- load_assignment:
- cluster_name: xds_cluster
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: airlock-microgateway-operator-xds.$(OPERATOR_NAMESPACE).svc.cluster.local
- port_value: 13377
- typed_extension_protocol_options:
- envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
- '@type': type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
- explicit_http_config:
- http2_protocol_options:
- connection_keepalive:
- interval: 360s
- timeout: 5s
- transport_socket:
- name: envoy.transport_sockets.tls
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
- common_tls_context:
- tls_params:
- tls_minimum_protocol_version: TLSv1_3
- tls_maximum_protocol_version: TLSv1_3
- validation_context_sds_secret_config:
- name: validation_context_sds
- sds_config:
- resource_api_version: V3
- path_config_source:
- path: /etc/envoy/validation_context_sds_secret.yaml
- watched_directory:
- path: /etc/envoy/
- tls_certificate_sds_secret_configs:
- - name: tls_certificate_sds
- sds_config:
- resource_api_version: V3
- path_config_source:
- path: /etc/envoy/tls_certificate_sds_secret.yaml
- watched_directory:
- path: /etc/envoy/
- - name: airlock_microgateway_engine_admin
- connect_timeout: 1s
- type: STATIC
- load_assignment:
- cluster_name: airlock_microgateway_engine_admin
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: 127.0.0.1
- port_value: 19000
- typed_extension_protocol_options:
- envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
- '@type': type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
- explicit_http_config:
- http2_protocol_options:
- connection_keepalive:
- interval: 360s
- timeout: 5s
- stats_config:
- stats_tags:
- - tag_name: "block_type"
- regex: "\\.(block_type\\.([^.]+))"
- - tag_name: "attack_type"
- regex: "\\.(attack_type\\.([^.]+))"
- - tag_name: "envoy_cluster_name"
- regex: "\\.(cluster\\.([^.]+))"
- - tag_name: "version"
- regex: "\\.(version\\.([^.]+))"
- use_all_default_tags: true
- overload_manager:
- resource_monitors:
- - name: "envoy.resource_monitors.global_downstream_max_connections"
- typed_config:
- "@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig
- max_active_downstream_connections: 50000
- bootstrap_extensions:
- - name: airlock.bootstrap.engine_build_info
- typed_config:
- '@type': type.googleapis.com/airlock.extensions.bootstrap.stats.v1alpha.Stats
- application_log_config:
- log_format:
- text_format: '{"@timestamp":"%Y-%m-%dT%T.%e%z","log":{"logger":"%n","level":"%l","origin":{"file":{"name":"%g","line":%#},"function":"%!"}},"event":{"module":"envoy","dataset":"envoy.application"},"process":{"pid":%P,"thread":{"id":%t}},"ecs":{"version":"8.5"},"message":"%j"}'
- engine_container_template.yaml: |
- name: "$(ENGINE_NAME)"
- image: "$(ENGINE_IMAGE)"
- imagePullPolicy: {{ .Values.engine.image.pullPolicy }}
- args:
- - "--config-path"
- - "/etc/envoy/bootstrap_config.yaml"
- - "--base-id"
- - "$(BASE_ID)"
- - "--file-flush-interval-msec"
- - '1000'
- - "--drain-time-s"
- - '60'
- - "--service-node"
- - "$(POD_NAME).$(POD_NAMESPACE)"
- - "--service-cluster"
- - "$(APP_NAME).$(POD_NAMESPACE)"
- - "--log-path"
- - "/dev/stdout"
- - "--log-level"
- - "$(LOG_LEVEL)"
- volumeMounts:
- - name: airlock-microgateway-bootstrap-secret-volume
- mountPath: /etc/envoy
- readOnly: true
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.namespace
- - name: POD_IP
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: status.podIP
- ports:
- - containerPort: 13378
- protocol: TCP
- - containerPort: 19001
- protocol: TCP
- - containerPort: 19002
- protocol: TCP
- livenessProbe:
- httpGet:
- path: /ready
- port: 19001
- scheme: HTTP
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 5
- successThreshold: 1
- timeoutSeconds: 1
- readinessProbe:
- httpGet:
- path: /ready
- port: 19001
- scheme: HTTP
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 3
- successThreshold: 1
- timeoutSeconds: 1
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- {{- with .Values.engine.resources }}
- resources:
- {{- toYaml . | nindent 6 }}
- {{- end }}
- session_agent_container_template.yaml: |
- name: "$(SESSION_AGENT_NAME)"
- image: "$(SESSION_AGENT_IMAGE)"
- imagePullPolicy: {{ .Values.sessionAgent.image.pullPolicy }}
- args:
- - "--port"
- - "19004"
- - "--config-path"
- - "/etc/microgateway-session-agent/config.json"
- volumeMounts:
- - name: airlock-microgateway-session-agent-volume
- mountPath: /etc/microgateway-session-agent
- readOnly: true
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.namespace
- ports:
- - containerPort: 19004
- livenessProbe:
- {{- if (semverCompare ">=1.27 || >=1.27.1-0" .Capabilities.KubeVersion.Version)}}
- grpc:
- port: 19004
- {{- else }}
- tcpSocket:
- port: 19004
- {{- end }}
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 5
- successThreshold: 1
- timeoutSeconds: 5
- readinessProbe:
- {{- if (semverCompare ">=1.27 || >=1.27.1-0" .Capabilities.KubeVersion.Version)}}
- grpc:
- port: 19004
- {{- else }}
- tcpSocket:
- port: 19004
- {{- end }}
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 3
- successThreshold: 1
- timeoutSeconds: 5
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- {{- with .Values.sessionAgent.resources }}
- resources:
- {{- toYaml . | nindent 6 }}
- {{- end }}
- network_validator_container_template.yaml: |
- name: "$(NETWORK_VALIDATOR_NAME)"
- image: "$(NETWORK_VALIDATOR_IMAGE)"
- imagePullPolicy: {{ .Values.networkValidator.image.pullPolicy }}
- command: ["/bin/sh", "-c"]
- args:
- - |-
- echo 'pong' | nc -v -l 127.0.0.1 13378 &
- for i in 1 2 3; do
- sleep 1s
- if r=$(echo 'ping' | nc -v -q 0 127.0.0.1 19003) && [ $r == pong ]; then
- echo -n 'Traffic redirection to Airlock Microgateway Engine is working.' > /dev/termination-log
- exit 0
- fi
- done
- echo -en 'Traffic redirection to Airlock Microgateway Engine is not working.\nRestart the pod after ensuring that hostNetwork is disabled and a compatible Airlock Microgateway CNI version is installed on the node.\nCertain environments may also require additional configuration (see docs.airlock.com for more information).' > /dev/termination-log
- exit 1
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- operator_config.yaml: |
- apiVersion: config.airlock.com/v1alpha1
- kind: OperatorConfig
- health:
- healthProbeBindAddress: :8081
- metrics:
- bindAddress: 0.0.0.0:8080
- webhook:
- port: 9443
- deployment:
- sidecar:
- engineContainerTemplate: "/sidecar/engine_container_template.yaml"
- networkValidatorContainerTemplate: "/sidecar/network_validator_container_template.yaml"
- sessionAgentContainerTemplate: "/sidecar/session_agent_container_template.yaml"
- engine:
- bootstrapConfigTemplate: "/engine_bootstrap_config_template.yaml"
- log:
- level: {{ .Values.operator.config.logLevel }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaces:
- selector:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaces:
- list:
- {{- toYaml . | nindent 8 }}
- {{- end }}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/dashboard-configmap.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/dashboard-configmap.yaml
deleted file mode 100644
index b71ac89b6..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/dashboard-configmap.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-{{- if .Values.dashboards.create -}}
-{{- range $instance := (keys .Values.dashboards.instances | sortAlpha) -}}
-{{- $dashboard := get $.Values.dashboards.instances $instance -}}
-{{- if $dashboard.create }}
----
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: {{ include "airlock-microgateway.fullname" $ }}-dashboard-{{ $instance | lower }}
- namespace: {{ $.Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.dashboards.config.grafana.dashboardLabel -}}
- {{- .name | nindent 4 -}}: {{ .value | quote }}
- {{- end }}
- annotations:
- {{- with $.Values.dashboards.config.grafana.folderAnnotation -}}
- {{- .name | nindent 4 -}}: {{ .value | quote }}
- {{- end }}
- {{- with $.Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-data:
- {{- printf "%s.json" $instance | nindent 2 }}: |-
- {{- ($.Files.Get (printf "dashboards/%s.json" $instance)) | nindent 4 -}}
-{{- end -}}
-{{- end -}}
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/deployment.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/deployment.yaml
deleted file mode 100644
index db340cdec..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/deployment.yaml
+++ /dev/null
@@ -1,143 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- replicas: {{ .Values.operator.replicaCount }}
- {{- with .Values.operator.updateStrategy }}
- strategy:
- {{- toYaml . | trim | nindent 4 }}
- {{- end }}
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- template:
- metadata:
- annotations:
- checksum/config: {{ include (print $.Template.BasePath "/operator/configmap.yaml") . | sha256sum }}
- kubectl.kubernetes.io/default-container: manager
- {{- with mustMerge .Values.operator.podAnnotations .Values.commonAnnotations}}
- {{- toYaml . | nindent 8 }}
- {{- end }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 8 }}
- {{- with .Values.operator.podLabels }}
- {{- toYaml . | nindent 8 }}
- {{- end }}
- spec:
- containers:
- - args:
- - --config=operator_config.yaml
- env:
- - name: ENGINE_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.engine.image }}
- - name: NETWORK_VALIDATOR_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.networkValidator.image }}
- - name: SESSION_AGENT_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.sessionAgent.image }}
- - name: OPERATOR_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: OPERATOR_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- image: {{ include "airlock-microgateway.image" .Values.operator.image }}
- imagePullPolicy: {{ .Values.operator.image.pullPolicy }}
- livenessProbe:
- httpGet:
- path: /healthz
- port: 8081
- initialDelaySeconds: 15
- periodSeconds: 20
- timeoutSeconds: 5
- name: manager
- ports:
- - containerPort: 9443
- name: webhook-server
- protocol: TCP
- - containerPort: 13377
- name: xds-server
- protocol: TCP
- - containerPort: 8080
- protocol: TCP
- - containerPort: 8081
- protocol: TCP
- readinessProbe:
- httpGet:
- path: /readyz
- port: 8081
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- {{- with .Values.operator.resources }}
- resources:
- {{- toYaml . | nindent 10 }}
- {{- end }}
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 10 }}
- terminationMessagePath: /dev/termination-log
- terminationMessagePolicy: FallbackToLogsOnError
- volumeMounts:
- - mountPath: /tmp/k8s-webhook-server/serving-certs
- name: cert
- readOnly: true
- - mountPath: /opt/airlock/license/
- name: airlock-microgateway-license
- readOnly: true
- - mountPath: /operator_config.yaml
- name: operator-config
- subPath: operator_config.yaml
- - mountPath: /sidecar/engine_container_template.yaml
- name: operator-config
- subPath: engine_container_template.yaml
- - mountPath: /sidecar/network_validator_container_template.yaml
- name: operator-config
- subPath: network_validator_container_template.yaml
- - mountPath: /sidecar/session_agent_container_template.yaml
- name: operator-config
- subPath: session_agent_container_template.yaml
- - mountPath: /engine_bootstrap_config_template.yaml
- name: operator-config
- subPath: engine_bootstrap_config_template.yaml
- securityContext:
- runAsNonRoot: true
- serviceAccountName: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- terminationGracePeriodSeconds: 10
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.nodeSelector }}
- nodeSelector:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.tolerations }}
- tolerations:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.affinity }}
- affinity:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - name: cert
- secret:
- defaultMode: 420
- secretName: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-server-cert
- - name: airlock-microgateway-license
- secret:
- defaultMode: 292
- optional: true
- secretName: {{ .Values.license.secretName }}
- - configMap:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-config
- name: operator-config
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/manager-role.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/manager-role.yaml
deleted file mode 100644
index 90335bcfe..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/manager-role.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-{{- if .Values.operator.rbac.create }}
-{{- if empty .Values.operator.watchNamespaces }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
-{{ include "airlock-microgateway-operator.rbacRules" . -}}
-{{- else }}
-{{- range $namespace := (append .Values.operator.watchNamespaces .Release.Namespace | uniq) }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
- namespace: {{ $namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
-{{ include "airlock-microgateway-operator.rbacRules" $ }}
----
-{{- end -}}
-{{- end -}}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/manager-rolebinding.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/manager-rolebinding.yaml
deleted file mode 100644
index ae99cfb7b..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/manager-rolebinding.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-{{- if .Values.operator.rbac.create }}
-{{- if empty .Values.operator.watchNamespaces }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- namespace: {{ .Release.Namespace }}
-{{- else }}
-{{- range $namespace := (append .Values.operator.watchNamespaces .Release.Namespace | uniq) }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
- namespace: {{ $namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" $ }}
- namespace: {{ $.Release.Namespace }}
----
-{{- end -}}
-{{- end -}}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/metrics-service.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/metrics-service.yaml
deleted file mode 100644
index 34d23f6d6..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/metrics-service.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-metrics
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: http
- name: metrics
- port: 8080
- protocol: TCP
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
----
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-leader-metrics
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- operator.microgateway.airlock.com/isLeader: "true"
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: http
- name: metrics
- port: 8080
- protocol: TCP
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
- operator.microgateway.airlock.com/isLeader: "true"
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/mutating-webhook.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/mutating-webhook.yaml
deleted file mode 100644
index 311f9726a..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/mutating-webhook.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-{{ .Release.Namespace }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- annotations:
- cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- {{- with .Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-webhooks:
-{{- range $webhook := (include "airlock-microgateway-operator.mutatingWebhooks" .) | fromYamlArray }}
-- {{ toYaml $webhook | indent 2 | trim }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaceSelector:
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaceSelector:
- matchExpressions:
- - key: kubernetes.io/metadata.name
- operator: In
- values:
- {{- toYaml . | nindent 10 }}
- {{- end }}
-{{- end }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/podmonitor.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/podmonitor.yaml
deleted file mode 100644
index 1fe34fcb3..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/podmonitor.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-{{- if .Values.engine.sidecar.podMonitor.create }}
-apiVersion: monitoring.coreos.com/v1
-kind: PodMonitor
-metadata:
- name: {{ include "airlock-microgateway.fullname" . }}-engine
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.engine.sidecar.podMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- namespaceSelector:
- any: true
- selector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
- microgateway.airlock.com/managedBy: {{ .Release.Namespace }}
- podMetricsEndpoints:
- - targetPort: 19002
- path: /metrics
- scheme: http
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/role.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/role.yaml
deleted file mode 100644
index 5378be8ef..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/role.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
- - apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
- - apiGroups:
- - coordination.k8s.io
- resources:
- - leases
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
- - apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/rolebinding.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/rolebinding.yaml
deleted file mode 100644
index bafec1015..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/rolebinding.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/selfsigned-issuer.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/selfsigned-issuer.yaml
deleted file mode 100644
index 466c56338..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/selfsigned-issuer.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-selfsigned-issuer
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selfSigned: {}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/serviceaccount.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/serviceaccount.yaml
deleted file mode 100644
index 434d7e9d3..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/serviceaccount.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-{{- if .Values.operator.serviceAccount.create -}}
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with mustMerge .Values.operator.serviceAccount.annotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/servicemonitor.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/servicemonitor.yaml
deleted file mode 100644
index ff85a9a31..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/servicemonitor.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-{{- if .Values.operator.serviceMonitor.create }}
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- matchExpressions:
- - { key: "operator.microgateway.airlock.com/isLeader", operator: DoesNotExist }
- endpoints:
- - path: /metrics
- port: metrics
- scheme: http
- metricRelabelings:
- - sourceLabels:
- - __name__
- regex: {{ include "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" . }}
- action: drop
----
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- operator.microgateway.airlock.com/isLeader: "true"
- endpoints:
- - path: /metrics
- port: metrics
- scheme: http
- metricRelabelings:
- - sourceLabels:
- - __name__
- regex: {{ include "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" . }}
- action: keep
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/serving-certificate.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/serving-certificate.yaml
deleted file mode 100644
index 60b92e1e2..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/serving-certificate.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- dnsNames:
- - airlock-microgateway-operator-webhook.{{ .Release.Namespace }}.svc
- - airlock-microgateway-operator-webhook.{{ .Release.Namespace }}.svc.cluster.local
- issuerRef:
- kind: Issuer
- name: {{ include "airlock-microgateway.operator.fullname" . }}-selfsigned-issuer
- secretName: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-server-cert
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/validating-webhook.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/validating-webhook.yaml
deleted file mode 100644
index 5d6b4396b..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/validating-webhook.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-{{ .Release.Namespace }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- annotations:
- cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- {{- with .Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-webhooks:
-{{- range $webhook := (include "airlock-microgateway-operator.validatingWebhooks" .) | fromYamlArray }}
-- {{ toYaml $webhook | indent 2 | trim }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaceSelector:
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaceSelector:
- matchExpressions:
- - key: kubernetes.io/metadata.name
- operator: In
- values:
- {{- toYaml . | nindent 10 }}
- {{- end }}
-{{- end }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/webhook-service.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/webhook-service.yaml
deleted file mode 100644
index 477ea839f..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/webhook-service.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-webhook
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: https
- name: webhook
- port: 443
- protocol: TCP
- targetPort: 9443
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/operator/xds-service.yaml b/charts/airlock/microgateway/4.3.3/templates/operator/xds-service.yaml
deleted file mode 100644
index 81b41acf5..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/operator/xds-service.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-xds
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: grpc
- name: xds
- port: 13377
- protocol: TCP
- targetPort: 13377
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
- operator.microgateway.airlock.com/isLeader: "true"
diff --git a/charts/airlock/microgateway/4.3.3/templates/scc-role.yaml b/charts/airlock/microgateway/4.3.3/templates/scc-role.yaml
new file mode 100644
index 000000000..862748692
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/templates/scc-role.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+- apiGroups:
+ - security.openshift.io
+ resourceNames:
+ - privileged
+ resources:
+ - securitycontextconstraints
+ verbs:
+ - use
+{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/scc-rolebinding.yaml b/charts/airlock/microgateway/4.3.3/templates/scc-rolebinding.yaml
new file mode 100644
index 000000000..ebd02982c
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/templates/scc-rolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+subjects:
+- kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/serviceaccount.yaml b/charts/airlock/microgateway/4.3.3/templates/serviceaccount.yaml
new file mode 100644
index 000000000..3dc8d58ea
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.3/templates/serviceaccount.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with mustMerge .Values.serviceAccount.annotations .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/tests/rbac.yaml b/charts/airlock/microgateway/4.3.3/templates/tests/rbac.yaml
index 93bd4cd1b..744799333 100644
--- a/charts/airlock/microgateway/4.3.3/templates/tests/rbac.yaml
+++ b/charts/airlock/microgateway/4.3.3/templates/tests/rbac.yaml
@@ -2,142 +2,63 @@
apiVersion: v1
kind: ServiceAccount
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
subjects:
- kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
rules:
- apiGroups:
- - microgateway.airlock.com
+ - "apps"
resources:
- - sidecargateways
+ - daemonsets
resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway"
+ - {{ include "airlock-microgateway-cni.fullname" . }}
verbs:
- - get
- - list
- - watch
- - delete
+ - get
+ - watch
+ - list
- apiGroups:
- - microgateway.airlock.com
+ - ""
resources:
- - sidecargateways
+ - pods
+ - pods/log
verbs:
- - create
+ - get
+ - list
+{{- if .Values.rbac.createSCCRole }}
- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - list
-- apiGroups:
- - "apps"
- resources:
- - deployments
+ - security.openshift.io
resourceNames:
- - "{{ include "airlock-microgateway.operator.fullname" . }}"
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - "apps"
+ - privileged
resources:
- - statefulsets
- - statefulsets/scale
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend"
+ - securitycontextconstraints
verbs:
- - get
- - list
- - watch
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- - pods/log
- - pods/status
- - pods/attach
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend-0"
- - "{{ include "airlock-microgateway.fullname" . }}-test-valid-request"
- - "{{ include "airlock-microgateway.fullname" . }}-test-injection-request"
- verbs:
- - get
- - list
- - create
- - watch
- - delete
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - create
-{{- if .Values.operator.watchNamespaceSelector }}
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-subjects:
- - kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
- namespace: {{ .Release.Namespace }}
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-rules:
-- apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
-{{- end }}
+ - use
+{{- end -}}
{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/templates/tests/service.yaml b/charts/airlock/microgateway/4.3.3/templates/tests/service.yaml
deleted file mode 100644
index 30ddc278d..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/tests/service.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-{{- if .Values.tests.enabled -}}
-apiVersion: v1
-kind: Service
-metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-service"
- namespace: {{ .Release.Namespace }}
- labels:
- app: test-service
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
-spec:
- selector:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
- ports:
- - name: http
- port: 8080
- targetPort: 8080
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/tests/statefulset.yaml b/charts/airlock/microgateway/4.3.3/templates/tests/statefulset.yaml
deleted file mode 100644
index 710a7b9f6..000000000
--- a/charts/airlock/microgateway/4.3.3/templates/tests/statefulset.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-{{- if .Values.tests.enabled -}}
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- namespace: {{ .Release.Namespace }}
- labels:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
-spec:
- serviceName: nginx
- replicas: 0
- selector:
- matchLabels:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 6 }}
- template:
- metadata:
- annotations:
- k8s.v1.cni.cncf.io/networks: default/airlock-microgateway-cni
- labels:
- sidecar.microgateway.airlock.com/inject: "true"
- sidecar.istio.io/inject: "false"
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 8 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 8 }}
- spec:
- containers:
- - image: cgr.dev/chainguard/nginx
- name: nginx
- ports:
- - containerPort: 8080
- volumeMounts:
- - mountPath: /var/lib/nginx/tmp/
- name: nginx-tmp
- - mountPath: /var/run
- name: nginx-run
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 12 }}
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - emptyDir: {}
- name: nginx-tmp
- - emptyDir: {}
- name: nginx-run
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/templates/tests/test-install.yaml b/charts/airlock/microgateway/4.3.3/templates/tests/test-install.yaml
index ab82abea7..12d8c8de7 100644
--- a/charts/airlock/microgateway/4.3.3/templates/tests/test-install.yaml
+++ b/charts/airlock/microgateway/4.3.3/templates/tests/test-install.yaml
@@ -2,14 +2,11 @@
apiVersion: v1
kind: Pod
metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-install"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-test-install"
namespace: {{ .Release.Namespace }}
labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- sidecar.istio.io/inject: "false"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
annotations:
helm.sh/hook: test
helm.sh/hook-delete-policy: before-hook-creation
@@ -19,209 +16,88 @@ spec:
- name: test
image: "bitnami/kubectl:{{ .Capabilities.KubeVersion.Major }}.{{ .Capabilities.KubeVersion.Minor }}"
securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ readOnly: true
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ readOnly: true
command:
- sh
- -c
- |
set -eu
- clean_up() {
- echo ""
- echo "### Clean up test resources"
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- echo ""
- echo "### Scale down '{{ include "airlock-microgateway.fullname" . }}-test-backend'"
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=60s
- sleep 3s
- echo ""
- }
-
fail() {
+ echo "Error: ${1}"
echo ""
- echo "### Error: ${1}"
- echo ""
-
- if kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway >/dev/null 2>&1; then
- echo ""
- echo 'Microgateway Sidecargateway status:'
- kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway -o jsonpath-as-json='{.status}' || true
- echo ""
- echo ""
- fi
-
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 >/dev/null 2>&1; then
- echo "Pod '{{ include "airlock-microgateway.fullname" . }}-test-backend-0':"
- kubectl describe -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 || true
- echo ""
- echo ""
- echo 'Logs of Nginx container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c nginx --tail 5 || true
- echo ""
- echo ""
- # Wait for engine logs
- sleep 10s
- echo 'Logs of Microgateway Engine container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c airlock-microgateway-engine --tail 5 || true
- fi
-
+ echo 'CNI installer logs:'
+ kubectl logs -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}} -c cni-installer
exit 1
}
- create_sidecargateway() {
- # create SidecarGateway resource for testing purposes
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- kubectl apply -f - </dev/null 2>&1; do sleep 1s; i=$((i+1)); done
- kubectl logs -f -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- kubectl delete pod --ignore-not-found=true -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- }
-
- {{- if .Values.operator.watchNamespaceSelector }}
- echo "### Verify that Namespace Selector matches Namespace '{{ .Release.Namespace }}'"
- if ! kubectl get namespace -l '{{ include "airlock-microgateway.watchNamespaceSelector.labelQuery" .Values.operator.watchNamespaceSelector }}' | grep -q {{ .Release.Namespace }}; then
- labels=$(kubectl get namespace {{ .Release.Namespace }} -o jsonpath={.metadata.labels} | jq | awk '{print " " $0}')
- fail {{printf `"Operator namespace '%s' is not part of the operator's watch scope. To execute 'helm test', the selector configured in the helm value 'operator.watchNamespaceSelector' must match the namespace's labels:\n* Current selector:\n%s\n\n* Current labels:\n$labels\n###"`
- .Release.Namespace
- (replace "\"" "\\\"" (replace "\n" "\\n" (.Values.operator.watchNamespaceSelector | toPrettyJson | indent 2)))
- }}
+ if ! kubectl rollout status --timeout=60s -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}}; then
+ fail 'CNI DaemonSet rollout did not complete within timeout'
fi
- echo ""
- {{- end }}
- trap clean_up EXIT
- echo ""
-
- echo "### Waiting for Microgateway Operator Deployments to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} --timeout=90s \
- deployments/{{ include "airlock-microgateway.operator.fullname" . }}; then
- fail 'Timout occurred'
+ echo "Checking whether CNI binary was installed"
+ if ! [ -f "/host/opt/cni/bin/{{ include "airlock-microgateway-cni.fullname" . }}" ]; then
+ fail 'CNI binary was not installed'
fi
- echo ""
- echo "### Scale '{{ include "airlock-microgateway.fullname" . }}-test-backend' to '1' replica"
- # scale to zero replicas to ensure no pods are present from previous runs
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=10s
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=1 --timeout=10s
- echo ""
-
- echo "### Waiting for backend pod"
- i=0
- while true; do
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0; then
- break
- elif [ $i -gt 3 ]; then
- fail 'Pod not ready'
- fi
- sleep 2s
- i=$((i+1))
- done
-
- echo "### Checking Microgateway Engine sidecar container was injected"
- if ! kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.spec.containers[?(@.name=="airlock-microgateway-engine")]}' | grep -q "airlock-microgateway-engine"; then
- fail 'Microgateway Engine sidecar container not injected'
+ echo "Checking whether CNI kubeconfig was installed"
+ if ! [ -f "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig" ]; then
+ fail 'CNI kubeconfig was not created'
fi
- echo "True"
- echo ""
- echo "### Checking for valid license"
- i=0
- while true; do
- if [ "$(kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.metadata.labels.sidecar\.microgateway\.airlock\.com/licensed}')" = 'true' ]; then
- break
- elif [ $i -gt 30 ]; then
- fail 'Microgateway license is missing or invalid'
- fi
- sleep 2s
- i=$((i+1))
- done
- echo "True"
- echo ""
+ echo "Checking whether CNI configuration was written"
+ case {{ .Values.config.installMode }} in
+ "chained")
+ for file in "/host/etc/cni/net.d/"*.conflist; do
+ if containsMGWCNIConf "${file}"; then
+ echo "Success"
+ exit 0
+ fi
+ done
+ ;;
+ "standalone")
+ if containsMGWCNIConf "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}.conflist"; then
+ echo "Success"
+ exit 0
+ fi
+ ;;
+ "manual")
+ echo "- Skipping because we are in 'manual' install mode"
+ echo "Success"
+ exit 0
+ ;;
+ esac
- echo "### Create SidecarGateway resource for testing"
- if ! create_sidecargateway ; then
- fail 'Creation of SidecarGateway resource failed'
- fi
- echo ""
-
- echo "### Waiting for '{{ include "airlock-microgateway.fullname" . }}-test-backend' to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --timeout=90s; then
- fail 'Timout occurred'
- fi
- echo ""
-
- echo "### Waiting for 'engine-config-valid' condition"
- if ! kubectl wait -n {{ .Release.Namespace }} pods --field-selector=metadata.name={{ include "airlock-microgateway.fullname" . }}-test-backend-0 --timeout=90s --for=condition=microgateway.airlock.com/engine-config-valid=True; then
- fail 'Configuration was never accepted by the Microgateway Engine'
- fi
- sleep 5s
- echo ""
- echo ""
-
- echo "### Checking whether a valid request is successful and returns HTTP status code '200'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "200 OK"; then
- fail 'A valid request was not successful'
- fi
- echo ""
- echo ""
-
- echo "### Checking whether a request with an injection attack is blocked and returns HTTP status code '400'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/?token='%20UnION%20all%20select%20A" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "400 Bad Request"; then
- fail 'A malicious request was not blocked'
- fi
- echo ""
- echo ""
-
- echo "### Installation of '{{ include "airlock-microgateway.fullname" . }}' succeeded"
- exit 0
- serviceAccountName: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ fail 'Configuration for plugin "{{ include "airlock-microgateway-cni.fullname" . }}" was not found'
+ serviceAccountName: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.3/values.schema.json b/charts/airlock/microgateway/4.3.3/values.schema.json
index 173d6b084..e087bd700 100644
--- a/charts/airlock/microgateway/4.3.3/values.schema.json
+++ b/charts/airlock/microgateway/4.3.3/values.schema.json
@@ -14,15 +14,6 @@
"commonAnnotations": {
"$ref": "#/definitions/StringMap"
},
- "crds": {
- "type": "object",
- "properties": {
- "skipVersionCheck": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
"imagePullSecrets": {
"type": "array",
"items": {
@@ -39,304 +30,120 @@
"additionalProperties": true
}
},
- "operator": {
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "podAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "podLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "resources": {
+ "type": "object"
+ },
+ "nodeSelector": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "affinity": {
+ "type": "object"
+ },
+ "rbac": {
"type": "object",
"properties": {
- "replicaCount": {
- "type": "integer",
- "minimum": 0
- },
- "updateStrategy": {
- "$ref": "#/definitions/UpdateStrategy"
- },
- "image": {
- "$ref": "#/definitions/Image"
- },
- "podAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "podLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "resources": {
- "type": "object"
- },
- "nodeSelector": {
- "$ref": "#/definitions/StringMap"
- },
- "tolerations": {
- "type": "array",
- "items": {
- "type": "object"
- }
- },
- "affinity": {
- "type": "object"
- },
- "config": {
- "type": "object",
- "properties": {
- "logLevel": {
- "type": "string",
- "enum": [
- "debug",
- "info",
- "warn",
- "error"
- ]
- }
- },
- "required": [
- "logLevel"
- ],
- "additionalProperties": false
- },
- "serviceAccount": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "annotations": {
- "$ref": "#/definitions/StringMap"
- },
- "name": {
- "type": "string"
- }
- },
- "required": [
- "annotations",
- "create",
- "name"
- ],
- "additionalProperties": false
- },
- "watchNamespaces": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "watchNamespaceSelector": {
- "$ref": "#/definitions/LabelSelector"
- },
- "rbac": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- },
- "serviceMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "oneOf": [
- {
- "properties": {
- "watchNamespaces": {
- "minItems": 1
- },
- "watchNamespaceSelector": {
- "additionalProperties": false
- }
- }
- },
- {
- "properties": {
- "watchNamespaces": {
- "maxItems": 0
- },
- "watchNamespaceSelector": {
- "$ref": "#/definitions/LabelSelector"
- }
- }
- }
- ],
- "required": [
- "affinity",
- "config",
- "image",
- "updateStrategy",
- "nodeSelector",
- "podAnnotations",
- "podLabels",
- "rbac",
- "replicaCount",
- "resources",
- "serviceAccount",
- "serviceAnnotations",
- "serviceLabels",
- "serviceMonitor",
- "tolerations"
- ],
- "additionalProperties": false
- },
- "engine": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- },
- "resources": {
- "type": "object"
- },
- "sidecar": {
- "type": "object",
- "properties":{
- "podMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "podMonitor"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "image",
- "resources",
- "sidecar"
- ],
- "additionalProperties": false
- },
- "networkValidator": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- }
- },
- "required": [
- "image"
- ],
- "additionalProperties": false
- },
- "sessionAgent": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- },
- "resources": {
- "type": "object"
- }
- },
- "required": [
- "image",
- "resources"
- ],
- "additionalProperties": false
- },
- "license": {
- "type": "object",
- "properties": {
- "secretName": {
- "type": "string",
- "minLength": 1
- }
- },
- "required": [
- "secretName"
- ],
- "additionalProperties": false
- },
- "dashboards": {
- "type": "object",
- "properties" : {
"create": {
"type": "boolean"
},
- "config": {
- "type": "object",
- "properties": {
- "grafana": {
- "type": "object",
- "properties": {
- "folderAnnotation": {
- "$ref": "#/definitions/NameValuePair"
- },
- "dashboardLabel": {
- "$ref": "#/definitions/NameValuePair"
- }
- },
- "required": [
- "folderAnnotation",
- "dashboardLabel"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "grafana"
- ],
- "additionalProperties": false
- },
- "instances": {
- "type": "object",
- "properties": {
- "overview": {
- "$ref": "#/definitions/DashboardInstance"
- },
- "license" : {
- "$ref": "#/definitions/DashboardInstance"
- },
- "blockMetrics" : {
- "$ref": "#/definitions/DashboardInstance"
- },
- "blockLogs" : {
- "$ref": "#/definitions/DashboardInstance"
- }
- },
- "required": [
- "overview",
- "license",
- "blockMetrics",
- "blockLogs"
- ],
- "additionalProperties": false
+ "createSCCRole": {
+ "type": "boolean"
}
},
"required": [
"create",
- "config",
- "instances"
+ "createSCCRole"
+ ],
+ "additionalProperties": false
+ },
+ "privileged": {
+ "type": "boolean"
+ },
+ "serviceAccount": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "annotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "annotations",
+ "create",
+ "name"
+ ],
+ "additionalProperties": false
+ },
+ "multusNetworkAttachmentDefinition": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "namespace": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "create",
+ "namespace"
+ ],
+ "additionalProperties": false
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "installMode": {
+ "type": "string",
+ "enum": [
+ "chained",
+ "standalone",
+ "manual"
+ ]
+ },
+ "logLevel": {
+ "type": "string",
+ "enum": [
+ "debug",
+ "info",
+ "warn",
+ "error"
+ ]
+ },
+ "cniNetDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "cniBinDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "excludeNamespaces": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "cniBinDir",
+ "cniNetDir",
+ "excludeNamespaces",
+ "installMode",
+ "logLevel"
],
"additionalProperties": false
},
@@ -357,18 +164,22 @@
}
},
"required": [
+ "affinity",
"commonAnnotations",
"commonLabels",
- "crds",
- "engine",
+ "config",
"fullnameOverride",
+ "image",
"imagePullSecrets",
- "license",
+ "multusNetworkAttachmentDefinition",
"nameOverride",
- "operator",
- "networkValidator",
- "sessionAgent",
- "dashboards",
+ "nodeSelector",
+ "podAnnotations",
+ "podLabels",
+ "privileged",
+ "rbac",
+ "resources",
+ "serviceAccount",
"tests"
],
"additionalProperties": false,
@@ -409,132 +220,6 @@
"tag"
],
"additionalProperties": false
- },
- "LabelSelector": {
- "type": "object",
- "properties": {
- "matchExpressions": {
- "type": "array",
- "items": {
- "type": "object",
- "required": [
- "key",
- "operator"
- ],
- "properties": {
- "key": {
- "type": "string"
- },
- "operator": {
- "type": "string"
- },
- "values": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
- }
- },
- "matchLabels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "additionalProperties": false
- },
- "UpdateStrategy": {
- "type": "object",
- "oneOf" : [
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RecreateType"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RollingUpdateType"
- },
- "rollingUpdate": {
- "$ref": "#/definitions/RollingUpdate"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- }
- ]
- },
- "RecreateType": {
- "type": "string",
- "enum": [
- "Recreate"
- ]
- },
- "RollingUpdateType": {
- "type": "string",
- "enum": [
- "RollingUpdate"
- ]
- },
- "RollingUpdate": {
- "type": "object",
- "properties": {
- "maxSurge": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- },
- "maxUnavailable": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- }
- },
- "anyOf": [
- {"required": ["maxSurge"]},
- {"required": ["maxUnavailable"]}
- ],
- "additionalProperties": false
- },
- "DashboardInstance" : {
- "type" : "object",
- "properties" : {
- "create" : {
- "type" : "boolean"
- }
- },
- "required" : [
- "create"
- ],
- "additionalProperties": false
- },
- "NameValuePair" : {
- "type" : "object",
- "properties" : {
- "name" : {
- "type": "string",
- "minLength": 1
- },
- "value" : {
- "type" : "string",
- "minLength": 1
- }
- },
- "required" : [
- "name",
- "value"
- ],
- "additionalProperties": false
}
}
}
diff --git a/charts/airlock/microgateway/4.3.3/values.yaml b/charts/airlock/microgateway/4.3.3/values.yaml
index 03fc87d21..3dc707bae 100644
--- a/charts/airlock/microgateway/4.3.3/values.yaml
+++ b/charts/airlock/microgateway/4.3.3/values.yaml
@@ -1,4 +1,4 @@
-# -- Allows overriding the name to use instead of "microgateway".
+# -- Allows overriding the name to use instead of "microgateway-cni".
nameOverride: ""
# -- Allows overriding the name to use as full name of resources.
fullnameOverride: ""
@@ -10,203 +10,75 @@ commonAnnotations: {}
imagePullSecrets: []
# - name: myRegistryKeySecretName
-crds:
- # -- Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs.
- # The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster
- # when performing a "helm install/upgrade".
- skipVersionCheck: false
-operator:
- # -- Number of replicas for the operator Deployment.
- replicaCount: 2
- # -- Specifies the operator update strategy.
- updateStrategy:
- type: RollingUpdate
- # Specifies the Airlock Microgateway Operator image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Operator image.
- repository: "quay.io/airlock/microgateway-operator"
- # -- Image tag to pull.
- tag: "4.3.3"
- # -- SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63").
- # Overrides tag when specified.
- digest: "sha256:6d3ebca355de0a67f0bf5f088a15b9410564e500033d3e1f534a2f49a05bf4c3"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Annotations to add to all Pods.
- podAnnotations: {}
- # -- Labels to add to all Pods.
- podLabels: {}
- # -- Annotations to add to the Service.
- serviceAnnotations: {}
- # prometheus.io/scrape: "true"
- # prometheus.io/port: "8080"
-
- # -- Labels to add to the Service.
- serviceLabels: {}
- # -- Resource restrictions to apply to the operator container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 1000m
- # memory: 512Mi
- # requests:
- # cpu: 100m
- # memory: 512Mi
-
- # -- Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes.
- nodeSelector: {}
- # -- Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes.
- tolerations: []
- # -- Custom affinity to apply to the operator Deployment. Used to influence the scheduling.
- affinity: {}
- # Parameters for the operator configuration.
- config:
- # -- Operator application log level.
- logLevel: "info"
- # Configures the generation of the ServiceAccount.
- serviceAccount:
- # -- Whether a ServiceAccount should be created.
- create: true
- # -- Annotations to add to the ServiceAccount.
- annotations: {}
- # -- Name of the ServiceAccount to use.
- # If not set and create is true, a name is generated using the fullname template.
- name: ""
- # -- Allows to restrict the operator to specific namespaces, depending on your needs.
- # For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`).
- # In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace.
- # For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`.
- # An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty.
- # Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces.
- # Please note that this feature requires a Premium license.
- watchNamespaces: []
- # -- Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector.
- # It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator.
- # This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings).
- # An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty.
- # Please note that this feature requires a Premium license.
- watchNamespaceSelector: {}
- # For further examples, see: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements.
- # matchLabels:
- # microgateway.airlock.com/enable: "true"
- # matchExpressions:
- # - { key: environment, operator: NotIn, values: [dev] }
-
- # Configures the generation of Role and RoleBinding as well as ClusterRoles and ClusterRoleBinding pairs for the ServiceAccount specified above.
- rbac:
- # -- Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function.
- create: true
- # Configures the generation of a Prometheus Operator ServiceMonitor.
- serviceMonitor:
- # -- Whether to create a ServiceMonitor resource for monitoring.
- create: false
- # -- Labels to add to the ServiceMonitor.
- labels: {}
- # release: ""
-engine:
- # Specifies the Airlock Microgateway Engine image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Engine image.
- repository: "quay.io/airlock/microgateway-engine"
- # -- Image tag to pull.
- tag: "4.3.3"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:3c0ebee0b560c8699723bfa433cd601b04b190c384e031d3789b83287fab7a9b"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Engine container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 500m
- # memory: 128Mi
- # requests:
- # cpu: 10m
- # memory: 40Mi
-
- # Additional configuration when deployed as a sidecar.
- sidecar:
- # Configures the generation of a Prometheus Operator PodMonitor.
- podMonitor:
- # -- Whether to create a PodMonitor resource for monitoring.
- create: false
- # -- Labels to add to the PodMonitor.
- labels: {}
- # release: ""
-networkValidator:
- # Specifies the Airlock Microgateway Network Validator image to be injected as an init-container.
- image:
- # -- Image repository from which to pull the netcat image for the Airlock Microgateway Network Validator init-container.
- repository: "cgr.dev/chainguard/netcat"
- # -- Image tag to pull.
- tag: ""
- # -- SHA256 image digest to pull (in the format "sha256:6051975a14c51b9d3b525a06004d62a4d323c08ca58e3468343095a55a42fff2").
- # Overrides tag when specified.
- digest: "sha256:6051975a14c51b9d3b525a06004d62a4d323c08ca58e3468343095a55a42fff2"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
-sessionAgent:
- # Specifies the Airlock Microgateway Session Agent image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Session Agent image.
- repository: "quay.io/airlock/microgateway-session-agent"
- # -- Image tag to pull.
- tag: "4.3.3"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:994bf4117adb74da4e05c22ffc168d9844bc68efa6a7fb96d73e849d1ef67b56"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Session Agent container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 150m
- # memory: 32Mi
- # requests:
- # cpu: 10m
- # memory: 8Mi
-license:
- # -- Name of the secret containing the "microgateway-license.txt" key.
- secretName: "airlock-microgateway-license"
-# Creates dashboards in the form of ConfigMaps that can be imported
-# by Grafana using its sidecar setup.
-dashboards:
- # -- Whether to create any ConfigMaps containing Grafana dashboards to import.
+# Specifies the Airlock Microgateway CNI image.
+image:
+ # -- Image repository from which to pull the Airlock Microgateway CNI image.
+ repository: "quay.io/airlock/microgateway-cni"
+ # -- Image tag to pull.
+ tag: "4.3.3"
+ # -- SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a").
+ # Overrides tag when specified.
+ digest: "sha256:16317b9a8430059c15175673ad53e31d9e882a1d1af6576214eb1534d8ea6937"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+# -- Annotations to add to all Pods.
+podAnnotations: {}
+# -- Labels to add to all Pods.
+podLabels: {}
+# -- Resource restrictions to apply to the CNI installer container.
+resources:
+ requests:
+ cpu: 10m
+ memory: 100Mi
+# -- NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes.
+nodeSelector:
+ kubernetes.io/os: linux
+# -- Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes.
+affinity: {}
+# Configures the generation of RBAC Roles and RoleBindings.
+rbac:
+ # -- Whether to create RBAC resources which are required for the CNI plugin to function.
+ create: true
+ # -- (OpenShift) Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint.
+ createSCCRole: false
+# -- Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift).
+privileged: false
+# Configures the generation of the ServiceAccount.
+serviceAccount:
+ # -- Whether a ServiceAccount should be created.
+ create: true
+ # -- Annotations to add to the ServiceAccount.
+ annotations: {}
+ # -- Name of the ServiceAccount to use.
+ # If not set and create is true, a name is generated using the fullname template.
+ name: ""
+# Configures the generation of a NetworkAttachmentDefinition for use with Multus CNI (OpenShift)
+multusNetworkAttachmentDefinition:
+ # -- Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods.
create: false
- config:
- # Configures the necessary label and annotations along with their values
- # to enable Grafana to correctly identify the ConfigMaps containing
- # dashboards and file them within a dedicated folder in the dashboard overview.
- # These settings need to match the Grafana sidecar configuration.
- grafana:
- folderAnnotation:
- # -- Name of the annotation containing the folder name to file dashboards into.
- name: "grafana_folder"
- # -- Name of the folder dashboards are filed into within the Grafana UI.
- value: "Airlock Microgateway"
- dashboardLabel:
- # -- Name of the label that lets Grafana identify ConfigMaps that represent dashboards.
- name: "grafana_dashboard"
- # -- Value of the label that lets Grafana identify ConfigMaps that represent dashboards.
- value: "1"
- instances:
- # Available dashboard instances that can be individually created/deployed.
- overview:
- # -- Whether to create the overview dashboard.
- create: true
- license:
- # -- Whether to create the license dashboard.
- create: true
- blockMetrics:
- # -- Whether to create the block metrics dashboard.
- create: true
- blockLogs:
- # -- Whether to create the block logs dashboard.
- create: true
-# Check whether the installation of the Airlock Microgateway Helm Chart was successful.
-# Requires a secret with a valid Airlock Microgateway license key already to be present.
+ # -- Namespace in which the NetworkAttachmentDefinition is deployed.
+ # Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces
+ # may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation
+ namespace: default
+# Parameters for the CNI installer configuration.
+config:
+ # -- Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers),
+ # as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift)
+ # or in `manual` mode, where no CNI network configuration is written.
+ installMode: "chained"
+ # -- Log level for the CNI installer and plugin.
+ logLevel: info
+ # -- Directory where the CNI config files reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node.
+ cniNetDir: "/etc/cni/net.d"
+ # -- Directory where the CNI plugin binaries reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node.
+ cniBinDir: "/opt/cni/bin"
+ # -- Namespaces for which this CNI plugin should not apply any modifications.
+ excludeNamespaces:
+ - kube-system
tests:
# -- Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts).
# If set to false, `helm test` will not run any tests.
diff --git a/charts/airlock/microgateway/4.3.4/.helmignore b/charts/airlock/microgateway/4.3.4/.helmignore
index 101ff5ac5..8561d2892 100644
--- a/charts/airlock/microgateway/4.3.4/.helmignore
+++ b/charts/airlock/microgateway/4.3.4/.helmignore
@@ -21,8 +21,7 @@
.idea/
*.tmproj
.vscode/
-# CRDs kustomization.yaml
-/crds/kustomization.yaml
+
# Helm unit tests
/tests
/validation
diff --git a/charts/airlock/microgateway/4.3.4/Chart.yaml b/charts/airlock/microgateway/4.3.4/Chart.yaml
index afc603857..002c30798 100644
--- a/charts/airlock/microgateway/4.3.4/Chart.yaml
+++ b/charts/airlock/microgateway/4.3.4/Chart.yaml
@@ -9,15 +9,15 @@ annotations:
- name: Airlock Microgateway Forum
url: https://forum.airlock.com/
catalog.cattle.io/certified: partner
- catalog.cattle.io/display-name: Airlock Microgateway
+ catalog.cattle.io/display-name: Airlock Microgateway CNI
catalog.cattle.io/kube-version: '>=1.25.0-0'
- catalog.cattle.io/release-name: microgateway
- charts.openshift.io/name: Airlock Microgateway
+ catalog.cattle.io/release-name: microgateway-cni
+ charts.openshift.io/name: Airlock Microgateway CNI
apiVersion: v2
appVersion: 4.3.4
-description: A Helm chart for deploying the Airlock Microgateway
+description: A Helm chart for deploying the Airlock Microgateway CNI plugin
home: https://www.airlock.com/en/microgateway
-icon: file://assets/icons/microgateway.svg
+icon: file://assets/icons/microgateway-cni.svg
keywords:
- WAF
- Web Application Firewall
@@ -30,14 +30,13 @@ keywords:
- Filtering
- DevSecOps
- shift left
-- control plane
-- Operator
+- CNI
kubeVersion: '>=1.25.0-0'
maintainers:
- email: support@airlock.com
name: Airlock
url: https://www.airlock.com/
-name: microgateway
+name: microgateway-cni
sources:
- https://github.com/airlock/microgateway
type: application
diff --git a/charts/airlock/microgateway/4.3.4/README.md b/charts/airlock/microgateway/4.3.4/README.md
index 5028932b1..1559e00a4 100644
--- a/charts/airlock/microgateway/4.3.4/README.md
+++ b/charts/airlock/microgateway/4.3.4/README.md
@@ -1,4 +1,4 @@
-# Airlock Microgateway
+# Airlock Microgateway CNI
![Version: 4.3.4](https://img.shields.io/badge/Version-4.3.4-informational?style=flat-square) ![AppVersion: 4.3.4](https://img.shields.io/badge/AppVersion-4.3.4-informational?style=flat-square)
@@ -40,58 +40,43 @@ Check the official documentation at **[docs.airlock.com](https://docs.airlock.co
The instructions below provide a quick start guide. Detailed information are provided in the **[manual](https://docs.airlock.com/microgateway/latest/)**.
## Prerequisites
-* [Airlock Microgateway CNI](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni)
-* [Airlock Microgateway License](#obtain-airlock-microgateway-license)
-* [cert-manager](https://cert-manager.io/)
* [helm](https://helm.sh/docs/intro/install/) (>= v3.8.0)
-In order to use Airlock Microgateway you need a license and the cert-manager. You may either request a community license free of charge or purchase a premium license.
-For an easy start in non-production environments, you may deploy the same cert-manager we are using internally for testing.
-### Obtain Airlock Microgateway License
-1. Either request a community or premium license
- * Community license: [airlock.com/microgateway-community](https://airlock.com/en/microgateway-community)
- * Premium license: [airlock.com/microgateway-premium](https://airlock.com/en/microgateway-premium)
-2. Check your inbox and save the license file microgateway-license.txt locally.
-
-> See [Community vs. Premium editions in detail](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) to choose the right license type.
-### Deploy cert-manager
-```bash
-helm repo add jetstack https://charts.jetstack.io
-helm install cert-manager jetstack/cert-manager --version '1.15.1' -n cert-manager --create-namespace --set crds.enabled=true --wait
-```
-
-## Deploy Airlock Microgateway Operator
-
-> This guide assumes a microgateway-license.txt file is present in the working directory.
-
-1. Install CRDs and Operator.
+## Deploy Airlock Microgateway CNI
+1. Install the CNI Plugin with Helm.
+ > **Note**: Certain environments such as OpenShift or GKE require non-default configurations when installing the CNI plugin. For the most common setups, values files are provided in the [chart folder](/deploy/charts/airlock-microgateway-cni).
```bash
- # Create namespace
- kubectl create namespace airlock-microgateway-system
-
- # Install License
- kubectl -n airlock-microgateway-system create secret generic airlock-microgateway-license --from-file=microgateway-license.txt
-
- # Install Operator (CRDs are included via the standard Helm 3 mechanism, i.e. Helm will handle initial installation but not upgrades)
- helm install airlock-microgateway -n airlock-microgateway-system oci://quay.io/airlockcharts/microgateway --version '4.3.4' --wait
+ # Standard setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.3.4'
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
```
+ ```bash
+ # GKE setup
+ helm install airlock-microgateway-cni -n kube-system oci://quay.io/airlockcharts/microgateway-cni --version '4.3.4' -f https://raw.githubusercontent.com/airlock/microgateway/4.3.4/deploy/charts/airlock-microgateway-cni/gke-values.yaml
+ kubectl -n kube-system rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ ```bash
+ # OpenShift setup
+ helm install airlock-microgateway-cni -n openshift-operators oci://quay.io/airlockcharts/microgateway-cni --version '4.3.4' -f https://raw.githubusercontent.com/airlock/microgateway/4.3.4/deploy/charts/airlock-microgateway-cni/openshift-values.yaml
+ kubectl -n openshift-operators rollout status daemonset -l app.kubernetes.io/instance=airlock-microgateway-cni
+ ```
+ **Important:** On OpenShift, all pods which should be protected by Airlock Microgateway must explicitly reference the Airlock Microgateway CNI NetworkAttachmentDefinition via the annotation `k8s.v1.cni.cncf.io/networks` (see [documentation](https://docs.airlock.com/microgateway/latest/#data/1658483168033.html) for details).
2. (Recommended) You can verify the correctness of the installation with `helm test`.
```bash
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.3.4'
- helm test airlock-microgateway -n airlock-microgateway-system --logs
- helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.3.4'
+ # Standard and GKE setup
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.4'
+ helm test airlock-microgateway-cni -n kube-system --logs
+ helm upgrade airlock-microgateway-cni -n kube-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.4'
+ ```
+ ```bash
+ # OpenShift setup
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.4'
+ helm test airlock-microgateway-cni -n openshift-operators --logs
+ helm upgrade airlock-microgateway-cni -n openshift-operators --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway-cni --version '4.3.4'
```
-### Upgrading CRDs
-
-The `helm install/upgrade` command currently does not support upgrading CRDs that already exist in the cluster.
-CRDs should instead be manually upgraded before upgrading the Operator itself via the following command:
-```bash
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=4.3.4 --server-side --force-conflicts
-```
-
-**Note**: Certain GitOps solutions such as e.g. Argo CD or Flux CD have their own mechanisms for automatically upgrading CRDs included with Helm charts.
+ Consult our [documentation](https://docs.airlock.com/microgateway/latest/#data/1699611533587.html) in case of any installation error.
## Support
@@ -104,61 +89,33 @@ For the community edition, check our **[Airlock community forum](https://forum.a
| Key | Type | Default | Description |
|-----|------|---------|-------------|
+| affinity | object | `{}` | Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes. |
| commonAnnotations | object | `{}` | Annotations to add to all resources. |
| commonLabels | object | `{}` | Labels to add to all resources. |
-| crds.skipVersionCheck | bool | `false` | Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs. The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster when performing a "helm install/upgrade". |
-| dashboards.config.grafana.dashboardLabel.name | string | `"grafana_dashboard"` | Name of the label that lets Grafana identify ConfigMaps that represent dashboards. |
-| dashboards.config.grafana.dashboardLabel.value | string | `"1"` | Value of the label that lets Grafana identify ConfigMaps that represent dashboards. |
-| dashboards.config.grafana.folderAnnotation.name | string | `"grafana_folder"` | Name of the annotation containing the folder name to file dashboards into. |
-| dashboards.config.grafana.folderAnnotation.value | string | `"Airlock Microgateway"` | Name of the folder dashboards are filed into within the Grafana UI. |
-| dashboards.create | bool | `false` | Whether to create any ConfigMaps containing Grafana dashboards to import. |
-| dashboards.instances.blockLogs.create | bool | `true` | Whether to create the block logs dashboard. |
-| dashboards.instances.blockMetrics.create | bool | `true` | Whether to create the block metrics dashboard. |
-| dashboards.instances.license.create | bool | `true` | Whether to create the license dashboard. |
-| dashboards.instances.overview.create | bool | `true` | Whether to create the overview dashboard. |
-| engine.image.digest | string | `"sha256:91e05c509bed3b51ff4888d7475980d56cbc85db121aa766d1bde413204f9070"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| engine.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| engine.image.repository | string | `"quay.io/airlock/microgateway-engine"` | Image repository from which to pull the Airlock Microgateway Engine image. |
-| engine.image.tag | string | `"4.3.4"` | Image tag to pull. |
-| engine.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Engine container. |
-| engine.sidecar.podMonitor.create | bool | `false` | Whether to create a PodMonitor resource for monitoring. |
-| engine.sidecar.podMonitor.labels | object | `{}` | Labels to add to the PodMonitor. |
+| config.cniBinDir | string | `"/opt/cni/bin"` | Directory where the CNI plugin binaries reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node. |
+| config.cniNetDir | string | `"/etc/cni/net.d"` | Directory where the CNI config files reside on the host. This path can either be found in the documentation of your Kubernetes distribution or CNI provider. It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node. |
+| config.excludeNamespaces | list | `["kube-system"]` | Namespaces for which this CNI plugin should not apply any modifications. |
+| config.installMode | string | `"chained"` | Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers), as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. |
+| config.logLevel | string | `"info"` | Log level for the CNI installer and plugin. |
| fullnameOverride | string | `""` | Allows overriding the name to use as full name of resources. |
+| image.digest | string | `"sha256:1e01310b3ad8566e9b39ee539ed5c959049aadda1a18c1a534e96d8865e20172"` | SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a"). Overrides tag when specified. |
+| image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| image.repository | string | `"quay.io/airlock/microgateway-cni"` | Image repository from which to pull the Airlock Microgateway CNI image. |
+| image.tag | string | `"4.3.4"` | Image tag to pull. |
| imagePullSecrets | list | `[]` | ImagePullSecrets to use when pulling images. |
-| license.secretName | string | `"airlock-microgateway-license"` | Name of the secret containing the "microgateway-license.txt" key. |
-| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway". |
-| networkValidator.image.digest | string | `"sha256:7a73d4b82a2d4165bbc5efa55de4fee9d43f2b1c1edb3505cdc8afd1361bad9b"` | SHA256 image digest to pull (in the format "sha256:7a73d4b82a2d4165bbc5efa55de4fee9d43f2b1c1edb3505cdc8afd1361bad9b"). Overrides tag when specified. |
-| networkValidator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| networkValidator.image.repository | string | `"cgr.dev/chainguard/netcat"` | Image repository from which to pull the netcat image for the Airlock Microgateway Network Validator init-container. |
-| networkValidator.image.tag | string | `""` | Image tag to pull. |
-| operator.affinity | object | `{}` | Custom affinity to apply to the operator Deployment. Used to influence the scheduling. |
-| operator.config.logLevel | string | `"info"` | Operator application log level. |
-| operator.image.digest | string | `"sha256:6819c78d5570de66edce6c13964c6e1b4cc4746d0c0bc6f4975cd38e324828c0"` | SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63"). Overrides tag when specified. |
-| operator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| operator.image.repository | string | `"quay.io/airlock/microgateway-operator"` | Image repository from which to pull the Airlock Microgateway Operator image. |
-| operator.image.tag | string | `"4.3.4"` | Image tag to pull. |
-| operator.nodeSelector | object | `{}` | Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes. |
-| operator.podAnnotations | object | `{}` | Annotations to add to all Pods. |
-| operator.podLabels | object | `{}` | Labels to add to all Pods. |
-| operator.rbac.create | bool | `true` | Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function. |
-| operator.replicaCount | int | `2` | Number of replicas for the operator Deployment. |
-| operator.resources | object | `{}` | Resource restrictions to apply to the operator container. |
-| operator.serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
-| operator.serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
-| operator.serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
-| operator.serviceAnnotations | object | `{}` | Annotations to add to the Service. |
-| operator.serviceLabels | object | `{}` | Labels to add to the Service. |
-| operator.serviceMonitor.create | bool | `false` | Whether to create a ServiceMonitor resource for monitoring. |
-| operator.serviceMonitor.labels | object | `{}` | Labels to add to the ServiceMonitor. |
-| operator.tolerations | list | `[]` | Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes. |
-| operator.updateStrategy | object | `{"type":"RollingUpdate"}` | Specifies the operator update strategy. |
-| operator.watchNamespaceSelector | object | `{}` | Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector. It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator. This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings). An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty. Please note that this feature requires a Premium license. |
-| operator.watchNamespaces | list | `[]` | Allows to restrict the operator to specific namespaces, depending on your needs. For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`). In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace. For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`. An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty. Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces. Please note that this feature requires a Premium license. |
-| sessionAgent.image.digest | string | `"sha256:df4e50d0929cb4c5e4486452979b59ec17f5e49a1516b685acd3a1ab0ddb3cf4"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
-| sessionAgent.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
-| sessionAgent.image.repository | string | `"quay.io/airlock/microgateway-session-agent"` | Image repository from which to pull the Airlock Microgateway Session Agent image. |
-| sessionAgent.image.tag | string | `"4.3.4"` | Image tag to pull. |
-| sessionAgent.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Session Agent container. |
+| multusNetworkAttachmentDefinition.create | bool | `false` | Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods. |
+| multusNetworkAttachmentDefinition.namespace | string | `"default"` | Namespace in which the NetworkAttachmentDefinition is deployed. Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation |
+| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway-cni". |
+| nodeSelector | object | `{"kubernetes.io/os":"linux"}` | NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes. |
+| podAnnotations | object | `{}` | Annotations to add to all Pods. |
+| podLabels | object | `{}` | Labels to add to all Pods. |
+| privileged | bool | `false` | Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift). |
+| rbac.create | bool | `true` | Whether to create RBAC resources which are required for the CNI plugin to function. |
+| rbac.createSCCRole | OpenShift | `false` | Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint. |
+| resources | object | `{"requests":{"cpu":"10m","memory":"100Mi"}}` | Resource restrictions to apply to the CNI installer container. |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
+| serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
+| serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
| tests.enabled | bool | `false` | Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts). If set to false, `helm test` will not run any tests. |
## License
diff --git a/charts/airlock/microgateway/4.3.4/app-readme.md b/charts/airlock/microgateway/4.3.4/app-readme.md
deleted file mode 100644
index e32cac025..000000000
--- a/charts/airlock/microgateway/4.3.4/app-readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Airlock Microgateway
-
-*Airlock Microgateway is a Kubernetes native WAAP (Web Application and API Protection) solution to protect microservices.*
-
-## Features
-* Kubernetes native integration with its Operator, Custom Resource Definitions, hot-reload, automatic sidecar injection.
-* Reverse proxy functionality with request routing rules, TLS termination and remote IP extraction
-* Using native Envoy HTTP filters like Lua scripting, RBAC, ext_authz, JWT authentication
-* Content security filters for protecting against known attacks (OWASP Top 10)
-* Access control to allow only authenticated users to access the protected services
-* API security features like JSON parsing or OpenAPI specification enforcement
-
-For a list of all features, view the **[comparison of the community and premium edition](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html)**.
-
-## Requirements
-* [Airlock Microgateway CNI Helm Chart](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni) (Also available as Rancher Chart)
-* [Airlock Microgateway License](https://github.com/airlock/microgateway?tab=readme-ov-file#obtain-airlock-microgateway-license) (After obtaining the license install it according to the [documentation](https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-operator))
-* [cert-manager](https://cert-manager.io/docs/installation/)
-
-## Documentation and links
-
-Check the official documentation at **[docs.airlock.com](https://docs.airlock.com/microgateway/latest/)** or the product website at **[airlock.com/microgateway](https://www.airlock.com/en/microgateway)**. The links below point out the most interesting documentation sites when starting with Airlock Microgateway.
-
-* [Getting Started](https://docs.airlock.com/microgateway/latest/#data/1660804708742.html)
-* [System Architecture](https://docs.airlock.com/microgateway/latest/#data/1660804709650.html)
-* [Installation](https://docs.airlock.com/microgateway/latest/#data/1660804708637.html)
-* [Troubleshooting](https://docs.airlock.com/microgateway/latest/#data/1659430054787.html)
-* [GitHub](https://github.com/airlock/microgateway)
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/crds/accesscontrols.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/accesscontrols.microgateway.airlock.com.yaml
deleted file mode 100644
index 9dc81f14d..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/accesscontrols.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,124 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: accesscontrols.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: AccessControl
- listKind: AccessControlList
- plural: accesscontrols
- singular: accesscontrol
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: AccessControl specifies the options to perform access control with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies how the Airlock Microgateway Engine performs access control.
- properties:
- policies:
- description: Policies configures access control policies.
- items:
- properties:
- authorization:
- description: Authorization configures how requests are authorized. An empty object value {} disables authorization.
- properties:
- authentication:
- description: Authentication specifies that clients need to be authenticated with the provided method.
- properties:
- oidc:
- description: OIDC configures client authentication using OpenID Connect.
- properties:
- oidcRelyingPartyRef:
- description: OIDCRelyingPartyRef configures how the Airlock Microgateway Engine interacts with the OpenID provider.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - oidcRelyingPartyRef
- type: object
- type: object
- type: object
- identityPropagation:
- description: IdentityPropagation configures how the authenticated user's identity is communicated to the protected application.
- properties:
- actions:
- description: Actions specifies the propagation actions.
- items:
- properties:
- identityPropagationRef:
- description: IdentityPropagationRef selects an IdentityPropagation to apply.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - identityPropagationRef
- type: object
- type: array
- onFailure:
- description: |-
- OnFailure configures what should happen, if an identity propagation fails. Meaning of the possible values:
- _Pass_: The request should be forwarded to the upstream, without including the information from the failed identity propagations.
- enum:
- - Pass
- type: string
- required:
- - actions
- - onFailure
- type: object
- required:
- - authorization
- type: object
- maxItems: 1
- minItems: 1
- type: array
- required:
- - policies
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/contentsecurities.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/contentsecurities.microgateway.airlock.com.yaml
deleted file mode 100644
index e63a5b1eb..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/contentsecurities.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,139 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: contentsecurities.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: ContentSecurity
- listKind: ContentSecurityList
- plural: contentsecurities
- singular: contentsecurity
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: ContentSecurity specifies the options to secure an upstream web application with a Microgateway Engine container.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specifies the options to secure an upstream web application with a Microgateway Engine container.
- properties:
- apiProtection:
- description: |-
- APIProtection defines the relevant configurations to protect APIs.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- graphQLRef:
- description: |-
- GraphQLRef selects the relevant GraphQL configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- openAPIRef:
- description: |-
- OpenAPIRef selects the relevant OpenAPI configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- filter:
- description: |-
- Filter defines the set of filters, e.g. Airlock Deny Rules, to be applied to incoming requests
- to protect against various attack patterns.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- denyRulesRef:
- description: |-
- DenyRulesRef selects the relevant DenyRules configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- headerRewritesRef:
- description: |-
- HeaderRewritesRef selects the relevant HeaderRewrites.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- limitsRef:
- description: |-
- LimitsRef selects the relevant Limits configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- parserRef:
- description: |-
- ParserRef selects the relevant Parser configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/denyrules.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/denyrules.microgateway.airlock.com.yaml
deleted file mode 100644
index 7108ee5e0..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/denyrules.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,1804 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: denyrules.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: DenyRules
- listKind: DenyRulesList
- plural: denyrules
- singular: denyrules
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- DenyRules configures request filtering using Airlock built-in and custom deny rules.
- Deny rules establish a negative security model. They define prohibited patterns which, when a match is found in a request, lead to it being blocked from reaching the upstream web application.
- To handle possible false positives, lower the security level or define fine-granular deny rule exceptions
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired deny rules behavior.
- properties:
- request:
- description: Request configures deny rules for downstream requests.
- properties:
- builtIn:
- description: BuiltIn configures the built-in deny rules.
- properties:
- exceptions:
- description: Exceptions allows to define exceptions for specific requests and deny rules.
- items:
- description: |-
- DenyRulesException defines an exception for deny rules. Exceptions may be defined by any or a combination of the following elements: blockedData (the request data causing a block) or requestConditions (properties of a request without taking into consideration the reason why a request has been blocked).
- At least one of blockedData and requestConditions must be set.
- properties:
- blockedData:
- description: BlockedData defines an exception based on the request data causing the block.
- properties:
- graphQL:
- description: |-
- GraphQL defines an exception based on a blocked GraphQL query.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- argument:
- description: |-
- Argument defines an argument of a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field defines a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of an argument of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- header:
- description: |-
- Header defines an exception based on a blocked header.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: |-
- JSON defines an exception based on a blocked JSON property.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- jsonPath:
- description: |-
- JSONPath defines the JSONPath pattern to match the path within the JSON.
- Expressions in JSONPath i.e. `?(expr)` are not supported.
- minLength: 1
- type: string
- key:
- description: |-
- Key defines the key of the JSON property.
- At most one of key and value can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of the JSON property.
- At most one of key and value can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- parameter:
- description: |-
- Parameter defines an exception based on a blocked parameter.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- name:
- description: Name defines the name of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- source:
- default: Any
- description: Source defines the source of the parameter.
- enum:
- - Query
- - Post
- - Any
- type: string
- value:
- description: Value defines the value of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- path:
- description: |-
- Path defines an exception based on the blocked path.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- pathSegment:
- description: |-
- PathSegment defines an exception based on a blocked path segment.
- Only one of parameter, header, path, pathSegment, json or graphQL can be set.
- properties:
- segments:
- description: Segments defines the position of a segment within the path.
- properties:
- index:
- description: Index specifies an exact path segment position by index (0-based).
- minimum: 0
- type: integer
- type: object
- value:
- description: Value defines the value of a path segment.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines an exception based on a property of a request without taking into consideration the reason why a request has been blocked.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- ruleKeys:
- description: RuleKeys restricts the exception to a set of deny rules.
- items:
- description: |-
- A deny rule name can be any of the following values:
- ENCODING |
- EXPLOIT |
- HPP |
- HTML |
- IDOR |
- LDAP |
- NOSQL |
- OGNL |
- PHP |
- PROTOCOL |
- SANITY |
- SCANNING |
- SQL |
- TEMPLATE |
- UNIXCMD |
- WINCMD |
- XSS
- enum:
- - ENCODING
- - EXPLOIT
- - HPP
- - HTML
- - IDOR
- - LDAP
- - NOSQL
- - OGNL
- - PHP
- - PROTOCOL
- - SANITY
- - SCANNING
- - SQL
- - TEMPLATE
- - UNIXCMD
- - WINCMD
- - XSS
- type: string
- minItems: 1
- type: array
- type: object
- type: array
- overrides:
- description: Overrides allows to override the builtIn settings for specific deny rules.
- items:
- description: DenyRulesOverride allows to override the builtIn settings for specific deny rules.
- properties:
- conditions:
- description: Conditions select which built-in deny rules' settings will be adjusted.
- properties:
- ruleKeys:
- description: RuleKeys is a list of built-in deny rule names.
- items:
- description: |-
- A deny rule name can be any of the following values:
- ENCODING |
- EXPLOIT |
- HPP |
- HTML |
- IDOR |
- LDAP |
- NOSQL |
- OGNL |
- PHP |
- PROTOCOL |
- SANITY |
- SCANNING |
- SQL |
- TEMPLATE |
- UNIXCMD |
- WINCMD |
- XSS
- enum:
- - ENCODING
- - EXPLOIT
- - HPP
- - HTML
- - IDOR
- - LDAP
- - NOSQL
- - OGNL
- - PHP
- - PROTOCOL
- - SANITY
- - SCANNING
- - SQL
- - TEMPLATE
- - UNIXCMD
- - WINCMD
- - XSS
- type: string
- minItems: 1
- type: array
- types:
- description: Types defines the type of attributes the override should be applied on. If Types are defined without any RuleKeys the override is applied to all deny rules.
- items:
- description: |-
- A deny rule override type name can be any of the following values:
- Header |
- Parameter |
- Path |
- JSON |
- GraphQL
- enum:
- - Header
- - Parameter
- - Path
- - PathSegment
- - JSON
- - GraphQL
- type: string
- minItems: 0
- type: array
- type: object
- settings:
- description: Settings override the corresponding properties for the selected rules.
- properties:
- level:
- description: Level specifies the filter strength.
- enum:
- - Unfiltered
- - Basic
- - Standard
- - Strict
- type: string
- threatHandlingMode:
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: array
- settings:
- description: Settings contains the keys which will be adjusted.
- properties:
- level:
- default: Standard
- description: Level represents a set of deny rules with different filter strengths.
- enum:
- - Unfiltered
- - Basic
- - Standard
- - Strict
- type: string
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a deny rule matches.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- custom:
- description: Custom allows configuring additional deny rules.
- properties:
- rules:
- description: Rules defines list of additional deny rules.
- items:
- properties:
- blockData:
- description: BlockData specifies the request data which should cause a block.
- properties:
- graphQL:
- description: |-
- GraphQL specifies to block requests containing a matching GraphQL property.
- At least one of field, argument and value must be set.
- properties:
- argument:
- description: |-
- Argument defines an argument of a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field defines a field of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value defines the value of an argument of the GraphQL query.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- header:
- description: |-
- Header specifies to block requests containing a matching header.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: |-
- JSON specifies to block requests containing a matching JSON property in the body.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- key:
- description: Key defines the key of a JSON object.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a JSON object.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- parameter:
- description: |-
- Parameter specifies to block requests containing a matching parameter.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- name:
- description: Name defines the name of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a parameter.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- path:
- description: |-
- Path specifies to block requests with a matching path.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- matcher:
- description: Matcher specifies which path to block.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- pathSegment:
- description: |-
- PathSegment specifies to block requests containing a matching path segment.
- Only one of parameter, header, path, pathSegment or json can be set.
- properties:
- segments:
- description: |-
- Segments restricts which path segments are filtered by this rule.
- If not specified, all segments of a path are filtered.
- properties:
- index:
- description: Index restricts the rule to the path segment at this index (0-based).
- minimum: 0
- type: integer
- type: object
- value:
- description: Value specifies which path segment values to block.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- required:
- - value
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this rule to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- ruleKey:
- description: RuleKey defines a technical key for the deny rule. Must be unique.
- minLength: 1
- pattern: ^[A-Z][A-Z0-9_]*$
- type: string
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a deny rule matches.
- enum:
- - Block
- - LogOnly
- type: string
- required:
- - blockData
- - ruleKey
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - ruleKey
- x-kubernetes-list-type: map
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/envoyclusters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/envoyclusters.microgateway.airlock.com.yaml
deleted file mode 100644
index 35dda9f2f..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/envoyclusters.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: envoyclusters.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyCluster
- listKind: EnvoyClusterList
- plural: envoyclusters
- singular: envoycluster
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: EnvoyCluster is an additional Envoy Cluster resource which is added to those defined by the Airlock Microgateway.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired additional Envoy cluster.
- properties:
- value:
- description: Value defines the Envoy Cluster which is added to those configured by the Airlock Microgateway.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/envoyconfigurations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/envoyconfigurations.microgateway.airlock.com.yaml
deleted file mode 100644
index c4f61f20d..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/envoyconfigurations.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: envoyconfigurations.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyConfiguration
- listKind: EnvoyConfigurationList
- plural: envoyconfigurations
- singular: envoyconfiguration
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .status.status
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- EnvoyConfiguration is the Schema for the envoyconfigurations API
- {{% notice warning %}} EnvoyConfiguration resources may contain sensitive information and thus RBAC permissions should be granted with care. {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: EnvoyConfigurationSpec defines the desired state of EnvoyConfiguration
- properties:
- envoyResources:
- properties:
- clusters:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- endpoints:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- extensions:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- listeners:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- routes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- runtimes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- scopedRoutes:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- secrets:
- items:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: array
- type: object
- envoyResourcesRaw:
- description: |-
- EnvoyResourcesRaw defines the desired state for each resource type. The resources are stored as zstd compressed JSON bytes.
- For debugging purposes, the resources can be inspected with the following command: `kubectl get envoyconfiguration -ojsonpath='{.spec.envoyResourcesRaw}' | base64 -d | zstd -d | jq`
- format: byte
- type: string
- nodeID:
- description: '**Deprecated:** This field is now ignored as NodeID is always derived from the resource name.'
- type: string
- type: object
- status:
- description: EnvoyConfigurationStatus defines the observed state of EnvoyConfiguration
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- description: Last time the condition transitioned from one status to another.
- format: date-time
- type: string
- message:
- description: A human-readable message indicating details about the transition.
- type: string
- reason:
- description: The reason for the condition's last transition.
- type: string
- status:
- description: Status of the condition, one of True, False, Unknown.
- type: string
- type:
- description: Type of EnvoyConfiguration condition.
- type: string
- required:
- - status
- - type
- type: object
- type: array
- status:
- type: string
- xds:
- properties:
- resourceTypes:
- additionalProperties:
- description: XdsResourceTypeSyncStatus defines the sync status of xDS for a specific resource type
- properties:
- errorMessage:
- description: ErrorMessage defines an optional message why the currently served resources of this resource type are rejected by the client.
- type: string
- resources:
- additionalProperties:
- description: XdsResourceStatus defines the status of xDS for a specific resource
- properties:
- version:
- description: Version defines the version which is currently served for this resource.
- type: string
- required:
- - version
- type: object
- description: Resources defines the resources which are currently served for this resource type.
- type: object
- status:
- description: Status defines the current sync status of this resource type.
- type: string
- version:
- description: Version defines the version which is currently served for this resource type.
- type: string
- required:
- - resources
- - status
- - version
- type: object
- description: ResourceTypes defines the sync statuses for each resource type.
- type: object
- version:
- description: Version defines the version of the underlying xDS snapshot.
- type: integer
- required:
- - version
- type: object
- required:
- - status
- - xds
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/envoyhttpfilters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/envoyhttpfilters.microgateway.airlock.com.yaml
deleted file mode 100644
index 538ff672f..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/envoyhttpfilters.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: envoyhttpfilters.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: EnvoyHTTPFilter
- listKind: EnvoyHTTPFilterList
- plural: envoyhttpfilters
- singular: envoyhttpfilter
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: EnvoyHTTPFilter is an additional Envoy HTTP Filter resource which is added to those defined by the Airlock Microgateway.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired additional Envoy HTTP filter.
- properties:
- value:
- description: Value defines the HTTP filter which is added to those configured by the Airlock Microgateway.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/graphqls.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/graphqls.microgateway.airlock.com.yaml
deleted file mode 100644
index 165abe0a2..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/graphqls.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,88 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: graphqls.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: GraphQL
- listKind: GraphQLList
- plural: graphqls
- singular: graphql
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: GraphQL contains the configuration for the GraphQL specification.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired GraphQL specification.
- properties:
- settings:
- description: Settings defines the settings to configure GraphQL.
- properties:
- allowIntrospection:
- default: true
- description: AllowIntrospection specifies if the introspection system is exposed.
- type: boolean
- allowMutations:
- default: true
- description: AllowMutations specifies if mutations are allowed.
- type: boolean
- schema:
- description: Specifies the GraphQL schema.
- properties:
- source:
- description: Source specifies the GraphQL schema to be enforced.
- properties:
- configMapRef:
- description: ConfigMapRef references the configmap by its name containing the well-known key 'schema.graphql'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- required:
- - source
- type: object
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.4/crds/headerrewrites.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/headerrewrites.microgateway.airlock.com.yaml
deleted file mode 100644
index 72a1067f9..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/headerrewrites.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,759 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: headerrewrites.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: HeaderRewrites
- listKind: HeaderRewritesList
- plural: headerrewrites
- singular: headerrewrites
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: HeaderRewrites is the Schema for the headerrewrites API
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired header rewriting behavior.
- properties:
- request:
- description: Request defines manipulations on upstream request headers.
- properties:
- add:
- description: Add defines which request headers will be added before forwarding to the upstream.
- properties:
- custom:
- description: |-
- Custom allows configuring additional upstream request headers.
- Add selected headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which request headers will be forwarded to the upstream.
- This can either be allHeaders or matchingHeaders.
- Default: matchingHeaders: {...}
- properties:
- allHeaders:
- description: AllHeaders specifies that all request headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which request headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- standardHeaders:
- default: true
- description: StandardHeaders defines whether the request headers which are forwarded to the upstream will be restricted to a set of common request headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which request headers will be removed before forwarding to the upstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream request headers.
- properties:
- alternativeForwardedHeaders:
- default: true
- description: |-
- AlternativeForwardedHeaders removes downstream request headers which could potentially
- be abused to alter the upstream's view of the remote connection.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream request headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- response:
- description: Response defines manipulations on upstream response headers.
- properties:
- add:
- description: Add defines which response headers will be added before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- csp:
- default: true
- description: |-
- CSP sets a content security policy which allows only same-origin requests except for images
- if the 'Content-Security-Policy' header is not set by the upstream.
- type: boolean
- featurePolicy:
- default: false
- description: |-
- FeaturePolicy sets a feature policy which prevents cross-origin use of several browser features
- if the 'Feature-Policy' header is not set by the upstream.
- **Deprecated:** Use permissionsPolicy instead.
- type: boolean
- hsts:
- default: true
- description: HSTS enforces the use of HTTPS if the 'Strict-Transport-Security' header is not already set by the upstream.
- type: boolean
- hstsPreload:
- default: false
- description: HSTSPreload enforces the use of HTTPS including for subdomains and enables HSTS preload.
- type: boolean
- permissionsPolicy:
- default: true
- description: |-
- PermissionsPolicy sets a permissions policy which prevents cross-origin use of several browser features
- if the 'Permissions-Policy' header is not set by the upstream.
- type: boolean
- referrerPolicy:
- default: true
- description: |-
- ReferrerPolicy ensures that no 'Referer' header is sent for cross-origin requests
- if the 'Referrer-Policy' header is not set by the upstream.
- type: boolean
- xContentTypeOptions:
- default: true
- description: XContentTypeOptions sets 'X-Content-Type-Options' to 'nosniff' if it is not set by the upstream.
- type: boolean
- xFrameOptions:
- default: true
- description: XFrameOptions sets 'X-Frame-Options' to SAMEORIGIN if it is not set by the upstream.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to add.
- items:
- description: HeaderRewritesHeader specifies a header with a particular value
- properties:
- name:
- description: Name defines the name of a header.
- minLength: 1
- type: string
- value:
- description: Value defines the value of a header.
- type: string
- required:
- - name
- - value
- type: object
- minItems: 1
- type: array
- mode:
- default: AddIfAbsent
- description: Mode defines the header addition strategy.
- enum:
- - AddIfAbsent
- - OverwriteOrAdd
- type: string
- name:
- description: Name describing the configured operation.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- allow:
- description: |-
- Allow defines which response headers will be forwarded to the downstream.
- This can either be allHeaders or matchingHeaders.
- Default: allHeaders: {}
- properties:
- allHeaders:
- description: AllHeaders specifies that all response headers should be forwarded.
- type: object
- matchingHeaders:
- description: MatchingHeaders specifies which response headers should be forwarded.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response header.
- properties:
- standardHeaders:
- default: false
- description: StandardHeaders defines whether the response headers which are forwarded to the downstream will be restricted to a set of common response headers.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to allow.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- remove:
- description: Remove defines which response headers will be removed before forwarding to the downstream.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined upstream response headers.
- properties:
- auth:
- description: Auth defines the categories of headers concerning authentication.
- properties:
- basic:
- default: false
- description: Basic removes upstream response headers that advise clients to authenticate with Basic Authentication.
- type: boolean
- negotiate:
- default: true
- description: Negotiate removes upstream response headers that advise clients to authenticate with Negotiate.
- type: boolean
- ntlm:
- default: true
- description: |-
- NTLM removes upstream response headers that advise clients to authenticate with NTLM.
- By default, these headers are removed, because NTLM pass-through is not supported.
- type: boolean
- type: object
- informationLeakage:
- description: InformationLeakage defines the categories of headers concerning information leakage.
- properties:
- application:
- default: true
- description: Application removes upstream response headers that leak information about the deployed software.
- type: boolean
- server:
- default: true
- description: Server removes upstream response headers that leak information about the server.
- type: boolean
- type: object
- permissiveCors:
- default: true
- description: PermissiveCORS removes upstream response headers for CORS (Cross-Origin Resource Sharing) which have no restrictions and therefore reduce client-side security.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional upstream response headers.
- items:
- properties:
- headers:
- description: Headers to remove.
- items:
- description: |-
- HeaderMatcher defines a matcher for an HTTP header.
- At least one of name and value must be set.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- minItems: 1
- type: array
- name:
- description: Name describing the configured remove operation. Must be unique.
- minLength: 1
- type: string
- required:
- - headers
- - name
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- type: object
- settings:
- description: Settings configures the HeaderRewrites filter.
- properties:
- operationalMode:
- default: Production
- description: OperationalMode defines the behavior of the filter. In integration mode more information is logged about the requests and responses.
- enum:
- - Production
- - Integration
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.4/crds/identitypropagations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/identitypropagations.microgateway.airlock.com.yaml
deleted file mode 100644
index 661e932f7..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/identitypropagations.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,108 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: identitypropagations.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: IdentityPropagation
- listKind: IdentityPropagationList
- plural: identitypropagations
- singular: identitypropagation
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: IdentityPropagation specifies the desired identity propagation.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired identity propagation.
- properties:
- header:
- description: Header configures identity propagation via a request header.
- properties:
- name:
- description: Name of the header to set.
- minLength: 1
- type: string
- value:
- description: Value to propagate to the application.
- properties:
- source:
- description: Source from which to extract the value.
- properties:
- metadata:
- description: Metadata specifies to extract a value from an Envoy dynamic filter metadata key.
- properties:
- key:
- description: Key specifies the metadata key from which to load the value, e.g. `some_payload.aud`.
- minLength: 1
- type: string
- namespace:
- description: Namespace specifies the metadata namespace within which the lookup should be performed, e.g. `envoy.filters.http.jwt_authn`.
- minLength: 1
- type: string
- required:
- - key
- - namespace
- type: object
- oidc:
- description: OIDC specifies to extract a value from the result of an OpenID Connect flow.
- properties:
- idToken:
- description: IDToken specifies to extract the value from the OpenID Connect ID Token.
- properties:
- claim:
- description: Claim selects the JWT claim from which to extract the value.
- minLength: 1
- type: string
- required:
- - claim
- type: object
- required:
- - idToken
- type: object
- type: object
- required:
- - source
- type: object
- required:
- - name
- - value
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/limits.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/limits.microgateway.airlock.com.yaml
deleted file mode 100644
index a75813dc4..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/limits.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,651 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: limits.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Limits
- listKind: LimitsList
- plural: limits
- singular: limits
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Limits contains the configuration for limits.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired limits behavior.
- properties:
- request:
- description: Request defines the limits for requests.
- properties:
- limited:
- description: Limited enables limits on request scope.
- properties:
- exceptions:
- description: Exceptions defines limit exceptions.
- items:
- description: LimitsException defines an exception for limits.
- properties:
- length:
- description: Length defines an exception for length limits based on the data element exceeding the limit.
- properties:
- graphQL:
- description: GraphQL defines a field, argument or value length limit exception for a GraphQL query.
- properties:
- argument:
- description: |-
- Argument restricts the exception to GraphQL queries with a matching argument of a field.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- field:
- description: |-
- Field restricts the exception to GraphQL queries with a matching field.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: |-
- Value restricts the exception to GraphQL queries with a matching argument value.
- At least one of field, argument and value must be set.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- json:
- description: JSON defines a key and value length limit exception for a JSON property.
- properties:
- jsonPath:
- description: |-
- JSONPath restricts the exception to JSON properties with a matching JSONPath.
- Expressions in JSONPath i.e. `?(expr)` are not supported.
- minLength: 1
- type: string
- required:
- - jsonPath
- type: object
- parameter:
- description: Parameter defines a name and value length limit exception for a parameter.
- properties:
- name:
- description: Name restricts the exception to parameters with a matching name.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- source:
- default: Any
- description: Source restricts the exception to parameters of this kind.
- enum:
- - Query
- - Post
- - Any
- type: string
- required:
- - name
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this exception to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- type: object
- type: array
- general:
- description: General defines general request limits.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Mi
- description: BodySize limits the total size of the request body. It specifies the number of bytes (0 = unlimited). This limit is effective for any request not processed by one of the content parsers (e.g. json) as configured in the Parser CRD. **Note** This limit does not apply to WebSocket or gRPC traffic.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- pathLength:
- anyOf:
- - type: integer
- - type: string
- default: 1Ki
- description: PathLength defines the maximum path length for all requests (parsed and unparsed).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- graphQL:
- description: GraphQL defines the limits for GraphQL requests.
- properties:
- nestingDepth:
- default: 10
- description: NestingDepth defines the maximum depth of nesting for GraphQL objects.
- format: int64
- type: integer
- querySize:
- anyOf:
- - type: integer
- - type: string
- default: 1Ki
- description: QuerySize defines the maximum size for GraphQL queries.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: "256"
- description: ValueLength defines the maximum length for GraphQL values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- json:
- description: JSON defines the limits for JSON requests.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Ki
- description: BodySize limits the total size of the JSON request body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- elementCount:
- default: 10000
- description: ElementCount defines the maximum number of keys and array items in the whole JSON document (recursive).
- format: int64
- type: integer
- keyCount:
- default: 250
- description: KeyCount defines the maximum number of keys of a single JSON object (non-recursive).
- format: int64
- type: integer
- keyLength:
- anyOf:
- - type: integer
- - type: string
- default: "128"
- description: KeyLength defines the maximum length for JSON keys.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- nestingDepth:
- default: 100
- description: NestingDepth defines the maximum depth of nesting for JSON objects and JSON arrays.
- format: int64
- type: integer
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: 8Ki
- description: ValueLength defines the maximum length for JSON values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- multipart:
- description: Multipart defines the limits for Multipart requests.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Mi
- description: BodySize limits the total size of the Multipart request body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- parameter:
- description: Parameter defines the limits for request parameters.
- properties:
- bodySize:
- anyOf:
- - type: integer
- - type: string
- default: 100Ki
- description: BodySize limits the total size of the form data body. It specifies the number of bytes (0 = unlimited).
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- count:
- default: 128
- description: Count defines the maximum number of request parameters.
- format: int64
- type: integer
- nameLength:
- anyOf:
- - type: integer
- - type: string
- default: "128"
- description: NameLength defines the maximum length for parameter names.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- valueLength:
- anyOf:
- - type: integer
- - type: string
- default: 8Ki
- description: ValueLength defines the maximum length for parameter values.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- unlimited:
- description: Unlimited disables all limits on request scope.
- type: object
- type: object
- settings:
- description: Settings configures the limits filter.
- properties:
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled when a limit hits.
- enum:
- - Block
- - LogOnly
- type: string
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.4/crds/oidcproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/oidcproviders.microgateway.airlock.com.yaml
deleted file mode 100644
index 030bd153b..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/oidcproviders.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,305 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: oidcproviders.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OIDCProvider
- listKind: OIDCProviderList
- plural: oidcproviders
- singular: oidcprovider
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- OIDCProvider specifies an OpenID Provider (OP).
-
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - Sessions are always shared across all Microgateway Engines using the same Redis instance.
- I.e. if application A and B (with different SidecarGateways) have the same Redis instance configured in their SessionHandling CR, users which are logged into application A
- may be able to access authenticated routes on application B, even if their OIDCRelyingParty configuration differs.
-
-
- {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of an OpenID Provider.
- properties:
- static:
- description: Static configures an OpenID Provider by explicitly specifying all endpoints.
- properties:
- endpoints:
- description: Endpoints specifies the OpenID Provider endpoints.
- properties:
- authorization:
- description: Authorization specifies the endpoint to which the authorization request is sent.
- properties:
- uri:
- description: URI specifies the endpoint address.
- format: uri
- minLength: 1
- pattern: ^(http|https)://.*$
- type: string
- required:
- - uri
- type: object
- token:
- description: Token configures the endpoint from which the access, ID and refresh tokens are obtained.
- properties:
- tls:
- description: TLS defines TLS settings.
- properties:
- certificateVerification:
- description: CertificateVerification specifies how the certificate presented by the server is verified.
- properties:
- custom:
- description: |-
- Custom explicitly specifies how the server certificate should be verified.
- Typical use cases include specifying a custom CA and SAN match when working with self-signed certificates or pinning a specific public key.
- properties:
- allowedSANs:
- description: |-
- AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
- that is to say, the SAN is verified if at least one matcher is matched.
- AllowedSANs requires trustedCA to be set.
- items:
- description: |-
- TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers.
- properties:
- matcher:
- description: Matcher defines the string matcher for the SAN value.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- sanType:
- description: SanType defines the type of SAN matcher.
- enum:
- - DNS
- - Email
- - URI
- - IPAddress
- type: string
- required:
- - matcher
- - sanType
- type: object
- minItems: 1
- type: array
- certificatePinning:
- description: |-
- CertificatePinning defines constraints the presented certificate must fulfill.
- If more than one constraint is configured only one must be satisfied.
- At least one of allowedSPKIs and allowedHashes must be set.
- properties:
- allowedHashes:
- description: |-
- AllowedHashes is a list of hex-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- allowedSPKIs:
- description: |-
- AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- type: object
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- type: object
- disabled:
- description: |-
- Disabled specifies to trust any certificate without verification.
- THIS IS INSECURE AND SHOULD ONLY BE USED FOR TESTING.
- type: object
- publicCAs:
- description: PublicCAs specifies to only accept certificates with a SAN matching "uri" and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Engine's base image.
- type: object
- type: object
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- type: object
- uri:
- description: URI specifies the endpoint address.
- format: uri
- minLength: 1
- pattern: ^(http|https)://.*$
- type: string
- required:
- - uri
- type: object
- required:
- - authorization
- - token
- type: object
- required:
- - endpoints
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/oidcrelyingparties.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/oidcrelyingparties.microgateway.airlock.com.yaml
deleted file mode 100644
index 7398b262b..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/oidcrelyingparties.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,224 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: oidcrelyingparties.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OIDCRelyingParty
- listKind: OIDCRelyingPartyList
- plural: oidcrelyingparties
- singular: oidcrelyingparty
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- OIDCRelyingParty specifies how the Airlock Microgateway Engine interacts with an OpenID Provider (OP).
-
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - Sessions are always shared across all Microgateway Engines using the same Redis instance.
- I.e. if application A and B (with different SidecarGateways) have the same Redis instance configured in their SessionHandling CR, users which are logged into application A
- may be able to access authenticated routes on application B, even if their OIDCRelyingParty configuration differs.
-
-
- {{% /notice %}}
- {{% notice info %}} The OIDC feature requires SessionHandling to be configured in the SidecarGateway. {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the OIDC Relying Party configuration.
- properties:
- clientID:
- description: ClientID specifies the OIDCRelyingParty "client_id".
- minLength: 1
- type: string
- credentials:
- description: Credentials used for client authentication on the back-channel with the authorization server.
- properties:
- clientSecret:
- description: ClientSecret authenticates with the client password issued by the OpenID Provider (OP).
- properties:
- method:
- default: BasicAuth
- description: Method specifies in which format the client secret is sent with the authorization request.
- enum:
- - BasicAuth
- - FormURLEncoded
- type: string
- secretRef:
- description: SecretRef specifies the kubernetes secret containing the client password with key "client.secret".
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- required:
- - clientSecret
- type: object
- oidcProviderRef:
- description: OIDCProviderRef selects the OpenID Provider (OP) used to authenticate users.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- pathMapping:
- description: PathMapping configures the action matching.
- properties:
- logoutPath:
- description: LogoutPath specifies which request paths should initiate a logout.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- redirectPath:
- description: RedirectPath specifies which request paths should be interpreted as a response from the authorization endpoint.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- required:
- - logoutPath
- - redirectPath
- type: object
- redirectURI:
- description: |-
- RedirectURI configures the "redirect_uri" parameter included in the authorization request.
- May contain envoy command operators, e.g. '%REQ(:x-forwarded-proto)%://%REQ(:authority)%/callback'.
- minLength: 1
- type: string
- required:
- - clientID
- - credentials
- - oidcProviderRef
- - pathMapping
- - redirectURI
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/openapis.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/openapis.microgateway.airlock.com.yaml
deleted file mode 100644
index b05f43ef2..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/openapis.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,167 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: openapis.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: OpenAPI
- listKind: OpenAPIList
- plural: openapis
- singular: openapi
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: OpenAPI contains the configuration for the OpenAPI specification.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired OpenAPI specification.
- properties:
- response:
- description: Response defines the validation behaviour for responses.
- properties:
- secured:
- description: Secured enables response checking.
- properties:
- validation:
- default: Lax
- description: Validation defines the validation mode for responses.
- enum:
- - Lax
- - Strict
- type: string
- type: object
- unsecured:
- description: Unsecured disables response checking.
- type: object
- type: object
- settings:
- description: Settings defines the settings to configure OpenAPI specification enforcement.
- properties:
- logging:
- description: Logging specifies the access log behavior.
- properties:
- maxFailedSubvalidations:
- default: 10
- description: MaxFailedSubvalidations defines the maximum number of failed subvalidations being logged.
- format: int64
- type: integer
- type: object
- schema:
- description: Schema configures the OpenAPI specification.
- properties:
- source:
- description: Source specifies the OpenAPI specification to be enforced.
- properties:
- configMapRef:
- description: ConfigMapRef references the configmap by its name containing the well-known key 'openapi.json'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- required:
- - source
- type: object
- threatHandlingMode:
- default: Block
- description: ThreatHandlingMode specifies how threats should be handled.
- enum:
- - Block
- - LogOnly
- type: string
- validation:
- description: Validation specifies the patterns for the validation behavior.
- properties:
- authentication:
- description: Authentication defines the settings for the authentication scheme.
- properties:
- oAuth2:
- description: OAuth2 specifies the OAuth2 parameters.
- properties:
- allowedParameters:
- description: AllowedParameters specifies the allowed parameters for the authentication scheme.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined allowed parameters.
- properties:
- standardParameters:
- default: true
- description: StandardParameters defines whether the allowed parameters should be expanded by the set of common parameters.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional allowed parameters.
- items:
- minLength: 1
- type: string
- minItems: 1
- type: array
- type: object
- type: object
- oidc:
- description: Oidc specifies the OIDC parameters.
- properties:
- allowedParameters:
- description: AllowedParameters specifies the allowed parameters for the authentication scheme.
- properties:
- builtIn:
- description: BuiltIn allows configuring a set of predefined allowed parameters.
- properties:
- standardParameters:
- default: true
- description: StandardParameters defines whether the allowed parameters should be expanded by the set of common parameters.
- type: boolean
- type: object
- custom:
- description: Custom allows configuring additional allowed parameters.
- items:
- minLength: 1
- type: string
- minItems: 1
- type: array
- type: object
- type: object
- type: object
- type: object
- required:
- - schema
- type: object
- required:
- - settings
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.4/crds/parsers.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/parsers.microgateway.airlock.com.yaml
deleted file mode 100644
index 15171f2b7..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/parsers.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,358 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: parsers.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Parser
- listKind: ParserList
- plural: parsers
- singular: parser
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Parser contains the configuration for content parsers (default and custom).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired parser behavior.
- properties:
- request:
- description: Request defines the parsing for downstream requests.
- properties:
- custom:
- description: Custom allows configuring additional rules for parser selection.
- properties:
- rules:
- description: |-
- Rules defines a custom set prepended before built-in rules of enabled request parsers.
- Disable all built-in parsers to overrule them completely.
- items:
- properties:
- action:
- description: |-
- Action specifies what should happen when a request condition matches.
- Only one of parse or skip can be set.
- properties:
- parse:
- description: Parse activates the configured parser.
- properties:
- form:
- description: Form activates the Form parser.
- type: object
- json:
- description: JSON activates the JSON parser.
- type: object
- multipart:
- description: Multipart activates the multipart parser.
- type: object
- type: object
- skip:
- description: Skip disables any content parsing
- type: object
- type: object
- requestConditions:
- description: RequestConditions defines additional request properties which must be matched in order for this rule to apply.
- properties:
- header:
- description: Header defines the matching headers of a request.
- properties:
- name:
- description: Name defines the name of a header.
- properties:
- matcher:
- description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- value:
- description: Value defines the value of a header.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- type: object
- invert:
- default: false
- description: Invert indicates whether the request condition should be inverted.
- type: boolean
- mediaType:
- description: MediaType defines the matching media type from the content-type header of a request.
- properties:
- matcher:
- description: |-
- NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
- In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- method:
- description: Method defines the matching methods of a request.
- items:
- description: Method defines common HTTP methods.
- enum:
- - GET
- - HEAD
- - POST
- - PUT
- - PATCH
- - DELETE
- - CONNECT
- - OPTIONS
- - TRACE
- type: string
- type: array
- path:
- description: Path defines the matching path of a request.
- properties:
- matcher:
- description: StringMatcher defines the way to match a string.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- required:
- - matcher
- type: object
- remoteIP:
- description: RemoteIP defines the matching remote IPs of a request.
- properties:
- cidrRanges:
- description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
- items:
- description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
- format: cidr
- type: string
- minItems: 1
- type: array
- invert:
- default: false
- description: Invert indicates whether the match should be inverted.
- type: boolean
- required:
- - cidrRanges
- type: object
- type: object
- required:
- - action
- - requestConditions
- type: object
- type: array
- type: object
- defaultContentType:
- default: application/x-www-form-urlencoded
- description: DefaultContentType specifies the content-type header which should be injected into the request before parser selection if it is not already present and the request has a body.
- minLength: 1
- type: string
- parsers:
- description: Parsers defines the configuration for the available content parsers.
- properties:
- form:
- description: Form defines the configuration for the form parser.
- properties:
- enable:
- default: true
- description: Enable defines whether form payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*urlencoded.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as form arguments.
- minLength: 1
- type: string
- type: object
- json:
- description: JSON defines the configuration for the JSON parser.
- properties:
- enable:
- default: true
- description: Enable defines whether json payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*json.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as JSON.
- minLength: 1
- type: string
- type: object
- multipart:
- description: Multipart defines the configuration for the multipart parser.
- properties:
- enable:
- default: true
- description: Enable defines whether multipart payloads are inspected.
- type: boolean
- mediaTypePattern:
- default: .*multipart.*
- description: MediaTypePattern is a regex specifying the media types for which the request body should be treated as a multipart payload.
- minLength: 1
- type: string
- type: object
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.4/crds/redisproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/redisproviders.microgateway.airlock.com.yaml
deleted file mode 100644
index 9acdf4ddb..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/redisproviders.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,159 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: redisproviders.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: RedisProvider
- listKind: RedisProviderList
- plural: redisproviders
- singular: redisprovider
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: RedisProvider contains a client configuration for connecting to a Redis database.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of a Redis database client configuration.
- properties:
- auth:
- description: Auth specifies the Redis credentials.
- properties:
- password:
- description: Password specifies the Redis password.
- properties:
- secretRef:
- description: SecretRef selects the secret containing the Redis password under the key 'redis.password'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- username:
- default: default
- description: Username specifies the Redis username to authenticate with.
- minLength: 1
- pattern: ^[^\s]+$
- type: string
- required:
- - password
- type: object
- mode:
- description: Mode configures the redis deployment mode.
- properties:
- standalone:
- description: Standalone specifies the standalone Redis instance to connect to.
- properties:
- host:
- description: Host specifies the IP or hostname.
- minLength: 1
- pattern: ^(\d{1,3}(\.\d{1,3}){3}|([0-9a-fA-F]{1,4}|:)+(:\d{1,3}(\.\d{1,3}){3})?|[a-z0-9\-]+(\.[a-z0-9\-]+)*)$
- type: string
- port:
- default: 6379
- description: Port specifies the port.
- maximum: 65535
- minimum: 1
- type: integer
- required:
- - host
- type: object
- type: object
- timeouts:
- description: Timeouts specifies the timeouts when interacting with the Redis endpoint.
- properties:
- connect:
- default: 5s
- description: Connect specifies the timeout for establishing a connection.
- type: string
- maxDuration:
- default: 2s
- description: MaxDuration specifies the response timeout.
- type: string
- type: object
- tls:
- description: TLS defines TLS settings. If not specified, TLS is disabled i.e. unencrypted TCP is used when connecting to the Redis instance.
- properties:
- certificateVerification:
- description: CertificateVerification specifies how the certificate presented by the server is verified.
- properties:
- custom:
- description: Custom explicitly specifies how the server certificate should be verified.
- properties:
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- required:
- - certificates
- type: object
- required:
- - trustedCA
- type: object
- disabled:
- description: 'Disabled specifies to trust any certificate without verification. THIS IS INSECURE AND SHOULD ONLY BE USED FOR TESTING. Note: This setting currently also disables TLS SNI.'
- type: object
- publicCAs:
- description: PublicCAs specifies to only accept certificates with a SAN matching the host and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Session Agent’s base image.
- type: object
- type: object
- type: object
- required:
- - mode
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.4/crds/sessionhandlings.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/sessionhandlings.microgateway.airlock.com.yaml
deleted file mode 100644
index bb4c0f9c1..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/sessionhandlings.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,77 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: sessionhandlings.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: SessionHandling
- listKind: SessionHandlingList
- plural: sessionhandlings
- singular: sessionhandling
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: |-
- SessionHandling contains the configuration for session handling.
-
-
- {{% notice warning %}} The Session Handling feature (required for OIDC) is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as high-availability Redis configurations (e.g. Sentinel/Cluster) are not yet supported.
- {{% /notice %}}
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired session handling behavior.
- properties:
- persistence:
- description: Persistence configures where to store the session state.
- properties:
- redisProviderRef:
- description: RedisProviderRef specifies to cache session information in the provided Redis instance.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - redisProviderRef
- type: object
- required:
- - persistence
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.4/crds/sidecargateways.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/sidecargateways.microgateway.airlock.com.yaml
deleted file mode 100644
index 6847f7393..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/sidecargateways.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,758 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: sidecargateways.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: SidecarGateway
- listKind: SidecarGatewayList
- plural: sidecargateways
- singular: sidecargateway
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - jsonPath: .status.status
- name: Status
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- description: SidecarGateway contains the configuration how to configure the Airlock Microgateway Engine when used as Sidecar Container within the Pod of an application.
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired sidecar gateway behavior.
- properties:
- applications:
- description: Applications defines applications which run on different ports.
- items:
- properties:
- containerPort:
- default: 8080
- description: |-
- ContainerPort refers to the container port.
- This must be a valid port number, 0 < x < 65536.
- format: int32
- maximum: 65535
- minimum: 1
- type: integer
- downstream:
- description: Downstream defines the downstream configuration for this application
- properties:
- protocol:
- description: |-
- Protocol defines the exposed HTTP protocol version. At most one of http1, http2 and auto can be set.
- Default: auto: {}
- properties:
- auto:
- description: Auto specifies that the protocol should be inferred.
- properties:
- http2:
- description: HTTP2 specifies the settings for when HTTP/2 is inferred.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- http1:
- description: HTTP1 specifies that the client is assumed to speak HTTP/1.1.
- type: object
- http2:
- description: HTTP2 specifies that the client is assumed to speak HTTP/2.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- remoteIP:
- description: |-
- RemoteIP defines how the remote IP of a client is propagated.
- Default: xff: {...}
- properties:
- connectionIP:
- description: ConnectionIP configures to use the source IP address of the direct downstream connection.
- type: object
- customHeader:
- description: CustomHeader specifies to use a custom header for remote IP extraction.
- properties:
- headerName:
- description: HeaderName specifies the name of the custom header containing the remote IP.
- minLength: 1
- type: string
- required:
- default: true
- description: Required specifies if the custom header is required. If true and not available the request will be rejected with 403.
- type: boolean
- required:
- - headerName
- type: object
- xff:
- description: XFF configures to use the standard 'X-Forwarded-For' header for IP extraction.
- properties:
- numTrustedHops:
- default: 1
- description: NumTrustedHops specifies to extract the client's originating IP from the nth rightmost entry in the X-Forwarded-For header. With the default value of 1, the IP is extracted from the rightmost entry.
- format: int32
- minimum: 1
- type: integer
- type: object
- type: object
- requestNormalizations:
- description: RequestNormalizations defines a set of normalization actions which are applied to the request before route matching.
- properties:
- mergeSlashes:
- default: true
- description: MergeSlashes ensures that adjacent slashes in the path are merged into one.
- type: boolean
- normalizePath:
- default: true
- description: NormalizePath ensures normalization according to RFC 3986 without case normalization.
- type: boolean
- type: object
- restrictions:
- description: Restrictions defines restrictions for downstream.
- properties:
- http:
- description: HTTP defines limits for the HTTP protocol.
- properties:
- headersLength:
- anyOf:
- - type: integer
- - type: string
- default: 60Ki
- description: HeadersLength defines maximum size of all request headers combined. Requests that exceed this limit will receive a 431 response.
- pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
- x-kubernetes-int-or-string: true
- type: object
- type: object
- timeouts:
- description: Timeouts defines timeouts for downstream
- properties:
- http:
- description: HTTP defines the settings for HTTP timeouts.
- properties:
- idle:
- default: 5m
- description: |-
- Idle defines the settings for the idle timeout when no data is sent or received.
- A value of 0 will completely disable the timeout.
- Default: 5m
- type: string
- maxDuration:
- default: 5m
- description: |-
- MaxDuration defines the total duration for a HTTP request/response stream.
- A value of 0 will completely disable the timeout.
- Default: 5m
- type: string
- requestHeaders:
- default: 10s
- description: |-
- RequestHeaders defines the duration before all request headers must be received.
- A value of 0 will completely disable the timeout.
- Default: 10s
- type: string
- type: object
- type: object
- tls:
- description: TLS defines the TLS settings.
- properties:
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- clientCertificate:
- description: |-
- ClientCertificate defines the TLS settings for verification of client certificates.
- At most one of ignored, optional and required can be set.
- Default: ignored: {}
- properties:
- ignored:
- description: Ignored disables verification of the client certificate.
- type: object
- optional:
- description: |-
- Optional enables verification of the client certificate if one is presented.
- In this mode only trustedCA and crl settings can be configured since certificatePinning and allowedSANs require a client certificate.
- properties:
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- required:
- - trustedCA
- type: object
- required:
- description: |-
- Required contains settings for client certificate verification. A client must present a valid certificate.
- At least one of trustedCA and certificatePinning must be set.
- properties:
- allowedSANs:
- description: |-
- AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
- that is to say, the SAN is verified if at least one matcher is matched.
- AllowedSANs requires trustedCA to be set.
- items:
- description: |-
- TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
- Subject Alternative Name of the presented certificate matches one of the specified matchers.
- properties:
- matcher:
- description: Matcher defines the string matcher for the SAN value.
- properties:
- contains:
- description: |-
- Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- exact:
- description: |-
- Exact defines an explicit match on the string specified here.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- ignoreCase:
- default: false
- description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
- type: boolean
- prefix:
- description: |-
- Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- regex:
- description: |-
- Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
- The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- suffix:
- description: |-
- Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
- Only one of exact, prefix, suffix, regex or contains can be set.
- minLength: 1
- type: string
- type: object
- sanType:
- description: SanType defines the type of SAN matcher.
- enum:
- - DNS
- - Email
- - URI
- - IPAddress
- type: string
- required:
- - matcher
- - sanType
- type: object
- minItems: 1
- type: array
- certificatePinning:
- description: |-
- CertificatePinning defines the constraints a client certificate must fulfill.
- If more than one constraint is configured only one must be satisfied.
- At least one of allowedSPKIs and allowedHashes must be set.
- properties:
- allowedHashes:
- description: |-
- AllowedHashes is a list of hex-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- allowedSPKIs:
- description: |-
- AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
- If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
- items:
- type: string
- minItems: 1
- type: array
- type: object
- crl:
- description: CRL defines the Certificate Revocation List (CRL) settings.
- properties:
- lists:
- description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- validationMode:
- default: VerifyChain
- description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
- enum:
- - VerifyLeafCertOnly
- - VerifyChain
- type: string
- type: object
- trustedCA:
- description: TrustedCA defines which CA certificates are trusted.
- properties:
- certificates:
- description: Certificates defines the list of secretRefs containing trusted CA certificates.
- items:
- properties:
- secretRef:
- description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - secretRef
- type: object
- minItems: 1
- type: array
- verificationDepth:
- default: 1
- description: |-
- VerificationDepth specifies the hops in the certificate chain at which validation is performed.
- 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
- format: int32
- type: integer
- required:
- - certificates
- type: object
- type: object
- type: object
- enable:
- default: false
- description: Enable defines if the downstream connection is encrypted.
- type: boolean
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- secretRef:
- description: SecretRef defines the reference to the TLS server certificate (secret of type kubernetes.io/tls).
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- xfcc:
- description: |-
- XFCC defines the handling of X-Forwarded-Client-Cert header. Meaning of the possible values:
- _Sanitize_: Do not send the XFCC header to the next hop. This is the default value.
- _ForwardOnly_: When the client connection is mTLS (Mutual TLS), forward the XFCC header in the request.
- _AppendAndForward_: When the client connection is mTLS, append the client certificate information to the request’s XFCC header and forward it.
- _SanitizeAndSet_: When the client connection is mTLS, reset the XFCC header with the client certificate information and send it to the next hop.
- _AlwaysForwardOnly_: Always forward the XFCC header in the request, regardless of whether the client connection is mTLS.
- Note: When forwarding the XFCC header in the request you might have to adjust the header length restrictions (See sidecargateway.spec.applications.downstream.restrictions.http)
- enum:
- - Sanitize
- - ForwardOnly
- - AppendAndForward
- - SanitizeAndSet
- - AlwaysForwardOnly
- type: string
- type: object
- type: object
- envoyHTTPFilterRefs:
- description: EnvoyHTTPFilterRefs selects the relevant EnvoyHTTPFilters.
- properties:
- prepend:
- description: Prepend selects the relevant EnvoyHTTPFilters which are added before those configured by the Airlock Microgateway.
- items:
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: array
- type: object
- routes:
- description: Routes defines the security configurations for different paths. The first matching route (from top to bottom) applies.
- items:
- description: |-
- SidecarGatewayApplicationRoute defines the security configurations for different paths.
- At most one of secured and unsecured can be set.
- Default: secured: {...}
- properties:
- pathPrefix:
- default: /
- description: PathPrefix defines the path prefix used during route selection.
- minLength: 1
- type: string
- secured:
- description: Secured enables WAF processing for this route.
- properties:
- accessControlRef:
- description: |-
- AccessControlRef selects the relevant AccessControl configuration resource.
- If undefined, Airlock Microgateway does not perform any access control.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- contentSecurityRef:
- description: |-
- ContentSecurityRef selects the relevant ContentSecurity configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: object
- unsecured:
- description: |-
- Unsecured disables all WAF functionality and therefore protection for this route.
- WARNING: Using this setting when the application is exposed to untrusted downstream traffic is highly discouraged.
- type: object
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - pathPrefix
- x-kubernetes-list-type: map
- telemetryRef:
- description: |-
- TelemetryRef selects the relevant Telemetry configuration resource.
- If undefined, default settings are applied, designed to work with most upstream web application services.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- upstream:
- description: Upstream defines the upstream configuration for this application
- properties:
- protocol:
- description: |-
- Protocol defines HTTP protocol version used to communicate with the upstream. At most one of http1, http2 and auto can be set.
- Default: auto: {}
- properties:
- auto:
- description: Auto specifies to negotiate the protocol with TLS ALPN (if TLS is enabled) or, as a fallback, use the same protocol that is used by the downstream connection.
- properties:
- http2:
- description: HTTP2 specifies the settings for when HTTP/2 is inferred.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- http1:
- description: HTTP1 specifies to use HTTP/1.1.
- type: object
- http2:
- description: HTTP2 specifies to use HTTP/2.
- properties:
- allowConnect:
- default: false
- description: Allows proxying Websocket and other upgrades over H2 connect.
- type: boolean
- type: object
- type: object
- timeouts:
- description: Timeouts defines the timeout settings.
- properties:
- http:
- description: HTTP defines the settings for HTTP timeouts.
- properties:
- idle:
- description: |-
- Timeout defines the settings for http timeouts. If this setting is not specified, the value of applications[].downstream.timeouts.http.idle is inherited.
- A value of 0 will completely disable the timeout.
- type: string
- maxDuration:
- default: 15s
- description: |-
- MaxDuration defines the total duration for a HTTP request/response stream.
- Default: 15s
- type: string
- type: object
- type: object
- tls:
- description: TLS defines the TLS settings.
- properties:
- ciphers:
- description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
- items:
- type: string
- minItems: 1
- type: array
- enable:
- default: false
- description: Enable defines if the upstream connection is encrypted.
- type: boolean
- protocol:
- description: Protocol defines the supported TLS protocol versions.
- properties:
- maximum:
- description: Maximum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- minimum:
- description: Minimum supported TLS version.
- enum:
- - TLSv1_0
- - TLSv1_1
- - TLSv1_2
- - TLSv1_3
- type: string
- type: object
- type: object
- type: object
- type: object
- minItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - containerPort
- x-kubernetes-list-type: map
- envoyClusterRefs:
- description: EnvoyClusterRefs selects the relevant EnvoyClusters.
- items:
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- podSelector:
- description: PodSelector defines to which Pods the configuration will be applied to.
- properties:
- matchLabels:
- additionalProperties:
- type: string
- description: MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels.
- type: object
- type: object
- sessionHandlingRef:
- description: SessionHandlingRef selects the SessionHandling configuration to apply.
- properties:
- name:
- description: Name of the resource
- minLength: 1
- type: string
- required:
- - name
- type: object
- required:
- - applications
- type: object
- status:
- description: Most recently observed status of the SidecarGateway which is populated by the system. This data is read-only and may not be up to date.
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- description: Last time the condition transitioned from one status to another.
- format: date-time
- type: string
- message:
- description: A human-readable message indicating details about the transition.
- type: string
- reason:
- description: The reason for the condition's last transition.
- type: string
- status:
- description: Status of the condition, one of True, False, Unknown.
- type: string
- type:
- description: Type of SidecarGateway condition.
- type: string
- required:
- - status
- - type
- type: object
- type: array
- pods:
- items:
- properties:
- envoyConfig:
- description: EnvoyConfig indicates the name of the EnvoyConfig CR for the Pod.
- type: string
- name:
- description: Name indicates the name of a Pod selected by the SidecarGateway.
- type: string
- sessionAgentSecret:
- type: string
- required:
- - name
- type: object
- type: array
- status:
- type: string
- unmanagedPods:
- items:
- properties:
- managedBy:
- description: ManagedBy indicates the Airlock Microgateway Operator instance which manages this Pod.
- type: string
- name:
- description: Name indicates the name of a Pod selected by the SidecarGateway.
- type: string
- sessionAgentSecret:
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - status
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/charts/airlock/microgateway/4.3.4/crds/telemetries.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.3.4/crds/telemetries.microgateway.airlock.com.yaml
deleted file mode 100644
index d1a8897a7..000000000
--- a/charts/airlock/microgateway/4.3.4/crds/telemetries.microgateway.airlock.com.yaml
+++ /dev/null
@@ -1,96 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
- labels:
- app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.4
- name: telemetries.microgateway.airlock.com
-spec:
- group: microgateway.airlock.com
- names:
- categories:
- - airlock-microgateway
- kind: Telemetry
- listKind: TelemetryList
- plural: telemetries
- singular: telemetry
- scope: Namespaced
- versions:
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- description: Telemetry contains the configuration for telemetry (logging, metrics & tracing).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: Specification of the desired telemetry behavior.
- properties:
- correlation:
- description: Correlation defines the correlation aspects of Telemetry.
- properties:
- idSource:
- description: IDSource specifies how an external correlation ID should be obtained for a request. If not specified, no correlation ID will be logged.
- properties:
- header:
- description: Header specifies to extract the correlation ID from a request header. If the header is absent from a request, no correlation ID will be logged.
- properties:
- name:
- default: X-Correlation-Id
- description: Name of the header (case-insensitive) from which to extract the correlation ID.
- minLength: 1
- type: string
- type: object
- required:
- - header
- type: object
- request:
- description: Request defines the request related correlation settings of Telemetry.
- properties:
- allowDownstreamRequestID:
- default: true
- description: AllowDownstreamRequestID defines whether trace sampling will consider a provided x-request-id.
- type: boolean
- alterRequestID:
- default: true
- description: AlterRequestID defines whether to alter the UUID to reflect the trace sampling decision. If disabled no modification to the UUID will be performed, this may break tracing in the upstream.
- type: boolean
- type: object
- type: object
- logging:
- description: Logging defines the logging aspects of Telemetry.
- properties:
- accessLog:
- description: AccessLog defines the access log settings of Telemetry.
- properties:
- format:
- description: Format defines the Access Log format of the sidecar.
- properties:
- json:
- description: JSON defines the Access Log format as JSON.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: object
- type: object
- type: object
- served: true
- storage: true
diff --git a/charts/airlock/microgateway/4.3.4/dashboards/blockLogs.json b/charts/airlock/microgateway/4.3.4/dashboards/blockLogs.json
deleted file mode 100644
index ef0ce6d62..000000000
--- a/charts/airlock/microgateway/4.3.4/dashboards/blockLogs.json
+++ /dev/null
@@ -1,510 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_LOKI",
- "label": "Loki",
- "description": "",
- "type": "datasource",
- "pluginId": "loki",
- "pluginName": "Loki"
- },
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "loki",
- "name": "Loki",
- "version": "1.0.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "table",
- "name": "Table",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "Blocked requests by Airlock Microgateway retrieved from corresponding access logs.\n\nThe dashboard can be filtered by namespace and block type. Column filters on the table allow for even a more granular filtering of the logs.",
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "custom": {
- "align": "auto",
- "cellOptions": {
- "type": "auto"
- },
- "filterable": true,
- "inspect": true
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "Namespace"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 221
- },
- {
- "id": "custom.filterable"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Timestamp"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 214
- },
- {
- "id": "unit",
- "value": "dateTimeAsIso"
- },
- {
- "id": "custom.filterable"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Method"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 89
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Client IP"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 138
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Request ID"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 328
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Block Type"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 116
- },
- {
- "id": "custom.filterable",
- "value": false
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Request Size"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 126
- },
- {
- "id": "unit",
- "value": "bytes"
- },
- {
- "id": "custom.align",
- "value": "right"
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Attack Type"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 217
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Application"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 207
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 27,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 2,
- "options": {
- "cellHeight": "sm",
- "footer": {
- "countRows": false,
- "enablePagination": true,
- "fields": "",
- "reducer": [
- "sum"
- ],
- "show": false
- },
- "showHeader": true,
- "sortBy": []
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_deny_rule\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.deny_rules.matches\"\n| label_format block_type=\"deny_rules\", attack_type=`{{ range $q := fromJson .details }} {{ if eq $q.threat_handling_mode \"block\" }} {{ $q.rule_key }} {{ end }} {{ end }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Deny Rule Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_limit\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.limits.matches\"\n| label_format block_type=\"limits\", attack_type=`{{ range $q := fromJson .details }} {{ if eq $q.threat_handling_mode \"block\" }} {{ $q.rule }} {{ end }} {{ end }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Limit Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_openapi\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", reference=\"airlock.openapi.reference\", constraint=\"airlock.openapi.request.failed_validation.constraint\", position=\"airlock.openapi.request.failed_validation.position\", message=\"airlock.openapi.request.failed_validation.message\"\n| label_format block_type=\"openapi\", attack_type=\"openapi\", details=`{{.reference }}: {{.constraint }} at {{ .position }} ({{ .message }})` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "OpenAPI Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_parser\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", attack_type=\"airlock.parser\", failed_check=\"airlock.parser.matches[0].failed_check\", message=\"airlock.parser.matches[0].message\"\n| label_format block_type=\"parsing\", attack_type=\"parsing\", details=`{{.failed_check}}: {{.message}}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Parser Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_graphql\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", reference=\"airlock.graphql.reference\", message=\"airlock.graphql.request.failed_validation.message\"\n| label_format block_type=\"graphql\", attack_type=\"graphql\", details=`{{ .reference }}: {{ .message }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "GraphQL Blocks"
- }
- ],
- "title": "Blocked Request logs",
- "transformations": [
- {
- "id": "merge",
- "options": {}
- },
- {
- "id": "extractFields",
- "options": {
- "format": "json",
- "source": "labels"
- }
- },
- {
- "id": "filterFieldsByName",
- "options": {
- "byVariable": false,
- "include": {
- "names": [
- "Time",
- "attack_type",
- "block_type",
- "client_ip",
- "details",
- "http_method",
- "namespace",
- "request_id",
- "request_size",
- "url",
- "pod"
- ]
- }
- }
- },
- {
- "id": "organize",
- "options": {
- "excludeByName": {
- "Line": true,
- "id": true,
- "labelTypes": true,
- "labels": true,
- "tsNs": false
- },
- "includeByName": {},
- "indexByName": {
- "Time": 0,
- "attack_type": 7,
- "block_type": 6,
- "client_ip": 9,
- "details": 8,
- "http_method": 3,
- "namespace": 1,
- "pod": 2,
- "request_id": 10,
- "request_size": 5,
- "url": 4
- },
- "renameByName": {
- "Time": "Timestamp",
- "attack_type": "Attack Type",
- "block_type": "Block Type",
- "client_ip": "Client IP",
- "details": "Details",
- "http_method": "Method",
- "namespace": "Namespace",
- "pod": "Pod",
- "request_id": "Request ID",
- "request_size": "Request Size",
- "tsNs": "",
- "url": "Path"
- }
- }
- }
- ],
- "type": "table"
- }
- ],
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Loki",
- "value": "P8E80F9AEF21F6940"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_LOKI",
- "multi": false,
- "name": "DS_LOKI",
- "options": [],
- "query": "loki",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_http_rq_total,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Application Namespace",
- "multi": true,
- "name": "namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_http_rq_total,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 5,
- "type": "query"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "hide": 0,
- "includeAll": true,
- "label": "Block Type",
- "multi": true,
- "name": "blockType",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 5,
- "type": "query"
- },
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_PROMETHEUS",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- }
- ]
- },
- "time": {
- "from": "now-15m",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {},
- "timezone": "browser",
- "title": "Airlock Microgateway Blocked Request Logs",
- "uid": "adnyzcvwnyadcc",
- "version": 3,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/dashboards/blockMetrics.json b/charts/airlock/microgateway/4.3.4/dashboards/blockMetrics.json
deleted file mode 100644
index ba383d22e..000000000
--- a/charts/airlock/microgateway/4.3.4/dashboards/blockMetrics.json
+++ /dev/null
@@ -1,758 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "panel",
- "id": "barchart",
- "name": "Bar chart",
- "version": ""
- },
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "stat",
- "name": "Stat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "timeseries",
- "name": "Time series",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "Metrics on requests blocked by Airlock Microgateway.\n\nDashboard can be filtered by namespaces as well as block types.",
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 6,
- "title": "Airlock Microgateway Block Metrics",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Total number of requests processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 0,
- "y": 1
- },
- "id": 1,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "format": "time_series",
- "fullMetaSearch": false,
- "hide": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Processed Requests",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Ratio of blocked requests vs. processed requests by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [
- {
- "options": {
- "match": "nan",
- "result": {
- "index": 0,
- "text": "n/a"
- }
- },
- "type": "special"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "percentunit"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 4,
- "y": 1
- },
- "id": 2,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])) / sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range]))",
- "fullMetaSearch": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Blocked Requests (%)",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "% Blocked Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Requests per second processed by Airlock Microgateway along with the corresponding block rate.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "blue",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "left",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "blue",
- "value": null
- }
- ]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "% Blocks"
- },
- "properties": [
- {
- "id": "custom.axisPlacement",
- "value": "right"
- },
- {
- "id": "unit",
- "value": "percentunit"
- },
- {
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
- },
- {
- "id": "max",
- "value": 1
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Requests per second"
- },
- "properties": [
- {
- "id": "unit",
- "value": "short"
- },
- {
- "id": "custom.fillOpacity",
- "value": 25
- }
- ]
- }
- ]
- },
- "gridPos": {
- "h": 10,
- "w": 20,
- "x": 0,
- "y": 5
- },
- "id": 3,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "timezone": [
- ""
- ],
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "instant": false,
- "legendFormat": "Requests per second",
- "range": true,
- "refId": "Requests per Second"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(rate(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) / sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "hide": false,
- "instant": false,
- "legendFormat": "% Blocks",
- "range": true,
- "refId": "Blocks"
- }
- ],
- "title": "Requests vs. % Blocks",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Blocked requests by block type.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "super-light-orange",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisGridShow": true,
- "axisLabel": "",
- "axisPlacement": "auto",
- "fillOpacity": 80,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "lineWidth": 0,
- "scaleDistribution": {
- "type": "linear"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "fieldMinMax": false,
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "none"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 11,
- "w": 10,
- "x": 0,
- "y": 15
- },
- "id": 4,
- "options": {
- "barRadius": 0,
- "barWidth": 0.8,
- "fullHighlight": false,
- "groupWidth": 0.7,
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": false
- },
- "orientation": "horizontal",
- "showValue": "never",
- "stacking": "none",
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "asc"
- },
- "xField": "block_type",
- "xTickLabelRotation": 0,
- "xTickLabelSpacing": 0
- },
- "pluginVersion": "10.4.3",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum by (block_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "format": "time_series",
- "instant": true,
- "legendFormat": "__auto",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Block Type",
- "transformations": [
- {
- "id": "reduce",
- "options": {
- "includeTimeField": false,
- "labelsToFields": true,
- "mode": "seriesToRows",
- "reducers": [
- "sum"
- ]
- }
- }
- ],
- "type": "barchart"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Blocked requests by attack type, which are subsets of the various block types.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "light-orange",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "fillOpacity": 80,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "lineWidth": 1,
- "scaleDistribution": {
- "type": "linear"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 11,
- "w": 10,
- "x": 10,
- "y": 15
- },
- "id": 5,
- "options": {
- "barRadius": 0,
- "barWidth": 0.8,
- "fullHighlight": false,
- "groupWidth": 0.7,
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": false
- },
- "orientation": "horizontal",
- "showValue": "never",
- "stacking": "none",
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- },
- "xField": "attack_type",
- "xTickLabelRotation": 0,
- "xTickLabelSpacing": 0
- },
- "pluginVersion": "10.4.3",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum by (attack_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "instant": true,
- "legendFormat": "__auto",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Attack Type",
- "transformations": [
- {
- "id": "reduce",
- "options": {
- "labelsToFields": true,
- "reducers": [
- "sum"
- ]
- }
- }
- ],
- "type": "barchart"
- }
- ],
- "refresh": "",
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "Datasource Prometheus",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "current": {
- "selected": false,
- "text": "Loki",
- "value": "P8E80F9AEF21F6940"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_LOKI",
- "multi": false,
- "name": "DS_LOKI",
- "options": [],
- "query": "loki",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_valid,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Operator Namespace",
- "multi": true,
- "name": "operator_namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": ".*",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_http_rq_total,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Application Namespace",
- "multi": true,
- "name": "namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_http_rq_total,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 5,
- "type": "query"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "hide": 0,
- "includeAll": true,
- "label": "Block Type",
- "multi": true,
- "name": "blockType",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 5,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-24h",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {
- "hidden": false
- },
- "timezone": "browser",
- "title": "Airlock Microgateway Block Metrics",
- "uid": "ddnqoczu7qvb4cdd3dd",
- "version": 3,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/dashboards/license.json b/charts/airlock/microgateway/4.3.4/dashboards/license.json
deleted file mode 100644
index b9d5777e2..000000000
--- a/charts/airlock/microgateway/4.3.4/dashboards/license.json
+++ /dev/null
@@ -1,521 +0,0 @@
-{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__elements": {},
- "__requires": [
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "10.2.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- },
- {
- "type": "panel",
- "id": "stat",
- "name": "Stat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "timeseries",
- "name": "Time series",
- "version": ""
- }
- ],
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": null,
- "links": [
- {
- "asDropdown": true,
- "icon": "external link",
- "includeVars": true,
- "keepTime": true,
- "tags": [
- "airlock-microgateway"
- ],
- "targetBlank": true,
- "title": "Airlock Microgateway",
- "tooltip": "",
- "type": "dashboards",
- "url": ""
- }
- ],
- "panels": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "License status of Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [
- {
- "options": {
- "0": {
- "color": "red",
- "index": 1,
- "text": "Invalid"
- },
- "1": {
- "color": "green",
- "index": 0,
- "text": "Valid"
- }
- },
- "type": "value"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 0
- },
- "id": 1,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_valid{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "License Status",
- "range": false,
- "refId": "Licenses"
- }
- ],
- "title": "License Status",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Expiry date of the Airlock Microgateway license associated with the selected operator.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "time: L"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 3,
- "y": 0
- },
- "id": 4,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "min(microgateway_license_expiry_timestamp_seconds{namespace=~\"${operator_namespace.regex}\"})*1000",
- "instant": true,
- "legendFormat": "Expiry Date (MM/DD/YYYY)",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "License Expiry Date",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of licensed requests for applications protected by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 7,
- "y": 0
- },
- "id": 6,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(microgateway_license_max_rq_count_per_month{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "Licensed Requests",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Licensed Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Estimated number of requests protected by Airlock Microgateway over 30 days based on the last 7 days.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 5,
- "x": 11,
- "y": 0
- },
- "id": 2,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_license_http_rq_total{job=~\"${operator_namespace.regex}/.*-engine\"}[7d]))/7*30",
- "instant": true,
- "legendFormat": "Estimated Requests",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Requests over 30 days (estimated)",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Number of requests per week processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "blue",
- "mode": "fixed"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 12,
- "w": 16,
- "x": 0,
- "y": 4
- },
- "id": 5,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(avg_over_time(increase(microgateway_license_http_rq_total{job=~\"${operator_namespace.regex}/.*-engine\"}[7d])[2m:30s]))",
- "instant": false,
- "legendFormat": "# Requests per week",
- "range": true,
- "refId": "A"
- }
- ],
- "title": "Processed Requests per week",
- "type": "timeseries"
- }
- ],
- "schemaVersion": 39,
- "tags": [
- "airlock-microgateway"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
- "hide": 2,
- "includeAll": false,
- "label": "DS_PROMETHEUS",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_valid,namespace)",
- "description": "",
- "hide": 0,
- "includeAll": false,
- "label": "Operator Namespace",
- "multi": false,
- "name": "operator_namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-7d",
- "to": "now"
- },
- "timeRangeUpdatedDuringEditOrView": false,
- "timepicker": {},
- "timezone": "browser",
- "title": "Airlock Microgateway License",
- "uid": "cdpq79bzrr01se",
- "version": 2,
- "weekStart": ""
-}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/gke-values.yaml b/charts/airlock/microgateway/4.3.4/gke-values.yaml
new file mode 100644
index 000000000..d6d5c21d1
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/gke-values.yaml
@@ -0,0 +1,4 @@
+# values for deploying on GKE
+
+config:
+ cniBinDir: "/home/kubernetes/bin"
diff --git a/charts/airlock/microgateway/4.3.4/openshift-values.yaml b/charts/airlock/microgateway/4.3.4/openshift-values.yaml
new file mode 100644
index 000000000..3b1d6cccd
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/openshift-values.yaml
@@ -0,0 +1,15 @@
+# values for deploying on OpenShift
+
+rbac:
+ createSCCRole: true
+
+privileged: true
+
+multusNetworkAttachmentDefinition:
+ create: true
+ namespace: default
+
+config:
+ installMode: "standalone"
+ cniNetDir: "/etc/cni/multus/net.d"
+ cniBinDir: "/var/lib/cni/bin"
diff --git a/charts/airlock/microgateway/4.3.4/questions.yml b/charts/airlock/microgateway/4.3.4/questions.yml
new file mode 100644
index 000000000..73ed44d64
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/questions.yml
@@ -0,0 +1,18 @@
+questions:
+ - variable: config.cniNetDir
+ required: true
+ type: string
+ label: CNI Network Configuration Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI config files reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your kubernetes host."
+ - variable: config.cniBinDir
+ required: true
+ type: string
+ label: CNI Plugin Binaries Directory
+ group: "CNI Settings"
+ description: "Directory where the CNI plugin binaries reside on the host. This value depends on the kubernetes distribution and interface CNI Provider used. It can be fetched by running `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your kubernetes host."
+ - variable: config.installMode
+ required: true
+ label: CNI Plugin Installation Mode
+ group: "CNI Settings"
+ description: "Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers) as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift) or in `manual` mode, where no CNI network configuration is written. Please refer to the CNI installation documentation (https://github.com/airlock/microgateway?tab=readme-ov-file#deploy-airlock-microgateway-cni) to correctly setup the CNI Plugin for your environment."
diff --git a/charts/airlock/microgateway/4.3.4/templates/NOTES.txt b/charts/airlock/microgateway/4.3.4/templates/NOTES.txt
index 6e5ce218a..bb94ff521 100644
--- a/charts/airlock/microgateway/4.3.4/templates/NOTES.txt
+++ b/charts/airlock/microgateway/4.3.4/templates/NOTES.txt
@@ -1,47 +1,15 @@
-Thank you for installing Airlock Microgateway.
+Thank you for installing Airlock Microgateway CNI.
-Please ensure the following prerequisites are fulfilled:
-* Cert-Manager is installed.
- https://cert-manager.io/docs/installation/helm/
-* Airlock Microgateway CNI is also installed on the cluster.
- https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni
-* A valid Airlock Microgateway license is deployed in the Kubernetes secret 'airlock-microgateway-license'.
- * Get a free Community license: https://airlock.com/en/microgateway-community
- * Order a Premium license: https://airlock.com/en/microgateway-premium
+Please ensure that the helm values'.config.cniNetDir' and '.config.cniBinDir' are configured for your Kubernetes distribution.
+For further information, consider our manual https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" . }}.
+The chapter 'Setup > Installation' describes how to set those settings correctly.
Further information:
-* Documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" . }}
-* CRD API reference documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" . }}/api/crds
+* Documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway-cni.docsVersion" . }}
* Airlock Microgateway Labs: https://play.instruqt.com/airlock/invite/hyi9fy4b4jzc?icp_referrer=helm
-{{- if .Values.crds.skipVersionCheck }}
-Warning: CRD version check skipped
-{{- else -}}
-{{- $outdatedCRDs := (include "airlock-microgateway.outdatedCRDs" .) -}}
-{{- if $outdatedCRDs -}}
- {{- fail (printf `
-
-Helm does not automatically upgrade CRDs from the chart's 'crds/' directory during 'helm install/upgrade'.
-Therefore, the CRDs must be manually upgraded with the following command before deploying this chart:
-
-kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=%s --server-side --force-conflicts
-
-If you are not using the helm install/upgrade command and instead rely on some other mechanism which is able to upgrade CRDs for deploying this chart, you can suppress this error by setting the helm value 'crds.skipVersionCheck=true'.`
- .Chart.AppVersion)
- -}}
-{{- end -}}
-{{- end -}}
-{{- if .Values.tests.enabled -}}
- {{- if .Values.operator.watchNamespaces -}}
- {{- if not (has .Release.Namespace .Values.operator.watchNamespaces) -}}
- {{- fail (printf `
-
-To execute 'helm test', it is necessary that the release namespace '%s' is part of the operator's watch scope. Either disable the tests or ensure that the release namespace is added to watch namspace list ('operator.watchNamespaces') in the helm values.
-`
- .Release.Namespace)
- -}}
- {{- end -}}
- {{- end -}}
-{{- end }}
+Next steps:
+* Install Airlock Microgateway (if not done already)
+ https://artifacthub.io/packages/helm/airlock-microgateway/microgateway
Your release version is {{ .Chart.Version }}.
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/_helpers.tpl b/charts/airlock/microgateway/4.3.4/templates/_helpers.tpl
index 733ba9648..996491a87 100644
--- a/charts/airlock/microgateway/4.3.4/templates/_helpers.tpl
+++ b/charts/airlock/microgateway/4.3.4/templates/_helpers.tpl
@@ -1,16 +1,14 @@
{{/*
Expand the name of the chart.
-We truncate at 49 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest explicit suffix is 14 characters.
*/}}
-{{- define "airlock-microgateway.name" -}}
-{{- default .Chart.Name .Values.nameOverride | trunc 49 | trimSuffix "-" }}
+{{- define "airlock-microgateway-cni.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Convert an image configuration object into an image ref string.
*/}}
-{{- define "airlock-microgateway.image" -}}
+{{- define "airlock-microgateway-cni.image" -}}
{{- if .digest -}}
{{- printf "%s@%s" .repository .digest -}}
{{- else if .tag -}}
@@ -22,19 +20,19 @@ Convert an image configuration object into an image ref string.
{{/*
Create a default fully qualified app name.
-We truncate at 36 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
-and the longest implicit suffix is 27 characters.
+We truncate at 50 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
+and the longest suffix is 13 characters.
If release name contains chart name it will be used as a full name.
*/}}
-{{- define "airlock-microgateway.fullname" -}}
+{{- define "airlock-microgateway-cni.fullname" -}}
{{- if .Values.fullnameOverride }}
-{{- .Values.fullnameOverride | trunc 36 | trimSuffix "-" }}
+{{- .Values.fullnameOverride | trunc 50 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
-{{- .Release.Name | trunc 36 | trimSuffix "-" }}
+{{- .Release.Name | trunc 50 | trimSuffix "-" }}
{{- else }}
-{{- printf "%s-%s" .Release.Name $name | trunc 36 | trimSuffix "-" }}
+{{- printf "%s-%s" .Release.Name $name | trunc 50 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
@@ -42,112 +40,62 @@ If release name contains chart name it will be used as a full name.
{{/*
Create chart name and version as used by the chart label.
*/}}
-{{- define "airlock-microgateway.chart" -}}
+{{- define "airlock-microgateway-cni.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
-{{- define "airlock-microgateway.sharedLabels" -}}
-helm.sh/chart: {{ include "airlock-microgateway.chart" . }}
+{{- define "airlock-microgateway-cni.labels" -}}
+helm.sh/chart: {{ include "airlock-microgateway-cni.chart" . }}
+{{ include "airlock-microgateway-cni.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
-app.kubernetes.io/part-of: {{ .Chart.Name }}
{{- with .Values.commonLabels }}
{{ toYaml .}}
{{- end }}
{{- end }}
{{/*
-Common Selector labels
+Common labels without component
*/}}
-{{- define "airlock-microgateway.sharedSelectorLabels" -}}
-app.kubernetes.io/instance: {{ .Release.Name }}
+{{- define "airlock-microgateway-cni.labelsWithoutComponent" -}}
+{{- $labels := fromYaml (include "airlock-microgateway-cni.labels" .) -}}
+{{ unset $labels "app.kubernetes.io/component" | toYaml }}
{{- end }}
{{/*
-Restricted Container Security Context
+Selector labels
*/}}
-{{- define "airlock-microgateway.restrictedSecurityContext" -}}
-allowPrivilegeEscalation: false
-privileged: false
-runAsNonRoot: true
-capabilities:
- drop: ["ALL"]
-readOnlyRootFilesystem: true
-seccompProfile:
- type: RuntimeDefault
+{{- define "airlock-microgateway-cni.selectorLabels" -}}
+app.kubernetes.io/component: cni-plugin-installer
+app.kubernetes.io/instance: {{ .Release.Name }}
+app.kubernetes.io/name: {{ include "airlock-microgateway-cni.name" . }}
{{- end }}
-{{/* Precondition: May only be used if AppVersion is isSemver */}}
-{{- define "airlock-microgateway.supportedCRDVersionPattern" -}}
-{{- $version := (semver .Chart.AppVersion) -}}
-{{- if $version.Prerelease -}}
->= {{ $version.Major }}.{{ $version.Minor }}.{{ $version.Patch }}-{{ $version.Prerelease }}
-{{- else -}}
->= {{ $version.Major }}.{{ $version.Minor }}.0 || >= {{ $version.Major }}.{{ $version.Minor }}.{{ add1 $version.Patch }}-0
-{{- end -}}
-{{- end -}}
+{{/*
+Create the name of the service account to use for the CNI Plugin
+*/}}
+{{- define "airlock-microgateway-cni.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "airlock-microgateway-cni.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
-{{- define "airlock-microgateway.outdatedCRDs" -}}
-{{- if (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) -}}
- {{- $supportedVersion := (include "airlock-microgateway.supportedCRDVersionPattern" .) -}}
- {{- range $path, $_ := .Files.Glob "crds/*.yaml" -}}
- {{- $api := ($.Files.Get $path | fromYaml).metadata.name -}}
- {{- $crd := (lookup "apiextensions.k8s.io/v1" "CustomResourceDefinition" "" $api) -}}
- {{- $isOutdated := false -}}
- {{- if $crd -}}
- {{/* If CRD is already present in the cluster, it must have the minimum supported version */}}
- {{- $isOutdated = true -}}
- {{- if hasKey $crd.metadata "labels" -}}
- {{- $crdVersion := get $crd.metadata.labels "app.kubernetes.io/version" -}}
- {{- if (eq "true" (include "airlock-microgateway.isSemver" $crdVersion)) -}}
- {{- if (semverCompare $supportedVersion $crdVersion) }}
- {{- $isOutdated = false -}}
- {{- end }}
- {{- end -}}
- {{- end -}}
- {{- end -}}
- {{- if $isOutdated }}
-{{ base $path }}
- {{- end }}
- {{- end -}}
-{{- end -}}
-{{- end -}}
-
-{{- define "airlock-microgateway.isSemver" -}}
+{{- define "airlock-microgateway-cni.isSemver" -}}
{{- regexMatch `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` . -}}
{{- end -}}
-{{- define "airlock-microgateway.docsVersion" -}}
-{{- if and (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
+{{- define "airlock-microgateway-cni.docsVersion" -}}
+{{- if and (eq "true" (include "airlock-microgateway-cni.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
{{- $version := (semver .Chart.AppVersion) -}}
{{- $version.Major }}.{{ $version.Minor -}}
{{- else -}}
{{- print "latest" -}}
{{- end -}}
{{- end -}}
-
-{{- define "airlock-microgateway.watchNamespaceSelector.labelQuery" -}}
-{{- $list := list -}}
-{{- with .matchLabels -}}
- {{- range $key, $value := . -}}
- {{- $list = append $list (printf "%s=%s" $key $value) -}}
- {{- end -}}
-{{- end -}}
-{{- with .matchExpressions -}}
- {{- range . -}}
- {{- if has .operator (list "In" "NotIn") -}}
- {{- $list = append $list (printf "%s %s (%s)" .key (lower .operator) (join "," .values)) -}}
- {{- else if eq .operator "Exists" -}}
- {{- $list = append $list .key -}}
- {{- else if eq .operator "DoesNotExist" -}}
- {{- $list = append $list (printf "!%s" .key) -}}
- {{- end -}}
- {{- end -}}
-{{- end -}}
-{{- join "," $list -}}
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/clusterrole.yaml b/charts/airlock/microgateway/4.3.4/templates/clusterrole.yaml
new file mode 100644
index 000000000..ef88ac783
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/templates/clusterrole.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - list
+ - watch
+ - patch
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/clusterrolebinding.yaml b/charts/airlock/microgateway/4.3.4/templates/clusterrolebinding.yaml
new file mode 100644
index 000000000..04f87cb0f
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/templates/clusterrolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/configmap.yaml b/charts/airlock/microgateway/4.3.4/templates/configmap.yaml
new file mode 100644
index 000000000..b880116ef
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/templates/configmap.yaml
@@ -0,0 +1,22 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+data:
+ plugin-conf.json: |-
+ {
+ "type": "{{ include "airlock-microgateway-cni.fullname" . }}",
+ "debug": {{ eq .Values.config.logLevel "debug" }},
+ "logFilePath": "/var/log/{{ include "airlock-microgateway-cni.fullname" . }}.log",
+ "kubernetes": {
+ "kubeconfig": "{{ .Values.config.cniNetDir }}/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig",
+ "excludeNamespaces": {{ toJson .Values.config.excludeNamespaces }}
+ }
+ }
diff --git a/charts/airlock/microgateway/4.3.4/templates/daemonset.yaml b/charts/airlock/microgateway/4.3.4/templates/daemonset.yaml
new file mode 100644
index 000000000..4ba9f2669
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/templates/daemonset.yaml
@@ -0,0 +1,136 @@
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "airlock-microgateway-cni.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ kubectl.kubernetes.io/default-container: cni-installer
+ {{- with mustMerge .Values.podAnnotations .Values.commonAnnotations}}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 8 }}
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ - args:
+ - --log-level
+ - "{{ .Values.config.logLevel }}"
+ env:
+ - name: CNI_NETWORK_CONFIG
+ valueFrom:
+ configMapKeyRef:
+ key: plugin-conf.json
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ - name: CNI_BIN_DIR
+ value: /host/opt/cni/bin
+ - name: CNI_NET_DIR
+ value: /host/etc/cni/net.d
+ - name: KUBECONFIG_FILE_NAME
+ value: "{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig"
+ - name: INSTALL_MODE
+ value: {{ .Values.config.installMode }}
+ - name: KUBERNETES_NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ image: {{ include "airlock-microgateway-cni.image" .Values.image }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ name: cni-installer
+ {{- with .Values.resources }}
+ resources:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ startupProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 5
+ initialDelaySeconds: 3
+ periodSeconds: 3
+ timeoutSeconds: 3
+ readinessProbe:
+ exec:
+ command:
+ - /cni-installer
+ - probe
+ failureThreshold: 1
+ periodSeconds: 60
+ timeoutSeconds: 3
+ securityContext:
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ - mountPath: /run/cni-installer
+ name: cni-installer-status
+ hostNetwork: true
+ priorityClassName: system-node-critical
+ restartPolicy: Always
+ securityContext:
+ fsGroup: 0
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ serviceAccountName: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ terminationGracePeriodSeconds: 5
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ tolerations:
+ - effect: NoSchedule
+ operator: Exists
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
+ - emptyDir: {}
+ name: cni-installer-status
diff --git a/charts/airlock/microgateway/4.3.4/templates/network-attachment-definition.yaml b/charts/airlock/microgateway/4.3.4/templates/network-attachment-definition.yaml
new file mode 100644
index 000000000..5d657e309
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/templates/network-attachment-definition.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.multusNetworkAttachmentDefinition.create -}}
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}
+ namespace: {{ .Values.multusNetworkAttachmentDefinition.namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/_operator_helpers.tpl b/charts/airlock/microgateway/4.3.4/templates/operator/_operator_helpers.tpl
deleted file mode 100644
index a540ff9f4..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/_operator_helpers.tpl
+++ /dev/null
@@ -1,42 +0,0 @@
-{{/*
-Create a default fully qualified name for operator components.
-*/}}
-{{- define "airlock-microgateway.operator.fullname" -}}
-{{ include "airlock-microgateway.fullname" . }}-operator
-{{- end }}
-
-
-{{/*
-Common operator labels
-*/}}
-{{- define "airlock-microgateway.operator.labels" -}}
-{{ include "airlock-microgateway.sharedLabels" . }}
-{{ include "airlock-microgateway.operator.selectorLabels" . }}
-{{- end }}
-
-{{/*
-Operator Selector labels
-*/}}
-{{- define "airlock-microgateway.operator.selectorLabels" -}}
-{{ include "airlock-microgateway.sharedSelectorLabels" . }}
-app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-operator
-app.kubernetes.io/component: controller
-{{- end }}
-
-{{/*
-Create the name of the service account to use for the operator
-*/}}
-{{- define "airlock-microgateway.operator.serviceAccountName" -}}
-{{- if .Values.operator.serviceAccount.create }}
-{{- default (include "airlock-microgateway.operator.fullname" .) .Values.operator.serviceAccount.name }}
-{{- else }}
-{{- default "default" .Values.operator.serviceAccount.name }}
-{{- end }}
-{{- end }}
-
-{{/*
-ServiceMonitor metrics regex pattern for leader only metrics
-*/}}
-{{- define "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" -}}
-^(microgateway_license|microgateway_sidecars).*$
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/_rbac.gen.tpl b/charts/airlock/microgateway/4.3.4/templates/operator/_rbac.gen.tpl
deleted file mode 100644
index 83b314cbc..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/_rbac.gen.tpl
+++ /dev/null
@@ -1,237 +0,0 @@
-{{/* AUTOGENERATED FILE DO NOT EDIT */}}
-
-{{/*
-Operator rbac permission rules
-*/}}
-{{- define "airlock-microgateway-operator.rbacRules" -}}
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
-- apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - delete
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - ""
- resources:
- - pods/finalizers
- verbs:
- - update
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
- - update
-- apiGroups:
- - ""
- resources:
- - secrets
- verbs:
- - create
- - delete
- - get
- - list
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - accesscontrols
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - contentsecurities
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - denyrules
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyclusters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyconfigurations
- verbs:
- - create
- - delete
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyconfigurations/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyhttpfilters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - graphqls
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - headerrewrites
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - identitypropagations
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - limits
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcrelyingparties
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - openapis
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - parsers
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - redisproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sessionhandlings
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways
- verbs:
- - get
- - list
- - patch
- - update
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/finalizers
- verbs:
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - telemetries
- verbs:
- - get
- - list
- - watch
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/_webhooks.gen.tpl b/charts/airlock/microgateway/4.3.4/templates/operator/_webhooks.gen.tpl
deleted file mode 100644
index 02e304890..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/_webhooks.gen.tpl
+++ /dev/null
@@ -1,339 +0,0 @@
-{{/* AUTOGENERATED FILE DO NOT EDIT */}}
-
-{{/*
-Operator mutating webhooks
-*/}}
-{{- define "airlock-microgateway-operator.mutatingWebhooks" -}}
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /mutate-v1-pod
- failurePolicy: Fail
- name: mutate-pod.microgateway.airlock.com
- reinvocationPolicy: IfNeeded
- rules:
- - apiGroups:
- - ""
- apiVersions:
- - v1
- operations:
- - CREATE
- resources:
- - pods
- sideEffects: None
- objectSelector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
-{{- end }}
-
-{{/*
-Operator validating webhooks
-*/}}
-{{- define "airlock-microgateway-operator.validatingWebhooks" -}}
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-v1-pod
- failurePolicy: Fail
- name: validate-pod.microgateway.airlock.com
- rules:
- - apiGroups:
- - ""
- apiVersions:
- - v1
- operations:
- - CREATE
- - UPDATE
- resources:
- - pods
- sideEffects: None
- objectSelector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-accesscontrol
- failurePolicy: Fail
- name: validate-accesscontrol.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - accesscontrols
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-denyrules
- failurePolicy: Fail
- name: validate-denyrules.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - denyrules
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-envoycluster
- failurePolicy: Fail
- name: validate-envoycluster.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - envoyclusters
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-envoyhttpfilter
- failurePolicy: Fail
- name: validate-envoyhttpfilter.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - envoyhttpfilters
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-graphql
- failurePolicy: Fail
- name: validate-graphql.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - graphqls
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-headerrewrites
- failurePolicy: Fail
- name: validate-headerrewrites.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - headerrewrites
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-identitypropagation
- failurePolicy: Fail
- name: validate-identitypropagation.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - identitypropagations
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-limits
- failurePolicy: Fail
- name: validate-limits.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - limits
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-oidcprovider
- failurePolicy: Fail
- name: validate-oidcprovider.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - oidcproviders
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-oidcrelyingparty
- failurePolicy: Fail
- name: validate-oidcrelyingparty.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - oidcrelyingparties
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-openapi
- failurePolicy: Fail
- name: validate-openapi.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - openapis
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-parser
- failurePolicy: Fail
- name: validate-parser.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - parsers
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-redisprovider
- failurePolicy: Fail
- name: validate-redisprovider.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - redisproviders
- sideEffects: None
-- admissionReviewVersions:
- - v1
- clientConfig:
- service:
- name: airlock-microgateway-operator-webhook
- namespace: '{{ .Release.Namespace }}'
- path: /validate-microgateway-airlock-com-v1alpha1-sidecargateway
- failurePolicy: Fail
- name: validate-sidecargateway.microgateway.airlock.com
- rules:
- - apiGroups:
- - microgateway.airlock.com
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - sidecargateways
- sideEffects: None
-{{- end }}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/configmap.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/configmap.yaml
deleted file mode 100644
index 95e52d7df..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/configmap.yaml
+++ /dev/null
@@ -1,394 +0,0 @@
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-config
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-data:
- engine_bootstrap_config_template.yaml: |
- # Base configuration, admin interface on port 19000
- admin:
- address:
- socket_address:
- address: 127.0.0.1
- port_value: 19000
- dynamic_resources:
- cds_config:
- initial_fetch_timeout: 10s
- resource_api_version: V3
- api_config_source:
- api_type: GRPC
- transport_api_version: V3
- grpc_services:
- - envoy_grpc:
- cluster_name: xds_cluster
- set_node_on_first_message_only: true
- # Prevent Envoy Node from overloading the xDS server due to rejected configuration when using xDS SotW gRPC
- rate_limit_settings:
- max_tokens: 5
- fill_rate: 0.2
- lds_config:
- resource_api_version: V3
- initial_fetch_timeout: 10s
- api_config_source:
- api_type: GRPC
- transport_api_version: V3
- grpc_services:
- - envoy_grpc:
- cluster_name: xds_cluster
- set_node_on_first_message_only: true
- # Prevent Envoy Node from overloading the xDS server due to rejected configuration when using xDS SotW gRPC
- rate_limit_settings:
- max_tokens: 5
- fill_rate: 0.2
- static_resources:
- listeners:
- - name: probe
- address:
- socket_address:
- address: 0.0.0.0
- port_value: 19001
- filter_chains:
- - filters:
- - name: http_connection_manager
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- stat_prefix: probe
- codec_type: AUTO
- http2_protocol_options:
- initial_connection_window_size: 1048576
- initial_stream_window_size: 65536
- max_concurrent_streams: 100
- route_config:
- name: probe
- virtual_hosts:
- - name: probe
- domains:
- - '*'
- routes:
- - name: ready
- match:
- path: /ready
- headers:
- - name: ':method'
- string_match:
- exact: 'GET'
- route:
- cluster: airlock_microgateway_engine_admin
- http_filters:
- - name: envoy.filters.http.router
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- - name: metrics
- address:
- socket_address:
- address: 0.0.0.0
- port_value: 19002
- filter_chains:
- - filters:
- - name: http_connection_manager
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- stat_prefix: metrics
- codec_type: AUTO
- http2_protocol_options:
- initial_connection_window_size: 1048576
- initial_stream_window_size: 65536
- max_concurrent_streams: 100
- route_config:
- name: metrics
- virtual_hosts:
- - name: metrics
- domains:
- - '*'
- routes:
- - name: metrics
- match:
- path: /metrics
- headers:
- - name: ':method'
- string_match:
- exact: 'GET'
- route:
- prefix_rewrite: '/stats/prometheus'
- cluster: airlock_microgateway_engine_admin
- http_filters:
- - name: envoy.filters.http.router
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
- clusters:
- - name: xds_cluster
- connect_timeout: 1s
- type: STRICT_DNS
- load_assignment:
- cluster_name: xds_cluster
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: airlock-microgateway-operator-xds.$(OPERATOR_NAMESPACE).svc.cluster.local
- port_value: 13377
- typed_extension_protocol_options:
- envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
- '@type': type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
- explicit_http_config:
- http2_protocol_options:
- connection_keepalive:
- interval: 360s
- timeout: 5s
- transport_socket:
- name: envoy.transport_sockets.tls
- typed_config:
- '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
- common_tls_context:
- tls_params:
- tls_minimum_protocol_version: TLSv1_3
- tls_maximum_protocol_version: TLSv1_3
- validation_context_sds_secret_config:
- name: validation_context_sds
- sds_config:
- resource_api_version: V3
- path_config_source:
- path: /etc/envoy/validation_context_sds_secret.yaml
- watched_directory:
- path: /etc/envoy/
- tls_certificate_sds_secret_configs:
- - name: tls_certificate_sds
- sds_config:
- resource_api_version: V3
- path_config_source:
- path: /etc/envoy/tls_certificate_sds_secret.yaml
- watched_directory:
- path: /etc/envoy/
- - name: airlock_microgateway_engine_admin
- connect_timeout: 1s
- type: STATIC
- load_assignment:
- cluster_name: airlock_microgateway_engine_admin
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: 127.0.0.1
- port_value: 19000
- typed_extension_protocol_options:
- envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
- '@type': type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
- explicit_http_config:
- http2_protocol_options:
- connection_keepalive:
- interval: 360s
- timeout: 5s
- stats_config:
- stats_tags:
- - tag_name: "block_type"
- regex: "\\.(block_type\\.([^.]+))"
- - tag_name: "attack_type"
- regex: "\\.(attack_type\\.([^.]+))"
- - tag_name: "envoy_cluster_name"
- regex: "\\.(cluster\\.([^.]+))"
- - tag_name: "version"
- regex: "\\.(version\\.([^.]+))"
- use_all_default_tags: true
- overload_manager:
- resource_monitors:
- - name: "envoy.resource_monitors.global_downstream_max_connections"
- typed_config:
- "@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig
- max_active_downstream_connections: 50000
- bootstrap_extensions:
- - name: airlock.bootstrap.engine_build_info
- typed_config:
- '@type': type.googleapis.com/airlock.extensions.bootstrap.stats.v1alpha.Stats
- application_log_config:
- log_format:
- text_format: '{"@timestamp":"%Y-%m-%dT%T.%e%z","log":{"logger":"%n","level":"%l","origin":{"file":{"name":"%g","line":%#},"function":"%!"}},"event":{"module":"envoy","dataset":"envoy.application"},"process":{"pid":%P,"thread":{"id":%t}},"ecs":{"version":"8.5"},"message":"%j"}'
- engine_container_template.yaml: |
- name: "$(ENGINE_NAME)"
- image: "$(ENGINE_IMAGE)"
- imagePullPolicy: {{ .Values.engine.image.pullPolicy }}
- args:
- - "--config-path"
- - "/etc/envoy/bootstrap_config.yaml"
- - "--base-id"
- - "$(BASE_ID)"
- - "--file-flush-interval-msec"
- - '1000'
- - "--drain-time-s"
- - '60'
- - "--service-node"
- - "$(POD_NAME).$(POD_NAMESPACE)"
- - "--service-cluster"
- - "$(APP_NAME).$(POD_NAMESPACE)"
- - "--log-path"
- - "/dev/stdout"
- - "--log-level"
- - "$(LOG_LEVEL)"
- volumeMounts:
- - name: airlock-microgateway-bootstrap-secret-volume
- mountPath: /etc/envoy
- readOnly: true
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.namespace
- - name: POD_IP
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: status.podIP
- ports:
- - containerPort: 13378
- protocol: TCP
- - containerPort: 19001
- protocol: TCP
- - containerPort: 19002
- protocol: TCP
- livenessProbe:
- httpGet:
- path: /ready
- port: 19001
- scheme: HTTP
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 5
- successThreshold: 1
- timeoutSeconds: 1
- readinessProbe:
- httpGet:
- path: /ready
- port: 19001
- scheme: HTTP
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 3
- successThreshold: 1
- timeoutSeconds: 1
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- {{- with .Values.engine.resources }}
- resources:
- {{- toYaml . | nindent 6 }}
- {{- end }}
- session_agent_container_template.yaml: |
- name: "$(SESSION_AGENT_NAME)"
- image: "$(SESSION_AGENT_IMAGE)"
- imagePullPolicy: {{ .Values.sessionAgent.image.pullPolicy }}
- args:
- - "--port"
- - "19004"
- - "--config-path"
- - "/etc/microgateway-session-agent/config.json"
- volumeMounts:
- - name: airlock-microgateway-session-agent-volume
- mountPath: /etc/microgateway-session-agent
- readOnly: true
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- apiVersion: v1
- fieldPath: metadata.namespace
- ports:
- - containerPort: 19004
- livenessProbe:
- {{- if (semverCompare ">=1.27 || >=1.27.1-0" .Capabilities.KubeVersion.Version)}}
- grpc:
- port: 19004
- {{- else }}
- tcpSocket:
- port: 19004
- {{- end }}
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 5
- successThreshold: 1
- timeoutSeconds: 5
- readinessProbe:
- {{- if (semverCompare ">=1.27 || >=1.27.1-0" .Capabilities.KubeVersion.Version)}}
- grpc:
- port: 19004
- {{- else }}
- tcpSocket:
- port: 19004
- {{- end }}
- initialDelaySeconds: 5
- periodSeconds: 5
- failureThreshold: 3
- successThreshold: 1
- timeoutSeconds: 5
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- {{- with .Values.sessionAgent.resources }}
- resources:
- {{- toYaml . | nindent 6 }}
- {{- end }}
- network_validator_container_template.yaml: |
- name: "$(NETWORK_VALIDATOR_NAME)"
- image: "$(NETWORK_VALIDATOR_IMAGE)"
- imagePullPolicy: {{ .Values.networkValidator.image.pullPolicy }}
- command: ["/bin/sh", "-c"]
- args:
- - |-
- echo 'pong' | nc -v -l 127.0.0.1 13378 &
- for i in 1 2 3; do
- sleep 1s
- if r=$(echo 'ping' | nc -v -q 0 127.0.0.1 19003) && [ $r == pong ]; then
- echo -n 'Traffic redirection to Airlock Microgateway Engine is working.' > /dev/termination-log
- exit 0
- fi
- done
- echo -en 'Traffic redirection to Airlock Microgateway Engine is not working.\nRestart the pod after ensuring that hostNetwork is disabled and a compatible Airlock Microgateway CNI version is installed on the node.\nCertain environments may also require additional configuration (see docs.airlock.com for more information).' > /dev/termination-log
- exit 1
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
- runAsUser: $(SECURITYCONTEXT_UID)
- operator_config.yaml: |
- apiVersion: config.airlock.com/v1alpha1
- kind: OperatorConfig
- health:
- healthProbeBindAddress: :8081
- metrics:
- bindAddress: 0.0.0.0:8080
- webhook:
- port: 9443
- deployment:
- sidecar:
- engineContainerTemplate: "/sidecar/engine_container_template.yaml"
- networkValidatorContainerTemplate: "/sidecar/network_validator_container_template.yaml"
- sessionAgentContainerTemplate: "/sidecar/session_agent_container_template.yaml"
- engine:
- bootstrapConfigTemplate: "/engine_bootstrap_config_template.yaml"
- log:
- level: {{ .Values.operator.config.logLevel }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaces:
- selector:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaces:
- list:
- {{- toYaml . | nindent 8 }}
- {{- end }}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/dashboard-configmap.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/dashboard-configmap.yaml
deleted file mode 100644
index b71ac89b6..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/dashboard-configmap.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-{{- if .Values.dashboards.create -}}
-{{- range $instance := (keys .Values.dashboards.instances | sortAlpha) -}}
-{{- $dashboard := get $.Values.dashboards.instances $instance -}}
-{{- if $dashboard.create }}
----
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: {{ include "airlock-microgateway.fullname" $ }}-dashboard-{{ $instance | lower }}
- namespace: {{ $.Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.dashboards.config.grafana.dashboardLabel -}}
- {{- .name | nindent 4 -}}: {{ .value | quote }}
- {{- end }}
- annotations:
- {{- with $.Values.dashboards.config.grafana.folderAnnotation -}}
- {{- .name | nindent 4 -}}: {{ .value | quote }}
- {{- end }}
- {{- with $.Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-data:
- {{- printf "%s.json" $instance | nindent 2 }}: |-
- {{- ($.Files.Get (printf "dashboards/%s.json" $instance)) | nindent 4 -}}
-{{- end -}}
-{{- end -}}
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/deployment.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/deployment.yaml
deleted file mode 100644
index db340cdec..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/deployment.yaml
+++ /dev/null
@@ -1,143 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- replicas: {{ .Values.operator.replicaCount }}
- {{- with .Values.operator.updateStrategy }}
- strategy:
- {{- toYaml . | trim | nindent 4 }}
- {{- end }}
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- template:
- metadata:
- annotations:
- checksum/config: {{ include (print $.Template.BasePath "/operator/configmap.yaml") . | sha256sum }}
- kubectl.kubernetes.io/default-container: manager
- {{- with mustMerge .Values.operator.podAnnotations .Values.commonAnnotations}}
- {{- toYaml . | nindent 8 }}
- {{- end }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 8 }}
- {{- with .Values.operator.podLabels }}
- {{- toYaml . | nindent 8 }}
- {{- end }}
- spec:
- containers:
- - args:
- - --config=operator_config.yaml
- env:
- - name: ENGINE_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.engine.image }}
- - name: NETWORK_VALIDATOR_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.networkValidator.image }}
- - name: SESSION_AGENT_IMAGE
- value: {{ include "airlock-microgateway.image" .Values.sessionAgent.image }}
- - name: OPERATOR_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: OPERATOR_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- image: {{ include "airlock-microgateway.image" .Values.operator.image }}
- imagePullPolicy: {{ .Values.operator.image.pullPolicy }}
- livenessProbe:
- httpGet:
- path: /healthz
- port: 8081
- initialDelaySeconds: 15
- periodSeconds: 20
- timeoutSeconds: 5
- name: manager
- ports:
- - containerPort: 9443
- name: webhook-server
- protocol: TCP
- - containerPort: 13377
- name: xds-server
- protocol: TCP
- - containerPort: 8080
- protocol: TCP
- - containerPort: 8081
- protocol: TCP
- readinessProbe:
- httpGet:
- path: /readyz
- port: 8081
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- {{- with .Values.operator.resources }}
- resources:
- {{- toYaml . | nindent 10 }}
- {{- end }}
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 10 }}
- terminationMessagePath: /dev/termination-log
- terminationMessagePolicy: FallbackToLogsOnError
- volumeMounts:
- - mountPath: /tmp/k8s-webhook-server/serving-certs
- name: cert
- readOnly: true
- - mountPath: /opt/airlock/license/
- name: airlock-microgateway-license
- readOnly: true
- - mountPath: /operator_config.yaml
- name: operator-config
- subPath: operator_config.yaml
- - mountPath: /sidecar/engine_container_template.yaml
- name: operator-config
- subPath: engine_container_template.yaml
- - mountPath: /sidecar/network_validator_container_template.yaml
- name: operator-config
- subPath: network_validator_container_template.yaml
- - mountPath: /sidecar/session_agent_container_template.yaml
- name: operator-config
- subPath: session_agent_container_template.yaml
- - mountPath: /engine_bootstrap_config_template.yaml
- name: operator-config
- subPath: engine_bootstrap_config_template.yaml
- securityContext:
- runAsNonRoot: true
- serviceAccountName: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- terminationGracePeriodSeconds: 10
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.nodeSelector }}
- nodeSelector:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.tolerations }}
- tolerations:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- {{- with .Values.operator.affinity }}
- affinity:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - name: cert
- secret:
- defaultMode: 420
- secretName: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-server-cert
- - name: airlock-microgateway-license
- secret:
- defaultMode: 292
- optional: true
- secretName: {{ .Values.license.secretName }}
- - configMap:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-config
- name: operator-config
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/manager-role.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/manager-role.yaml
deleted file mode 100644
index 90335bcfe..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/manager-role.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-{{- if .Values.operator.rbac.create }}
-{{- if empty .Values.operator.watchNamespaces }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
-{{ include "airlock-microgateway-operator.rbacRules" . -}}
-{{- else }}
-{{- range $namespace := (append .Values.operator.watchNamespaces .Release.Namespace | uniq) }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
- namespace: {{ $namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
-{{ include "airlock-microgateway-operator.rbacRules" $ }}
----
-{{- end -}}
-{{- end -}}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/manager-rolebinding.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/manager-rolebinding.yaml
deleted file mode 100644
index ae99cfb7b..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/manager-rolebinding.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-{{- if .Values.operator.rbac.create }}
-{{- if empty .Values.operator.watchNamespaces }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: {{ include "airlock-microgateway.operator.fullname" . }}-manager-{{ .Release.Namespace }}
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- namespace: {{ .Release.Namespace }}
-{{- else }}
-{{- range $namespace := (append .Values.operator.watchNamespaces .Release.Namespace | uniq) }}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
- namespace: {{ $namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" $ | nindent 4 }}
- {{- with $.Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: {{ include "airlock-microgateway.operator.fullname" $ }}-manager
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" $ }}
- namespace: {{ $.Release.Namespace }}
----
-{{- end -}}
-{{- end -}}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/metrics-service.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/metrics-service.yaml
deleted file mode 100644
index 34d23f6d6..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/metrics-service.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-metrics
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: http
- name: metrics
- port: 8080
- protocol: TCP
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
----
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-leader-metrics
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- operator.microgateway.airlock.com/isLeader: "true"
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: http
- name: metrics
- port: 8080
- protocol: TCP
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
- operator.microgateway.airlock.com/isLeader: "true"
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/mutating-webhook.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/mutating-webhook.yaml
deleted file mode 100644
index 311f9726a..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/mutating-webhook.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-{{ .Release.Namespace }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- annotations:
- cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- {{- with .Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-webhooks:
-{{- range $webhook := (include "airlock-microgateway-operator.mutatingWebhooks" .) | fromYamlArray }}
-- {{ toYaml $webhook | indent 2 | trim }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaceSelector:
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaceSelector:
- matchExpressions:
- - key: kubernetes.io/metadata.name
- operator: In
- values:
- {{- toYaml . | nindent 10 }}
- {{- end }}
-{{- end }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/podmonitor.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/podmonitor.yaml
deleted file mode 100644
index 1fe34fcb3..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/podmonitor.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-{{- if .Values.engine.sidecar.podMonitor.create }}
-apiVersion: monitoring.coreos.com/v1
-kind: PodMonitor
-metadata:
- name: {{ include "airlock-microgateway.fullname" . }}-engine
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.engine.sidecar.podMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- namespaceSelector:
- any: true
- selector:
- matchLabels:
- sidecar.microgateway.airlock.com/inject: "true"
- microgateway.airlock.com/managedBy: {{ .Release.Namespace }}
- podMetricsEndpoints:
- - targetPort: 19002
- path: /metrics
- scheme: http
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/role.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/role.yaml
deleted file mode 100644
index 5378be8ef..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/role.yaml
+++ /dev/null
@@ -1,45 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-rules:
- - apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
- - apiGroups:
- - coordination.k8s.io
- resources:
- - leases
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
- - apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
- - patch
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/rolebinding.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/rolebinding.yaml
deleted file mode 100644
index bafec1015..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/rolebinding.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-{{- if .Values.operator.rbac.create -}}
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader-election
-subjects:
- - kind: ServiceAccount
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/selfsigned-issuer.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/selfsigned-issuer.yaml
deleted file mode 100644
index 466c56338..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/selfsigned-issuer.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Issuer
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-selfsigned-issuer
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selfSigned: {}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/serviceaccount.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/serviceaccount.yaml
deleted file mode 100644
index 434d7e9d3..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/serviceaccount.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-{{- if .Values.operator.serviceAccount.create -}}
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: {{ include "airlock-microgateway.operator.serviceAccountName" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with mustMerge .Values.operator.serviceAccount.annotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/servicemonitor.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/servicemonitor.yaml
deleted file mode 100644
index ff85a9a31..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/servicemonitor.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-{{- if .Values.operator.serviceMonitor.create }}
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- matchExpressions:
- - { key: "operator.microgateway.airlock.com/isLeader", operator: DoesNotExist }
- endpoints:
- - path: /metrics
- port: metrics
- scheme: http
- metricRelabelings:
- - sourceLabels:
- - __name__
- regex: {{ include "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" . }}
- action: drop
----
-apiVersion: monitoring.coreos.com/v1
-kind: ServiceMonitor
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-leader
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceMonitor.labels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- selector:
- matchLabels:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 6 }}
- operator.microgateway.airlock.com/isLeader: "true"
- endpoints:
- - path: /metrics
- port: metrics
- scheme: http
- metricRelabelings:
- - sourceLabels:
- - __name__
- regex: {{ include "airlock-microgateway.operator.metricsLeaderOnlyRegexPattern" . }}
- action: keep
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/serving-certificate.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/serving-certificate.yaml
deleted file mode 100644
index 60b92e1e2..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/serving-certificate.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-apiVersion: cert-manager.io/v1
-kind: Certificate
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- dnsNames:
- - airlock-microgateway-operator-webhook.{{ .Release.Namespace }}.svc
- - airlock-microgateway-operator-webhook.{{ .Release.Namespace }}.svc.cluster.local
- issuerRef:
- kind: Issuer
- name: {{ include "airlock-microgateway.operator.fullname" . }}-selfsigned-issuer
- secretName: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-server-cert
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/validating-webhook.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/validating-webhook.yaml
deleted file mode 100644
index 5d6b4396b..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/validating-webhook.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
- name: {{ include "airlock-microgateway.operator.fullname" . }}-webhook-{{ .Release.Namespace }}
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- annotations:
- cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "airlock-microgateway.operator.fullname" . }}-serving-cert
- {{- with .Values.commonAnnotations }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
-webhooks:
-{{- range $webhook := (include "airlock-microgateway-operator.validatingWebhooks" .) | fromYamlArray }}
-- {{ toYaml $webhook | indent 2 | trim }}
- {{- with $.Values.operator.watchNamespaceSelector }}
- namespaceSelector:
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with $.Values.operator.watchNamespaces }}
- namespaceSelector:
- matchExpressions:
- - key: kubernetes.io/metadata.name
- operator: In
- values:
- {{- toYaml . | nindent 10 }}
- {{- end }}
-{{- end }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/webhook-service.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/webhook-service.yaml
deleted file mode 100644
index 477ea839f..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/webhook-service.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-webhook
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: https
- name: webhook
- port: 443
- protocol: TCP
- targetPort: 9443
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/operator/xds-service.yaml b/charts/airlock/microgateway/4.3.4/templates/operator/xds-service.yaml
deleted file mode 100644
index 81b41acf5..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/operator/xds-service.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: airlock-microgateway-operator-xds
- namespace: {{ .Release.Namespace }}
- labels:
- {{- include "airlock-microgateway.operator.labels" . | nindent 4 }}
- {{- with .Values.operator.serviceLabels }}
- {{- toYaml . | nindent 4 }}
- {{- end }}
- {{- with mustMerge .Values.operator.serviceAnnotations .Values.commonAnnotations }}
- annotations:
- {{- toYaml . | nindent 4 }}
- {{- end }}
-spec:
- ports:
- - appProtocol: grpc
- name: xds
- port: 13377
- protocol: TCP
- targetPort: 13377
- selector:
- {{- include "airlock-microgateway.operator.selectorLabels" . | nindent 4 }}
- operator.microgateway.airlock.com/isLeader: "true"
diff --git a/charts/airlock/microgateway/4.3.4/templates/scc-role.yaml b/charts/airlock/microgateway/4.3.4/templates/scc-role.yaml
new file mode 100644
index 000000000..862748692
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/templates/scc-role.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+rules:
+- apiGroups:
+ - security.openshift.io
+ resourceNames:
+ - privileged
+ resources:
+ - securitycontextconstraints
+ verbs:
+ - use
+{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/scc-rolebinding.yaml b/charts/airlock/microgateway/4.3.4/templates/scc-rolebinding.yaml
new file mode 100644
index 000000000..ebd02982c
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/templates/scc-rolebinding.yaml
@@ -0,0 +1,20 @@
+{{- if .Values.rbac.createSCCRole -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: {{ include "airlock-microgateway-cni.fullname" . }}-privileged
+subjects:
+- kind: ServiceAccount
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/serviceaccount.yaml b/charts/airlock/microgateway/4.3.4/templates/serviceaccount.yaml
new file mode 100644
index 000000000..3dc8d58ea
--- /dev/null
+++ b/charts/airlock/microgateway/4.3.4/templates/serviceaccount.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "airlock-microgateway-cni.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labels" . | nindent 4 }}
+ {{- with mustMerge .Values.serviceAccount.annotations .Values.commonAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/tests/rbac.yaml b/charts/airlock/microgateway/4.3.4/templates/tests/rbac.yaml
index 93bd4cd1b..744799333 100644
--- a/charts/airlock/microgateway/4.3.4/templates/tests/rbac.yaml
+++ b/charts/airlock/microgateway/4.3.4/templates/tests/rbac.yaml
@@ -2,142 +2,63 @@
apiVersion: v1
kind: ServiceAccount
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
subjects:
- kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
+ app.kubernetes.io/component: tests
rules:
- apiGroups:
- - microgateway.airlock.com
+ - "apps"
resources:
- - sidecargateways
+ - daemonsets
resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway"
+ - {{ include "airlock-microgateway-cni.fullname" . }}
verbs:
- - get
- - list
- - watch
- - delete
+ - get
+ - watch
+ - list
- apiGroups:
- - microgateway.airlock.com
+ - ""
resources:
- - sidecargateways
+ - pods
+ - pods/log
verbs:
- - create
+ - get
+ - list
+{{- if .Values.rbac.createSCCRole }}
- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - list
-- apiGroups:
- - "apps"
- resources:
- - deployments
+ - security.openshift.io
resourceNames:
- - "{{ include "airlock-microgateway.operator.fullname" . }}"
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - "apps"
+ - privileged
resources:
- - statefulsets
- - statefulsets/scale
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend"
+ - securitycontextconstraints
verbs:
- - get
- - list
- - watch
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- - pods/log
- - pods/status
- - pods/attach
- resourceNames:
- - "{{ include "airlock-microgateway.fullname" . }}-test-backend-0"
- - "{{ include "airlock-microgateway.fullname" . }}-test-valid-request"
- - "{{ include "airlock-microgateway.fullname" . }}-test-injection-request"
- verbs:
- - get
- - list
- - create
- - watch
- - delete
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - create
-{{- if .Values.operator.watchNamespaceSelector }}
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-subjects:
- - kind: ServiceAccount
- name: "{{ include "airlock-microgateway.fullname" . }}-tests"
- namespace: {{ .Release.Namespace }}
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app.kubernetes.io/component: tests
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
-rules:
-- apiGroups:
- - ""
- resources:
- - namespaces
- verbs:
- - get
- - list
-{{- end }}
+ - use
+{{- end -}}
{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/templates/tests/service.yaml b/charts/airlock/microgateway/4.3.4/templates/tests/service.yaml
deleted file mode 100644
index 30ddc278d..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/tests/service.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-{{- if .Values.tests.enabled -}}
-apiVersion: v1
-kind: Service
-metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-service"
- namespace: {{ .Release.Namespace }}
- labels:
- app: test-service
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
-spec:
- selector:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
- ports:
- - name: http
- port: 8080
- targetPort: 8080
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/tests/statefulset.yaml b/charts/airlock/microgateway/4.3.4/templates/tests/statefulset.yaml
deleted file mode 100644
index 710a7b9f6..000000000
--- a/charts/airlock/microgateway/4.3.4/templates/tests/statefulset.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-{{- if .Values.tests.enabled -}}
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- namespace: {{ .Release.Namespace }}
- labels:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
-spec:
- serviceName: nginx
- replicas: 0
- selector:
- matchLabels:
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 6 }}
- template:
- metadata:
- annotations:
- k8s.v1.cni.cncf.io/networks: default/airlock-microgateway-cni
- labels:
- sidecar.microgateway.airlock.com/inject: "true"
- sidecar.istio.io/inject: "false"
- app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- app: "{{ include "airlock-microgateway.fullname" . }}-test-backend"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 8 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 8 }}
- spec:
- containers:
- - image: cgr.dev/chainguard/nginx
- name: nginx
- ports:
- - containerPort: 8080
- volumeMounts:
- - mountPath: /var/lib/nginx/tmp/
- name: nginx-tmp
- - mountPath: /var/run
- name: nginx-run
- securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 12 }}
- {{- with .Values.imagePullSecrets }}
- imagePullSecrets:
- {{- toYaml . | nindent 8 }}
- {{- end }}
- volumes:
- - emptyDir: {}
- name: nginx-tmp
- - emptyDir: {}
- name: nginx-run
-{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/templates/tests/test-install.yaml b/charts/airlock/microgateway/4.3.4/templates/tests/test-install.yaml
index ab82abea7..12d8c8de7 100644
--- a/charts/airlock/microgateway/4.3.4/templates/tests/test-install.yaml
+++ b/charts/airlock/microgateway/4.3.4/templates/tests/test-install.yaml
@@ -2,14 +2,11 @@
apiVersion: v1
kind: Pod
metadata:
- name: "{{ include "airlock-microgateway.fullname" . }}-test-install"
+ name: "{{ include "airlock-microgateway-cni.fullname" . }}-test-install"
namespace: {{ .Release.Namespace }}
labels:
+ {{- include "airlock-microgateway-cni.labelsWithoutComponent" . | nindent 4 }}
app.kubernetes.io/component: test-install
- app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
- sidecar.istio.io/inject: "false"
- {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
- {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
annotations:
helm.sh/hook: test
helm.sh/hook-delete-policy: before-hook-creation
@@ -19,209 +16,88 @@ spec:
- name: test
image: "bitnami/kubectl:{{ .Capabilities.KubeVersion.Major }}.{{ .Capabilities.KubeVersion.Minor }}"
securityContext:
- {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
+ allowPrivilegeEscalation: {{ .Values.privileged }}
+ capabilities:
+ drop:
+ - ALL
+ privileged: {{ .Values.privileged }}
+ readOnlyRootFilesystem: true
+ runAsGroup: 0
+ runAsNonRoot: false
+ runAsUser: 0
+ seccompProfile:
+ type: RuntimeDefault
+ volumeMounts:
+ - mountPath: /host/opt/cni/bin
+ name: cni-bin-dir
+ readOnly: true
+ - mountPath: /host/etc/cni/net.d
+ name: cni-net-dir
+ readOnly: true
command:
- sh
- -c
- |
set -eu
- clean_up() {
- echo ""
- echo "### Clean up test resources"
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- echo ""
- echo "### Scale down '{{ include "airlock-microgateway.fullname" . }}-test-backend'"
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=60s
- sleep 3s
- echo ""
- }
-
fail() {
+ echo "Error: ${1}"
echo ""
- echo "### Error: ${1}"
- echo ""
-
- if kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway >/dev/null 2>&1; then
- echo ""
- echo 'Microgateway Sidecargateway status:'
- kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway -o jsonpath-as-json='{.status}' || true
- echo ""
- echo ""
- fi
-
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 >/dev/null 2>&1; then
- echo "Pod '{{ include "airlock-microgateway.fullname" . }}-test-backend-0':"
- kubectl describe -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 || true
- echo ""
- echo ""
- echo 'Logs of Nginx container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c nginx --tail 5 || true
- echo ""
- echo ""
- # Wait for engine logs
- sleep 10s
- echo 'Logs of Microgateway Engine container:'
- kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c airlock-microgateway-engine --tail 5 || true
- fi
-
+ echo 'CNI installer logs:'
+ kubectl logs -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}} -c cni-installer
exit 1
}
- create_sidecargateway() {
- # create SidecarGateway resource for testing purposes
- kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
- kubectl apply -f - </dev/null 2>&1; do sleep 1s; i=$((i+1)); done
- kubectl logs -f -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- kubectl delete pod --ignore-not-found=true -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
- }
-
- {{- if .Values.operator.watchNamespaceSelector }}
- echo "### Verify that Namespace Selector matches Namespace '{{ .Release.Namespace }}'"
- if ! kubectl get namespace -l '{{ include "airlock-microgateway.watchNamespaceSelector.labelQuery" .Values.operator.watchNamespaceSelector }}' | grep -q {{ .Release.Namespace }}; then
- labels=$(kubectl get namespace {{ .Release.Namespace }} -o jsonpath={.metadata.labels} | jq | awk '{print " " $0}')
- fail {{printf `"Operator namespace '%s' is not part of the operator's watch scope. To execute 'helm test', the selector configured in the helm value 'operator.watchNamespaceSelector' must match the namespace's labels:\n* Current selector:\n%s\n\n* Current labels:\n$labels\n###"`
- .Release.Namespace
- (replace "\"" "\\\"" (replace "\n" "\\n" (.Values.operator.watchNamespaceSelector | toPrettyJson | indent 2)))
- }}
+ if ! kubectl rollout status --timeout=60s -n {{ .Release.Namespace }} daemonsets/{{ include "airlock-microgateway-cni.fullname" .}}; then
+ fail 'CNI DaemonSet rollout did not complete within timeout'
fi
- echo ""
- {{- end }}
- trap clean_up EXIT
- echo ""
-
- echo "### Waiting for Microgateway Operator Deployments to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} --timeout=90s \
- deployments/{{ include "airlock-microgateway.operator.fullname" . }}; then
- fail 'Timout occurred'
+ echo "Checking whether CNI binary was installed"
+ if ! [ -f "/host/opt/cni/bin/{{ include "airlock-microgateway-cni.fullname" . }}" ]; then
+ fail 'CNI binary was not installed'
fi
- echo ""
- echo "### Scale '{{ include "airlock-microgateway.fullname" . }}-test-backend' to '1' replica"
- # scale to zero replicas to ensure no pods are present from previous runs
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=10s
- kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=1 --timeout=10s
- echo ""
-
- echo "### Waiting for backend pod"
- i=0
- while true; do
- if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0; then
- break
- elif [ $i -gt 3 ]; then
- fail 'Pod not ready'
- fi
- sleep 2s
- i=$((i+1))
- done
-
- echo "### Checking Microgateway Engine sidecar container was injected"
- if ! kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.spec.containers[?(@.name=="airlock-microgateway-engine")]}' | grep -q "airlock-microgateway-engine"; then
- fail 'Microgateway Engine sidecar container not injected'
+ echo "Checking whether CNI kubeconfig was installed"
+ if ! [ -f "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}-kubeconfig" ]; then
+ fail 'CNI kubeconfig was not created'
fi
- echo "True"
- echo ""
- echo "### Checking for valid license"
- i=0
- while true; do
- if [ "$(kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.metadata.labels.sidecar\.microgateway\.airlock\.com/licensed}')" = 'true' ]; then
- break
- elif [ $i -gt 30 ]; then
- fail 'Microgateway license is missing or invalid'
- fi
- sleep 2s
- i=$((i+1))
- done
- echo "True"
- echo ""
+ echo "Checking whether CNI configuration was written"
+ case {{ .Values.config.installMode }} in
+ "chained")
+ for file in "/host/etc/cni/net.d/"*.conflist; do
+ if containsMGWCNIConf "${file}"; then
+ echo "Success"
+ exit 0
+ fi
+ done
+ ;;
+ "standalone")
+ if containsMGWCNIConf "/host/etc/cni/net.d/{{ include "airlock-microgateway-cni.fullname" . }}.conflist"; then
+ echo "Success"
+ exit 0
+ fi
+ ;;
+ "manual")
+ echo "- Skipping because we are in 'manual' install mode"
+ echo "Success"
+ exit 0
+ ;;
+ esac
- echo "### Create SidecarGateway resource for testing"
- if ! create_sidecargateway ; then
- fail 'Creation of SidecarGateway resource failed'
- fi
- echo ""
-
- echo "### Waiting for '{{ include "airlock-microgateway.fullname" . }}-test-backend' to be ready"
- if ! kubectl rollout status -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --timeout=90s; then
- fail 'Timout occurred'
- fi
- echo ""
-
- echo "### Waiting for 'engine-config-valid' condition"
- if ! kubectl wait -n {{ .Release.Namespace }} pods --field-selector=metadata.name={{ include "airlock-microgateway.fullname" . }}-test-backend-0 --timeout=90s --for=condition=microgateway.airlock.com/engine-config-valid=True; then
- fail 'Configuration was never accepted by the Microgateway Engine'
- fi
- sleep 5s
- echo ""
- echo ""
-
- echo "### Checking whether a valid request is successful and returns HTTP status code '200'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "200 OK"; then
- fail 'A valid request was not successful'
- fi
- echo ""
- echo ""
-
- echo "### Checking whether a request with an injection attack is blocked and returns HTTP status code '400'"
- out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/?token='%20UnION%20all%20select%20A" || true)
- echo "Response:"
- echo "${out}"
- if ! echo "${out}" | grep -q "400 Bad Request"; then
- fail 'A malicious request was not blocked'
- fi
- echo ""
- echo ""
-
- echo "### Installation of '{{ include "airlock-microgateway.fullname" . }}' succeeded"
- exit 0
- serviceAccountName: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ fail 'Configuration for plugin "{{ include "airlock-microgateway-cni.fullname" . }}" was not found'
+ serviceAccountName: "{{ include "airlock-microgateway-cni.fullname" . }}-tests"
+ volumes:
+ - hostPath:
+ path: "{{ .Values.config.cniBinDir }}"
+ type: Directory
+ name: cni-bin-dir
+ - hostPath:
+ path: "{{ .Values.config.cniNetDir }}"
+ type: Directory
+ name: cni-net-dir
{{- end -}}
diff --git a/charts/airlock/microgateway/4.3.4/values.schema.json b/charts/airlock/microgateway/4.3.4/values.schema.json
index 173d6b084..e087bd700 100644
--- a/charts/airlock/microgateway/4.3.4/values.schema.json
+++ b/charts/airlock/microgateway/4.3.4/values.schema.json
@@ -14,15 +14,6 @@
"commonAnnotations": {
"$ref": "#/definitions/StringMap"
},
- "crds": {
- "type": "object",
- "properties": {
- "skipVersionCheck": {
- "type": "boolean"
- }
- },
- "additionalProperties": false
- },
"imagePullSecrets": {
"type": "array",
"items": {
@@ -39,304 +30,120 @@
"additionalProperties": true
}
},
- "operator": {
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "podAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "podLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "resources": {
+ "type": "object"
+ },
+ "nodeSelector": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "affinity": {
+ "type": "object"
+ },
+ "rbac": {
"type": "object",
"properties": {
- "replicaCount": {
- "type": "integer",
- "minimum": 0
- },
- "updateStrategy": {
- "$ref": "#/definitions/UpdateStrategy"
- },
- "image": {
- "$ref": "#/definitions/Image"
- },
- "podAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "podLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceAnnotations": {
- "$ref": "#/definitions/StringMap"
- },
- "serviceLabels": {
- "$ref": "#/definitions/StringMap"
- },
- "resources": {
- "type": "object"
- },
- "nodeSelector": {
- "$ref": "#/definitions/StringMap"
- },
- "tolerations": {
- "type": "array",
- "items": {
- "type": "object"
- }
- },
- "affinity": {
- "type": "object"
- },
- "config": {
- "type": "object",
- "properties": {
- "logLevel": {
- "type": "string",
- "enum": [
- "debug",
- "info",
- "warn",
- "error"
- ]
- }
- },
- "required": [
- "logLevel"
- ],
- "additionalProperties": false
- },
- "serviceAccount": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "annotations": {
- "$ref": "#/definitions/StringMap"
- },
- "name": {
- "type": "string"
- }
- },
- "required": [
- "annotations",
- "create",
- "name"
- ],
- "additionalProperties": false
- },
- "watchNamespaces": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "watchNamespaceSelector": {
- "$ref": "#/definitions/LabelSelector"
- },
- "rbac": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- },
- "serviceMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "oneOf": [
- {
- "properties": {
- "watchNamespaces": {
- "minItems": 1
- },
- "watchNamespaceSelector": {
- "additionalProperties": false
- }
- }
- },
- {
- "properties": {
- "watchNamespaces": {
- "maxItems": 0
- },
- "watchNamespaceSelector": {
- "$ref": "#/definitions/LabelSelector"
- }
- }
- }
- ],
- "required": [
- "affinity",
- "config",
- "image",
- "updateStrategy",
- "nodeSelector",
- "podAnnotations",
- "podLabels",
- "rbac",
- "replicaCount",
- "resources",
- "serviceAccount",
- "serviceAnnotations",
- "serviceLabels",
- "serviceMonitor",
- "tolerations"
- ],
- "additionalProperties": false
- },
- "engine": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- },
- "resources": {
- "type": "object"
- },
- "sidecar": {
- "type": "object",
- "properties":{
- "podMonitor": {
- "type": "object",
- "properties": {
- "create": {
- "type": "boolean"
- },
- "labels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "required": [
- "create"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "podMonitor"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "image",
- "resources",
- "sidecar"
- ],
- "additionalProperties": false
- },
- "networkValidator": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- }
- },
- "required": [
- "image"
- ],
- "additionalProperties": false
- },
- "sessionAgent": {
- "type": "object",
- "properties": {
- "image": {
- "$ref": "#/definitions/Image"
- },
- "resources": {
- "type": "object"
- }
- },
- "required": [
- "image",
- "resources"
- ],
- "additionalProperties": false
- },
- "license": {
- "type": "object",
- "properties": {
- "secretName": {
- "type": "string",
- "minLength": 1
- }
- },
- "required": [
- "secretName"
- ],
- "additionalProperties": false
- },
- "dashboards": {
- "type": "object",
- "properties" : {
"create": {
"type": "boolean"
},
- "config": {
- "type": "object",
- "properties": {
- "grafana": {
- "type": "object",
- "properties": {
- "folderAnnotation": {
- "$ref": "#/definitions/NameValuePair"
- },
- "dashboardLabel": {
- "$ref": "#/definitions/NameValuePair"
- }
- },
- "required": [
- "folderAnnotation",
- "dashboardLabel"
- ],
- "additionalProperties": false
- }
- },
- "required": [
- "grafana"
- ],
- "additionalProperties": false
- },
- "instances": {
- "type": "object",
- "properties": {
- "overview": {
- "$ref": "#/definitions/DashboardInstance"
- },
- "license" : {
- "$ref": "#/definitions/DashboardInstance"
- },
- "blockMetrics" : {
- "$ref": "#/definitions/DashboardInstance"
- },
- "blockLogs" : {
- "$ref": "#/definitions/DashboardInstance"
- }
- },
- "required": [
- "overview",
- "license",
- "blockMetrics",
- "blockLogs"
- ],
- "additionalProperties": false
+ "createSCCRole": {
+ "type": "boolean"
}
},
"required": [
"create",
- "config",
- "instances"
+ "createSCCRole"
+ ],
+ "additionalProperties": false
+ },
+ "privileged": {
+ "type": "boolean"
+ },
+ "serviceAccount": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "annotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "annotations",
+ "create",
+ "name"
+ ],
+ "additionalProperties": false
+ },
+ "multusNetworkAttachmentDefinition": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "namespace": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "create",
+ "namespace"
+ ],
+ "additionalProperties": false
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "installMode": {
+ "type": "string",
+ "enum": [
+ "chained",
+ "standalone",
+ "manual"
+ ]
+ },
+ "logLevel": {
+ "type": "string",
+ "enum": [
+ "debug",
+ "info",
+ "warn",
+ "error"
+ ]
+ },
+ "cniNetDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "cniBinDir": {
+ "type": "string",
+ "minLength": 1
+ },
+ "excludeNamespaces": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "cniBinDir",
+ "cniNetDir",
+ "excludeNamespaces",
+ "installMode",
+ "logLevel"
],
"additionalProperties": false
},
@@ -357,18 +164,22 @@
}
},
"required": [
+ "affinity",
"commonAnnotations",
"commonLabels",
- "crds",
- "engine",
+ "config",
"fullnameOverride",
+ "image",
"imagePullSecrets",
- "license",
+ "multusNetworkAttachmentDefinition",
"nameOverride",
- "operator",
- "networkValidator",
- "sessionAgent",
- "dashboards",
+ "nodeSelector",
+ "podAnnotations",
+ "podLabels",
+ "privileged",
+ "rbac",
+ "resources",
+ "serviceAccount",
"tests"
],
"additionalProperties": false,
@@ -409,132 +220,6 @@
"tag"
],
"additionalProperties": false
- },
- "LabelSelector": {
- "type": "object",
- "properties": {
- "matchExpressions": {
- "type": "array",
- "items": {
- "type": "object",
- "required": [
- "key",
- "operator"
- ],
- "properties": {
- "key": {
- "type": "string"
- },
- "operator": {
- "type": "string"
- },
- "values": {
- "type": "array",
- "items": {
- "type": "string"
- }
- }
- },
- "additionalProperties": false
- }
- },
- "matchLabels": {
- "$ref": "#/definitions/StringMap"
- }
- },
- "additionalProperties": false
- },
- "UpdateStrategy": {
- "type": "object",
- "oneOf" : [
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RecreateType"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- },
- {
- "properties": {
- "type": {
- "$ref": "#/definitions/RollingUpdateType"
- },
- "rollingUpdate": {
- "$ref": "#/definitions/RollingUpdate"
- }
- },
- "required": [
- "type"
- ],
- "additionalProperties": false
- }
- ]
- },
- "RecreateType": {
- "type": "string",
- "enum": [
- "Recreate"
- ]
- },
- "RollingUpdateType": {
- "type": "string",
- "enum": [
- "RollingUpdate"
- ]
- },
- "RollingUpdate": {
- "type": "object",
- "properties": {
- "maxSurge": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- },
- "maxUnavailable": {
- "type": ["integer", "string"],
- "minimum": 0,
- "pattern": "^\\d+%?$"
- }
- },
- "anyOf": [
- {"required": ["maxSurge"]},
- {"required": ["maxUnavailable"]}
- ],
- "additionalProperties": false
- },
- "DashboardInstance" : {
- "type" : "object",
- "properties" : {
- "create" : {
- "type" : "boolean"
- }
- },
- "required" : [
- "create"
- ],
- "additionalProperties": false
- },
- "NameValuePair" : {
- "type" : "object",
- "properties" : {
- "name" : {
- "type": "string",
- "minLength": 1
- },
- "value" : {
- "type" : "string",
- "minLength": 1
- }
- },
- "required" : [
- "name",
- "value"
- ],
- "additionalProperties": false
}
}
}
diff --git a/charts/airlock/microgateway/4.3.4/values.yaml b/charts/airlock/microgateway/4.3.4/values.yaml
index af720d5c6..63ef36033 100644
--- a/charts/airlock/microgateway/4.3.4/values.yaml
+++ b/charts/airlock/microgateway/4.3.4/values.yaml
@@ -1,4 +1,4 @@
-# -- Allows overriding the name to use instead of "microgateway".
+# -- Allows overriding the name to use instead of "microgateway-cni".
nameOverride: ""
# -- Allows overriding the name to use as full name of resources.
fullnameOverride: ""
@@ -10,203 +10,75 @@ commonAnnotations: {}
imagePullSecrets: []
# - name: myRegistryKeySecretName
-crds:
- # -- Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs.
- # The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster
- # when performing a "helm install/upgrade".
- skipVersionCheck: false
-operator:
- # -- Number of replicas for the operator Deployment.
- replicaCount: 2
- # -- Specifies the operator update strategy.
- updateStrategy:
- type: RollingUpdate
- # Specifies the Airlock Microgateway Operator image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Operator image.
- repository: "quay.io/airlock/microgateway-operator"
- # -- Image tag to pull.
- tag: "4.3.4"
- # -- SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63").
- # Overrides tag when specified.
- digest: "sha256:6819c78d5570de66edce6c13964c6e1b4cc4746d0c0bc6f4975cd38e324828c0"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Annotations to add to all Pods.
- podAnnotations: {}
- # -- Labels to add to all Pods.
- podLabels: {}
- # -- Annotations to add to the Service.
- serviceAnnotations: {}
- # prometheus.io/scrape: "true"
- # prometheus.io/port: "8080"
-
- # -- Labels to add to the Service.
- serviceLabels: {}
- # -- Resource restrictions to apply to the operator container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 1000m
- # memory: 512Mi
- # requests:
- # cpu: 100m
- # memory: 512Mi
-
- # -- Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes.
- nodeSelector: {}
- # -- Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes.
- tolerations: []
- # -- Custom affinity to apply to the operator Deployment. Used to influence the scheduling.
- affinity: {}
- # Parameters for the operator configuration.
- config:
- # -- Operator application log level.
- logLevel: "info"
- # Configures the generation of the ServiceAccount.
- serviceAccount:
- # -- Whether a ServiceAccount should be created.
- create: true
- # -- Annotations to add to the ServiceAccount.
- annotations: {}
- # -- Name of the ServiceAccount to use.
- # If not set and create is true, a name is generated using the fullname template.
- name: ""
- # -- Allows to restrict the operator to specific namespaces, depending on your needs.
- # For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`).
- # In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace.
- # For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`.
- # An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty.
- # Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces.
- # Please note that this feature requires a Premium license.
- watchNamespaces: []
- # -- Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector.
- # It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator.
- # This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings).
- # An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty.
- # Please note that this feature requires a Premium license.
- watchNamespaceSelector: {}
- # For further examples, see: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements.
- # matchLabels:
- # microgateway.airlock.com/enable: "true"
- # matchExpressions:
- # - { key: environment, operator: NotIn, values: [dev] }
-
- # Configures the generation of Role and RoleBinding as well as ClusterRoles and ClusterRoleBinding pairs for the ServiceAccount specified above.
- rbac:
- # -- Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function.
- create: true
- # Configures the generation of a Prometheus Operator ServiceMonitor.
- serviceMonitor:
- # -- Whether to create a ServiceMonitor resource for monitoring.
- create: false
- # -- Labels to add to the ServiceMonitor.
- labels: {}
- # release: ""
-engine:
- # Specifies the Airlock Microgateway Engine image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Engine image.
- repository: "quay.io/airlock/microgateway-engine"
- # -- Image tag to pull.
- tag: "4.3.4"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:91e05c509bed3b51ff4888d7475980d56cbc85db121aa766d1bde413204f9070"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Engine container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 500m
- # memory: 128Mi
- # requests:
- # cpu: 10m
- # memory: 40Mi
-
- # Additional configuration when deployed as a sidecar.
- sidecar:
- # Configures the generation of a Prometheus Operator PodMonitor.
- podMonitor:
- # -- Whether to create a PodMonitor resource for monitoring.
- create: false
- # -- Labels to add to the PodMonitor.
- labels: {}
- # release: ""
-networkValidator:
- # Specifies the Airlock Microgateway Network Validator image to be injected as an init-container.
- image:
- # -- Image repository from which to pull the netcat image for the Airlock Microgateway Network Validator init-container.
- repository: "cgr.dev/chainguard/netcat"
- # -- Image tag to pull.
- tag: ""
- # -- SHA256 image digest to pull (in the format "sha256:7a73d4b82a2d4165bbc5efa55de4fee9d43f2b1c1edb3505cdc8afd1361bad9b").
- # Overrides tag when specified.
- digest: "sha256:7a73d4b82a2d4165bbc5efa55de4fee9d43f2b1c1edb3505cdc8afd1361bad9b"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
-sessionAgent:
- # Specifies the Airlock Microgateway Session Agent image.
- image:
- # -- Image repository from which to pull the Airlock Microgateway Session Agent image.
- repository: "quay.io/airlock/microgateway-session-agent"
- # -- Image tag to pull.
- tag: "4.3.4"
- # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
- # Overrides tag when specified.
- digest: "sha256:df4e50d0929cb4c5e4486452979b59ec17f5e49a1516b685acd3a1ab0ddb3cf4"
- # -- Pull policy for this image.
- pullPolicy: IfNotPresent
- # -- Resource restrictions to apply to the Airlock Microgateway Session Agent container.
- resources: {}
- # We recommend at least the following resource specification.
- # limits:
- # cpu: 150m
- # memory: 32Mi
- # requests:
- # cpu: 10m
- # memory: 8Mi
-license:
- # -- Name of the secret containing the "microgateway-license.txt" key.
- secretName: "airlock-microgateway-license"
-# Creates dashboards in the form of ConfigMaps that can be imported
-# by Grafana using its sidecar setup.
-dashboards:
- # -- Whether to create any ConfigMaps containing Grafana dashboards to import.
+# Specifies the Airlock Microgateway CNI image.
+image:
+ # -- Image repository from which to pull the Airlock Microgateway CNI image.
+ repository: "quay.io/airlock/microgateway-cni"
+ # -- Image tag to pull.
+ tag: "4.3.4"
+ # -- SHA256 image digest to pull (in the format "sha256:7144f7bab3d4c2648d7e59409f15ec52a18006a128c733fcff20d3a4a54ba44a").
+ # Overrides tag when specified.
+ digest: "sha256:1e01310b3ad8566e9b39ee539ed5c959049aadda1a18c1a534e96d8865e20172"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+# -- Annotations to add to all Pods.
+podAnnotations: {}
+# -- Labels to add to all Pods.
+podLabels: {}
+# -- Resource restrictions to apply to the CNI installer container.
+resources:
+ requests:
+ cpu: 10m
+ memory: 100Mi
+# -- NodeSelector to apply to the CNI DaemonSet in order to only deploy the CNI plugin on specific nodes.
+nodeSelector:
+ kubernetes.io/os: linux
+# -- Custom affinity for the DaemonSet to only deploy the CNI plugin on specific nodes.
+affinity: {}
+# Configures the generation of RBAC Roles and RoleBindings.
+rbac:
+ # -- Whether to create RBAC resources which are required for the CNI plugin to function.
+ create: true
+ # -- (OpenShift) Whether to create RBAC resources which allow the CNI installer to use the "privileged" security context constraint.
+ createSCCRole: false
+# -- Whether the DaemonSet should run in privileged mode. Must be enabled for environments which require it for writing files to the host (e.g. OpenShift).
+privileged: false
+# Configures the generation of the ServiceAccount.
+serviceAccount:
+ # -- Whether a ServiceAccount should be created.
+ create: true
+ # -- Annotations to add to the ServiceAccount.
+ annotations: {}
+ # -- Name of the ServiceAccount to use.
+ # If not set and create is true, a name is generated using the fullname template.
+ name: ""
+# Configures the generation of a NetworkAttachmentDefinition for use with Multus CNI (OpenShift)
+multusNetworkAttachmentDefinition:
+ # -- Whether a NetworkAttachmentDefinition CR should be created, which can be used for applying the CNI plugin to Pods.
create: false
- config:
- # Configures the necessary label and annotations along with their values
- # to enable Grafana to correctly identify the ConfigMaps containing
- # dashboards and file them within a dedicated folder in the dashboard overview.
- # These settings need to match the Grafana sidecar configuration.
- grafana:
- folderAnnotation:
- # -- Name of the annotation containing the folder name to file dashboards into.
- name: "grafana_folder"
- # -- Name of the folder dashboards are filed into within the Grafana UI.
- value: "Airlock Microgateway"
- dashboardLabel:
- # -- Name of the label that lets Grafana identify ConfigMaps that represent dashboards.
- name: "grafana_dashboard"
- # -- Value of the label that lets Grafana identify ConfigMaps that represent dashboards.
- value: "1"
- instances:
- # Available dashboard instances that can be individually created/deployed.
- overview:
- # -- Whether to create the overview dashboard.
- create: true
- license:
- # -- Whether to create the license dashboard.
- create: true
- blockMetrics:
- # -- Whether to create the block metrics dashboard.
- create: true
- blockLogs:
- # -- Whether to create the block logs dashboard.
- create: true
-# Check whether the installation of the Airlock Microgateway Helm Chart was successful.
-# Requires a secret with a valid Airlock Microgateway license key already to be present.
+ # -- Namespace in which the NetworkAttachmentDefinition is deployed.
+ # Note: If namespace is set to a custom value, referencing the created NetworkAttachmentDefinition from other namespaces
+ # may not work if Multus namespace isolation is enabled. https://github.com/k8snetworkplumbingwg/multus-cni/blob/v4.0.2/docs/configuration.md#namespace-isolation
+ namespace: default
+# Parameters for the CNI installer configuration.
+config:
+ # -- Whether to install the CNI plugin as a `chained` plugin (default, required with most interface CNI providers),
+ # as a `standalone` plugin (required for use with Multus CNI, e.g. on OpenShift)
+ # or in `manual` mode, where no CNI network configuration is written.
+ installMode: "chained"
+ # -- Log level for the CNI installer and plugin.
+ logLevel: info
+ # -- Directory where the CNI config files reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.confDir}}'` on your Kubernetes node.
+ cniNetDir: "/etc/cni/net.d"
+ # -- Directory where the CNI plugin binaries reside on the host.
+ # This path can either be found in the documentation of your Kubernetes distribution or CNI provider.
+ # It can also be queried by running the command `crictl info -o go-template --template '{{.config.cni.binDir}}'` on your Kubernetes node.
+ cniBinDir: "/opt/cni/bin"
+ # -- Namespaces for which this CNI plugin should not apply any modifications.
+ excludeNamespaces:
+ - kube-system
tests:
# -- Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts).
# If set to false, `helm test` will not run any tests.
diff --git a/charts/airlock/microgateway/4.4.1/.helmignore b/charts/airlock/microgateway/4.4.1/.helmignore
new file mode 100644
index 000000000..101ff5ac5
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/.helmignore
@@ -0,0 +1,28 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
+# CRDs kustomization.yaml
+/crds/kustomization.yaml
+# Helm unit tests
+/tests
+/validation
diff --git a/charts/airlock/microgateway/4.4.1/Chart.yaml b/charts/airlock/microgateway/4.4.1/Chart.yaml
new file mode 100644
index 000000000..4e46fe73f
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/Chart.yaml
@@ -0,0 +1,44 @@
+annotations:
+ artifacthub.io/category: security
+ artifacthub.io/license: MIT
+ artifacthub.io/links: |
+ - name: Airlock Microgateway Documentation
+ url: https://docs.airlock.com/microgateway/4.4/
+ - name: Airlock Microgateway Labs
+ url: https://play.instruqt.com/airlock/invite/hyi9fy4b4jzc?icp_referrer=artifacthub.io
+ - name: Airlock Microgateway Forum
+ url: https://forum.airlock.com/
+ catalog.cattle.io/certified: partner
+ catalog.cattle.io/display-name: Airlock Microgateway
+ catalog.cattle.io/kube-version: '>=1.25.0-0'
+ catalog.cattle.io/release-name: ""
+ charts.openshift.io/name: Airlock Microgateway
+apiVersion: v2
+appVersion: 4.4.1
+description: A Helm chart for deploying the Airlock Microgateway
+home: https://www.airlock.com/en/microgateway
+icon: file://assets/icons/microgateway.svg
+keywords:
+- WAF
+- Web Application Firewall
+- WAAP
+- Web Application and API protection
+- OWASP
+- Airlock
+- Microgateway
+- Security
+- Filtering
+- DevSecOps
+- shift left
+- control plane
+- Operator
+kubeVersion: '>=1.25.0-0'
+maintainers:
+- email: support@airlock.com
+ name: Airlock
+ url: https://www.airlock.com/
+name: microgateway
+sources:
+- https://github.com/airlock/microgateway
+type: application
+version: 4.4.1
diff --git a/charts/airlock/microgateway/4.4.1/README.md b/charts/airlock/microgateway/4.4.1/README.md
new file mode 100644
index 000000000..1c976c66c
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/README.md
@@ -0,0 +1,186 @@
+# Airlock Microgateway
+
+![Version: 4.4.1](https://img.shields.io/badge/Version-4.4.1-informational?style=flat-square) ![AppVersion: 4.4.1](https://img.shields.io/badge/AppVersion-4.4.1-informational?style=flat-square)
+
+*Airlock Microgateway is a Kubernetes native WAAP (Web Application and API Protection) solution to protect microservices.*
+
+
+
+Modern application security is embedded in the development workflow and follows DevSecOps paradigms. Airlock Microgateway is the perfect fit for these requirements. It is a lightweight alternative to the Airlock Gateway appliance, optimized for Kubernetes environments. Airlock Microgateway protects your applications and microservices with the tried-and-tested Airlock security features against attacks, while also providing a high degree of scalability.
+__This Helm chart is part of Airlock Microgateway. See our [GitHub repo](https://github.com/airlock/microgateway/tree/4.4.1).__
+
+### Features
+* Kubernetes native integration with sidecar injection and Gateway API support
+* Reverse proxy functionality with request routing rules, TLS termination and remote IP extraction
+* Using native Envoy HTTP filters like Lua scripting, RBAC, ext_authz, JWT authentication
+* Content security filters for protecting against known attacks (OWASP Top 10)
+* Access control using OpenID Connect to allow only authenticated users to access the protected services
+* API security features like JSON parsing, OpenAPI specification enforcement or GraphQL schema validation
+
+For a list of all features, view the **[comparison of the community and premium edition](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html)**.
+
+## Documentation and links
+
+Check the official documentation at **[docs.airlock.com](https://docs.airlock.com/microgateway/latest/)** or the product website at **[airlock.com/microgateway](https://www.airlock.com/en/microgateway)**. The links below point out the most interesting documentation sites when starting with Airlock Microgateway.
+
+* [Getting Started](https://docs.airlock.com/microgateway/latest/#data/1660804708742.html)
+* [System Architecture](https://docs.airlock.com/microgateway/latest/#data/1660804709650.html)
+* [Installation](https://docs.airlock.com/microgateway/latest/#data/1660804708637.html)
+* [Troubleshooting](https://docs.airlock.com/microgateway/latest/#data/1659430054787.html)
+* [GitHub](https://github.com/airlock/microgateway)
+
+# Quick start guide
+
+The instructions below provide a quick start guide. Detailed information are provided in the **[manual](https://docs.airlock.com/microgateway/latest/)**.
+
+## Prerequisites
+* (Recommended) [Airlock Microgateway CNI](https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni) (Required for [data plane mode sidecar](https://docs.airlock.com/microgateway/latest/?topic=MGW-00000137))
+* [Airlock Microgateway License](#obtain-airlock-microgateway-license)
+* [cert-manager](https://cert-manager.io/)
+* [helm](https://helm.sh/docs/intro/install/) (>= v3.8.0)
+
+In order to use Airlock Microgateway you need a license and the cert-manager. You may either request a community license free of charge or purchase a premium license.
+For an easy start in non-production environments, you may deploy the same cert-manager we are using internally for testing.
+### Obtain Airlock Microgateway License
+1. Either request a community or premium license
+ * Community license: [airlock.com/microgateway-community](https://airlock.com/en/microgateway-community)
+ * Premium license: [airlock.com/microgateway-premium](https://airlock.com/en/microgateway-premium)
+2. Check your inbox and save the license file microgateway-license.txt locally.
+
+> See [Community vs. Premium editions in detail](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) to choose the right license type.
+### Deploy cert-manager
+```bash
+helm repo add jetstack https://charts.jetstack.io
+helm install cert-manager jetstack/cert-manager --version 'v1.16.1' -n cert-manager --create-namespace --set crds.enabled=true --wait
+```
+
+## Deploy Airlock Microgateway Operator
+
+> This guide assumes a microgateway-license.txt file is present in the working directory.
+
+1. Install CRDs and Operator.
+ ```bash
+ # Create namespace
+ kubectl create namespace airlock-microgateway-system
+
+ # Install License
+ kubectl -n airlock-microgateway-system create secret generic airlock-microgateway-license --from-file=microgateway-license.txt
+
+ # Install Operator (CRDs are included via the standard Helm 3 mechanism, i.e. Helm will handle initial installation but not upgrades)
+ helm install airlock-microgateway -n airlock-microgateway-system oci://quay.io/airlockcharts/microgateway --version '4.4.1' --wait
+ ```
+
+2. (Recommended) You can verify the correctness of the installation with `helm test`.
+ ```bash
+ helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=true --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.4.1'
+ helm test airlock-microgateway -n airlock-microgateway-system --logs
+ helm upgrade airlock-microgateway -n airlock-microgateway-system --set tests.enabled=false --reuse-values oci://quay.io/airlockcharts/microgateway --version '4.4.1'
+ ```
+
+### Upgrading CRDs
+
+The `helm install/upgrade` command currently does not support upgrading CRDs that already exist in the cluster.
+CRDs should instead be manually upgraded before upgrading the Operator itself via the following command:
+```bash
+kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=4.4.1 --server-side --force-conflicts
+```
+
+**Note**: Certain GitOps solutions such as e.g. Argo CD or Flux CD have their own mechanisms for automatically upgrading CRDs included with Helm charts.
+
+## Support
+
+### Premium support
+If you have a paid license, please follow the [premium support process](https://techzone.ergon.ch/support-process).
+
+### Community support
+For the community edition, check our **[Airlock community forum](https://forum.airlock.com/)** for FAQs or register to post your question.
+## Values
+
+| Key | Type | Default | Description |
+|-----|------|---------|-------------|
+| commonAnnotations | object | `{}` | Annotations to add to all resources. |
+| commonLabels | object | `{}` | Labels to add to all resources. |
+| crds.skipVersionCheck | bool | `false` | Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs. The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster when performing a "helm install/upgrade". |
+| dashboards.config.grafana.dashboardLabel.name | string | `"grafana_dashboard"` | Name of the label that lets Grafana identify ConfigMaps that represent dashboards. |
+| dashboards.config.grafana.dashboardLabel.value | string | `"1"` | Value of the label that lets Grafana identify ConfigMaps that represent dashboards. |
+| dashboards.config.grafana.folderAnnotation.name | string | `"grafana_folder"` | Name of the annotation containing the folder name to file dashboards into. |
+| dashboards.config.grafana.folderAnnotation.value | string | `"Airlock Microgateway"` | Name of the folder dashboards are filed into within the Grafana UI. |
+| dashboards.create | bool | `false` | Whether to create any ConfigMaps containing Grafana dashboards to import. |
+| dashboards.instances.blockLogs.create | bool | `true` | Whether to create the block logs dashboard. |
+| dashboards.instances.blockMetrics.create | bool | `true` | Whether to create the block metrics dashboard. |
+| dashboards.instances.headerLogs.create | bool | `true` | Whether to create the header rewrite logs dashboard. |
+| dashboards.instances.license.create | bool | `true` | Whether to create the license dashboard. |
+| dashboards.instances.logOnlyLogs.create | bool | `true` | Whether to create the log only logs dashboard. |
+| dashboards.instances.logOnlyMetrics.create | bool | `true` | Whether to create the log only metrics dashboard |
+| dashboards.instances.overview.create | bool | `true` | Whether to create the overview dashboard. |
+| engine.image.digest | string | `"sha256:06573ef5e6769dbd6eb8606e34c56f1ad2084b6adcae9925b1d2d153a45cbc47"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
+| engine.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| engine.image.repository | string | `"quay.io/airlock/microgateway-engine"` | Image repository from which to pull the Airlock Microgateway Engine image. |
+| engine.image.tag | string | `"4.4.1"` | Image tag to pull. |
+| engine.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Engine container. |
+| engine.sidecar.podMonitor.create | bool | `false` | Whether to create a PodMonitor resource for monitoring. |
+| engine.sidecar.podMonitor.labels | object | `{}` | Labels to add to the PodMonitor. |
+| fullnameOverride | string | `""` | Allows overriding the name to use as full name of resources. |
+| imagePullSecrets | list | `[]` | ImagePullSecrets to use when pulling images. |
+| license.secretName | string | `"airlock-microgateway-license"` | Name of the secret containing the "microgateway-license.txt" key. |
+| nameOverride | string | `""` | Allows overriding the name to use instead of "microgateway". |
+| networkValidator.image.digest | string | `"sha256:7ef657ce316ce9d86f90c1dc99702d1190877c6ac2e923e696dc82c30050a14c"` | SHA256 image digest to pull (in the format "sha256:7ef657ce316ce9d86f90c1dc99702d1190877c6ac2e923e696dc82c30050a14c"). Overrides tag when specified. |
+| networkValidator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| networkValidator.image.repository | string | `"cgr.dev/chainguard/netcat"` | Image repository from which to pull the netcat image for the Airlock Microgateway Network Validator init-container. |
+| networkValidator.image.tag | string | `""` | Image tag to pull. |
+| networkValidator.resources | object | `{"limits":{"cpu":"25m","memory":"12Mi"},"requests":{"cpu":"5m","memory":"1Mi"}}` | Resource restrictions to apply to the Airlock Microgateway Network Validator init-container. |
+| operator.affinity | object | `{}` | Custom affinity to apply to the operator Deployment. Used to influence the scheduling. |
+| operator.config.logLevel | string | `"info"` | Operator application log level. |
+| operator.gatewayAPI.controllerName | string | `"microgateway.airlock.com/gatewayclass-controller"` | Controller name referred in the GatewayClasses managed by this operator. The value must be a path prefixed by the domain `microgateway.airlock.com`. |
+| operator.gatewayAPI.enabled | bool | `false` | Whether to enable the Kubernetes Gateway API related controllers. Requires that the gateway.networking.k8s.io/v1 resources are installed on the cluster. |
+| operator.image.digest | string | `"sha256:1133c3e59418eec1721683e68dd19faca577609ace6eebd010a56e52b1f75789"` | SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63"). Overrides tag when specified. |
+| operator.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| operator.image.repository | string | `"quay.io/airlock/microgateway-operator"` | Image repository from which to pull the Airlock Microgateway Operator image. |
+| operator.image.tag | string | `"4.4.1"` | Image tag to pull. |
+| operator.nodeSelector | object | `{}` | Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes. |
+| operator.podAnnotations | object | `{}` | Annotations to add to all Pods. |
+| operator.podLabels | object | `{}` | Labels to add to all Pods. |
+| operator.rbac.create | bool | `true` | Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function. |
+| operator.replicaCount | int | `2` | Number of replicas for the operator Deployment. |
+| operator.resources | object | `{}` | Resource restrictions to apply to the operator container. |
+| operator.serviceAccount.annotations | object | `{}` | Annotations to add to the ServiceAccount. |
+| operator.serviceAccount.create | bool | `true` | Whether a ServiceAccount should be created. |
+| operator.serviceAccount.name | string | `""` | Name of the ServiceAccount to use. If not set and create is true, a name is generated using the fullname template. |
+| operator.serviceAnnotations | object | `{}` | Annotations to add to the Service. |
+| operator.serviceLabels | object | `{}` | Labels to add to the Service. |
+| operator.serviceMonitor.create | bool | `false` | Whether to create a ServiceMonitor resource for monitoring. |
+| operator.serviceMonitor.labels | object | `{}` | Labels to add to the ServiceMonitor. |
+| operator.tolerations | list | `[]` | Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes. |
+| operator.updateStrategy | object | `{"type":"RollingUpdate"}` | Specifies the operator update strategy. |
+| operator.watchNamespaceSelector | object | `{}` | Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector. It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator. This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings). An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty. Please note that this feature requires a Premium license. |
+| operator.watchNamespaces | list | `[]` | Allows to restrict the operator to specific namespaces, depending on your needs. For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`). In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace. For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`. An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty. Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces. Please note that this feature requires a Premium license. |
+| sessionAgent.image.digest | string | `"sha256:733a25f61ea7cf43c0a46da7d3ecb9a263bda49bf60e1fd8e4162be33aa24b7b"` | SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3"). Overrides tag when specified. |
+| sessionAgent.image.pullPolicy | string | `"IfNotPresent"` | Pull policy for this image. |
+| sessionAgent.image.repository | string | `"quay.io/airlock/microgateway-session-agent"` | Image repository from which to pull the Airlock Microgateway Session Agent image. |
+| sessionAgent.image.tag | string | `"4.4.1"` | Image tag to pull. |
+| sessionAgent.resources | object | `{}` | Resource restrictions to apply to the Airlock Microgateway Session Agent container. |
+| tests.enabled | bool | `false` | Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts). If set to false, `helm test` will not run any tests. |
+
+## License
+View the [detailed license terms](https://www.airlock.com/en/airlock-license) for the software contained in this image.
+* Decompiling or reverse engineering is not permitted.
+* Using any of the deny rules or parts of these filter patterns outside of the image is not permitted.
+
+Airlock® is a security innovation by [ergon](https://www.ergon.ch/en)
+
+
+
+
+
diff --git a/charts/airlock/microgateway/4.2.3/app-readme.md b/charts/airlock/microgateway/4.4.1/app-readme.md
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/app-readme.md
rename to charts/airlock/microgateway/4.4.1/app-readme.md
diff --git a/charts/airlock/microgateway/4.4.1/crds/accesscontrols.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/accesscontrols.microgateway.airlock.com.yaml
new file mode 100644
index 000000000..c10c65c1f
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/crds/accesscontrols.microgateway.airlock.com.yaml
@@ -0,0 +1,501 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.4
+ labels:
+ app.kubernetes.io/name: airlock-microgateway-operator
+ app.kubernetes.io/version: 4.4.1
+ name: accesscontrols.microgateway.airlock.com
+spec:
+ group: microgateway.airlock.com
+ names:
+ categories:
+ - airlock-microgateway
+ kind: AccessControl
+ listKind: AccessControlList
+ plural: accesscontrols
+ singular: accesscontrol
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: AccessControl specifies the options to perform access control with a Microgateway Engine container.
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Specifies how the Airlock Microgateway Engine performs access control.
+ properties:
+ policies:
+ description: Policies configures access control policies. The first matching policy (from top to bottom) applies.
+ items:
+ properties:
+ authorization:
+ description: Authorization configures how requests are authorized. An empty object value {} disables authorization.
+ properties:
+ authentication:
+ description: Authentication specifies that clients need to be authenticated with the provided method.
+ properties:
+ oidc:
+ description: OIDC configures client authentication using OpenID Connect.
+ properties:
+ oidcRelyingPartyRef:
+ description: OIDCRelyingPartyRef configures how the Airlock Microgateway Engine interacts with the OpenID provider.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ required:
+ - oidcRelyingPartyRef
+ type: object
+ type: object
+ deny:
+ description: Deny specifies to deny access for all requests matching this policy.
+ type: object
+ requireAll:
+ description: RequireAll specifies conditions which must all be satisfied for the request to be authorized.
+ items:
+ properties:
+ oidc:
+ description: OIDC specifies a condition on the result of an OpenID Connect flow.
+ properties:
+ claim:
+ description: Claim specifies a condition on a JWT claim.
+ properties:
+ name:
+ description: Name of the claim.
+ minLength: 1
+ type: string
+ value:
+ description: |-
+ Value of the claim. If not specified, only existence of the claim is checked (any value is allowed).
+
+ Value matching is only supported if the data type of the claim is either primitive (`number`, `boolean`, `string`) or `array` of primitives.
+ In case of a non-string value, the match will be performed against the stringified value.
+
+ If the claim has an unsupported data type (e.g. `object` or `null`), its value will never match.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ required:
+ - name
+ type: object
+ required:
+ - claim
+ type: object
+ required:
+ - oidc
+ type: object
+ minItems: 1
+ type: array
+ requireAny:
+ description: RequireAny specifies conditions of which at least one must be satisfied for the request to be authorized.
+ items:
+ properties:
+ oidc:
+ description: OIDC specifies a condition on the result of an OpenID Connect flow.
+ properties:
+ claim:
+ description: Claim specifies a condition on a JWT claim.
+ properties:
+ name:
+ description: Name of the claim.
+ minLength: 1
+ type: string
+ value:
+ description: |-
+ Value of the claim. If not specified, only existence of the claim is checked (any value is allowed).
+
+ Value matching is only supported if the data type of the claim is either primitive (`number`, `boolean`, `string`) or `array` of primitives.
+ In case of a non-string value, the match will be performed against the stringified value.
+
+ If the claim has an unsupported data type (e.g. `object` or `null`), its value will never match.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ required:
+ - name
+ type: object
+ required:
+ - claim
+ type: object
+ required:
+ - oidc
+ type: object
+ minItems: 1
+ type: array
+ type: object
+ identityPropagation:
+ description: IdentityPropagation configures how the authenticated user's identity is communicated to the protected application.
+ properties:
+ actions:
+ description: Actions specifies the propagation actions.
+ items:
+ properties:
+ identityPropagationRef:
+ description: IdentityPropagationRef selects an IdentityPropagation to apply.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ required:
+ - identityPropagationRef
+ type: object
+ type: array
+ onFailure:
+ description: |-
+ OnFailure configures what should happen, if an identity propagation fails. Meaning of the possible values:
+ _Pass_: The request should be forwarded to the upstream, without including the information from the failed identity propagations.
+ enum:
+ - Pass
+ type: string
+ required:
+ - actions
+ - onFailure
+ type: object
+ requestConditions:
+ description: |-
+ RequestConditions defines additional request properties which must be matched in order for this policy to apply. A policy without request conditions will always match.
+
+ WARNING: There is currently a limitation that if `authentication.oidc` is configured for this policy, you must ensure that the request condition also matches logout requests and callback redirects from the OIDC Provider as configured in the OIDCRelyingParty (`pathMapping.logoutPath` / `pathMapping.redirectPath`).
+ properties:
+ header:
+ description: Header defines the matching headers of a request.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ invert:
+ default: false
+ description: Invert indicates whether the request condition should be inverted.
+ type: boolean
+ mediaType:
+ description: MediaType defines the matching media type from the content-type header of a request.
+ properties:
+ matcher:
+ description: |-
+ NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
+ In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ method:
+ description: Method defines the matching methods of a request.
+ items:
+ description: Method defines common HTTP methods.
+ enum:
+ - GET
+ - HEAD
+ - POST
+ - PUT
+ - PATCH
+ - DELETE
+ - CONNECT
+ - OPTIONS
+ - TRACE
+ type: string
+ type: array
+ path:
+ description: Path defines the matching path of a request.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ remoteIP:
+ description: RemoteIP defines the matching remote IPs of a request.
+ properties:
+ cidrRanges:
+ description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
+ items:
+ description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
+ format: cidr
+ type: string
+ minItems: 1
+ type: array
+ invert:
+ default: false
+ description: Invert indicates whether the match should be inverted.
+ type: boolean
+ required:
+ - cidrRanges
+ type: object
+ type: object
+ required:
+ - authorization
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - policies
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources: {}
diff --git a/charts/airlock/microgateway/4.3.0/crds/contentsecurities.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/contentsecurities.microgateway.airlock.com.yaml
similarity index 98%
rename from charts/airlock/microgateway/4.3.0/crds/contentsecurities.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/contentsecurities.microgateway.airlock.com.yaml
index 05214f023..cbe6fb3a1 100644
--- a/charts/airlock/microgateway/4.3.0/crds/contentsecurities.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/contentsecurities.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: contentsecurities.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.4.1/crds/contentsecuritypolicies.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/contentsecuritypolicies.microgateway.airlock.com.yaml
new file mode 100644
index 000000000..3fd1d7545
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/crds/contentsecuritypolicies.microgateway.airlock.com.yaml
@@ -0,0 +1,476 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.4
+ labels:
+ app.kubernetes.io/name: airlock-microgateway-operator
+ app.kubernetes.io/version: 4.4.1
+ gateway.networking.k8s.io/policy: direct
+ name: contentsecuritypolicies.microgateway.airlock.com
+spec:
+ group: microgateway.airlock.com
+ names:
+ categories:
+ - airlock-microgateway
+ kind: ContentSecurityPolicy
+ listKind: ContentSecurityPolicyList
+ plural: contentsecuritypolicies
+ singular: contentsecuritypolicy
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: ContentSecurityPolicy is a Direct Attached Policy for the Kubernetes Gateway API. It specifies the options to secure an upstream web application with a Microgateway.
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Spec defines the desired state of ContentSecurityPolicy.
+ properties:
+ secured:
+ description: Secured enables WAF processing for the routes attached to this policy.
+ properties:
+ apiProtection:
+ description: |-
+ APIProtection defines the relevant configurations to protect APIs.
+ If undefined, default settings are applied, designed to work with most upstream web application services.
+ properties:
+ graphQLRef:
+ description: |-
+ GraphQLRef selects the relevant GraphQL configuration resource.
+ If undefined, default settings are applied, designed to work with most upstream web application services.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ openAPIRef:
+ description: |-
+ OpenAPIRef selects the relevant OpenAPI configuration resource.
+ If undefined, default settings are applied, designed to work with most upstream web application services.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ filter:
+ description: |-
+ Filter defines the set of filters, e.g. Airlock Deny Rules, to be applied to incoming requests
+ to protect against various attack patterns.
+ If undefined, default settings are applied, designed to work with most upstream web application services.
+ properties:
+ denyRulesRef:
+ description: |-
+ DenyRulesRef selects the relevant DenyRules configuration resource.
+ If undefined, default settings are applied, designed to work with most upstream web application services.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ limitsRef:
+ description: |-
+ LimitsRef selects the relevant Limits configuration resource.
+ If undefined, default settings are applied, designed to work with most upstream web application services.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ parserRef:
+ description: |-
+ ParserRef selects the relevant Parser configuration resource.
+ If undefined, default settings are applied, designed to work with most upstream web application services.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ targetRefs:
+ description: |-
+ TargetRefs are the resources this policy is being attached to. Referenced resources must be in the same namespace as the policy.
+ Support: HTTPRoute.
+ items:
+ description: |-
+ LocalPolicyTargetReference identifies an API object to apply a direct or
+ inherited policy to. This should be used as part of Policy resources
+ that can target Gateway API resources. For more information on how this
+ policy attachment model works, and a sample Policy resource, refer to
+ the policy attachment documentation for Gateway API.
+ properties:
+ group:
+ description: Group is the group of the target resource.
+ maxLength: 253
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+ type: string
+ kind:
+ description: Kind is kind of the target resource.
+ maxLength: 63
+ minLength: 1
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
+ type: string
+ name:
+ description: Name is the name of the target resource.
+ maxLength: 253
+ minLength: 1
+ type: string
+ required:
+ - group
+ - kind
+ - name
+ type: object
+ maxItems: 16
+ minItems: 1
+ type: array
+ x-kubernetes-validations:
+ - message: 'TargetRef Kind must be: HTTPRoute'
+ rule: self.all(t, t.kind=='HTTPRoute')
+ - message: TargetRef Group must be gateway.networking.k8s.io.
+ rule: self.all(t, t.group=='gateway.networking.k8s.io')
+ unsecured:
+ description: |-
+ Unsecured disables all WAF functionality and therefore protection for the routes attached to this policy.
+ WARNING: Using this setting when the application is exposed to untrusted downstream traffic is highly discouraged.
+ type: object
+ required:
+ - targetRefs
+ type: object
+ status:
+ description: Status defines the state of the ContentSecurityPolicy.
+ properties:
+ ancestors:
+ description: |-
+ Ancestors is a list of ancestor resources (usually Gateways) that are
+ associated with the policy, and the status of the policy with respect to
+ each ancestor. When this policy attaches to a parent, the controller that
+ manages the parent and the ancestors MUST add an entry to this list when
+ the controller first sees the policy and SHOULD update the entry as
+ appropriate when the relevant ancestor is modified.
+
+ Note that choosing the relevant ancestor is left to the Policy designers;
+ an important part of Policy design is designing the right object level at
+ which to namespace this status.
+
+ Note also that implementations MUST ONLY populate ancestor status for
+ the Ancestor resources they are responsible for. Implementations MUST
+ use the ControllerName field to uniquely identify the entries in this list
+ that they are responsible for.
+
+ Note that to achieve this, the list of PolicyAncestorStatus structs
+ MUST be treated as a map with a composite key, made up of the AncestorRef
+ and ControllerName fields combined.
+
+ A maximum of 16 ancestors will be represented in this list. An empty list
+ means the Policy is not relevant for any ancestors.
+
+ If this slice is full, implementations MUST NOT add further entries.
+ Instead they MUST consider the policy unimplementable and signal that
+ on any related resources such as the ancestor that would be referenced
+ here. For example, if this list was full on BackendTLSPolicy, no
+ additional Gateways would be able to reference the Service targeted by
+ the BackendTLSPolicy.
+ items:
+ description: |-
+ PolicyAncestorStatus describes the status of a route with respect to an
+ associated Ancestor.
+
+ Ancestors refer to objects that are either the Target of a policy or above it
+ in terms of object hierarchy. For example, if a policy targets a Service, the
+ Policy's Ancestors are, in order, the Service, the HTTPRoute, the Gateway, and
+ the GatewayClass. Almost always, in this hierarchy, the Gateway will be the most
+ useful object to place Policy status on, so we recommend that implementations
+ SHOULD use Gateway as the PolicyAncestorStatus object unless the designers
+ have a _very_ good reason otherwise.
+
+ In the context of policy attachment, the Ancestor is used to distinguish which
+ resource results in a distinct application of this policy. For example, if a policy
+ targets a Service, it may have a distinct result per attached Gateway.
+
+ Policies targeting the same resource may have different effects depending on the
+ ancestors of those resources. For example, different Gateways targeting the same
+ Service may have different capabilities, especially if they have different underlying
+ implementations.
+
+ For example, in BackendTLSPolicy, the Policy attaches to a Service that is
+ used as a backend in a HTTPRoute that is itself attached to a Gateway.
+ In this case, the relevant object for status is the Gateway, and that is the
+ ancestor object referred to in this status.
+
+ Note that a parent is also an ancestor, so for objects where the parent is the
+ relevant object for status, this struct SHOULD still be used.
+
+ This struct is intended to be used in a slice that's effectively a map,
+ with a composite key made up of the AncestorRef and the ControllerName.
+ properties:
+ ancestorRef:
+ description: |-
+ AncestorRef corresponds with a ParentRef in the spec that this
+ PolicyAncestorStatus struct describes the status of.
+ properties:
+ group:
+ default: gateway.networking.k8s.io
+ description: |-
+ Group is the group of the referent.
+ When unspecified, "gateway.networking.k8s.io" is inferred.
+ To set the core API group (such as for a "Service" kind referent),
+ Group must be explicitly set to "" (empty string).
+
+ Support: Core
+ maxLength: 253
+ pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+ type: string
+ kind:
+ default: Gateway
+ description: |-
+ Kind is kind of the referent.
+
+ There are two kinds of parent resources with "Core" support:
+
+ * Gateway (Gateway conformance profile)
+ * Service (Mesh conformance profile, ClusterIP Services only)
+
+ Support for other resources is Implementation-Specific.
+ maxLength: 63
+ minLength: 1
+ pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$
+ type: string
+ name:
+ description: |-
+ Name is the name of the referent.
+
+ Support: Core
+ maxLength: 253
+ minLength: 1
+ type: string
+ namespace:
+ description: |-
+ Namespace is the namespace of the referent. When unspecified, this refers
+ to the local namespace of the Route.
+
+ Note that there are specific rules for ParentRefs which cross namespace
+ boundaries. Cross-namespace references are only valid if they are explicitly
+ allowed by something in the namespace they are referring to. For example:
+ Gateway has the AllowedRoutes field, and ReferenceGrant provides a
+ generic way to enable any other kind of cross-namespace reference.
+
+
+ ParentRefs from a Route to a Service in the same namespace are "producer"
+ routes, which apply default routing rules to inbound connections from
+ any namespace to the Service.
+
+ ParentRefs from a Route to a Service in a different namespace are
+ "consumer" routes, and these routing rules are only applied to outbound
+ connections originating from the same namespace as the Route, for which
+ the intended destination of the connections are a Service targeted as a
+ ParentRef of the Route.
+
+
+ Support: Core
+ maxLength: 63
+ minLength: 1
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$
+ type: string
+ port:
+ description: |-
+ Port is the network port this Route targets. It can be interpreted
+ differently based on the type of parent resource.
+
+ When the parent resource is a Gateway, this targets all listeners
+ listening on the specified port that also support this kind of Route(and
+ select this Route). It's not recommended to set `Port` unless the
+ networking behaviors specified in a Route must apply to a specific port
+ as opposed to a listener(s) whose port(s) may be changed. When both Port
+ and SectionName are specified, the name and port of the selected listener
+ must match both specified values.
+
+
+ When the parent resource is a Service, this targets a specific port in the
+ Service spec. When both Port (experimental) and SectionName are specified,
+ the name and port of the selected port must match both specified values.
+
+
+ Implementations MAY choose to support other parent resources.
+ Implementations supporting other types of parent resources MUST clearly
+ document how/if Port is interpreted.
+
+ For the purpose of status, an attachment is considered successful as
+ long as the parent resource accepts it partially. For example, Gateway
+ listeners can restrict which Routes can attach to them by Route kind,
+ namespace, or hostname. If 1 of 2 Gateway listeners accept attachment
+ from the referencing Route, the Route MUST be considered successfully
+ attached. If no Gateway listeners accept attachment from this Route,
+ the Route MUST be considered detached from the Gateway.
+
+ Support: Extended
+ format: int32
+ maximum: 65535
+ minimum: 1
+ type: integer
+ sectionName:
+ description: |-
+ SectionName is the name of a section within the target resource. In the
+ following resources, SectionName is interpreted as the following:
+
+ * Gateway: Listener name. When both Port (experimental) and SectionName
+ are specified, the name and port of the selected listener must match
+ both specified values.
+ * Service: Port name. When both Port (experimental) and SectionName
+ are specified, the name and port of the selected listener must match
+ both specified values.
+
+ Implementations MAY choose to support attaching Routes to other resources.
+ If that is the case, they MUST clearly document how SectionName is
+ interpreted.
+
+ When unspecified (empty string), this will reference the entire resource.
+ For the purpose of status, an attachment is considered successful if at
+ least one section in the parent resource accepts it. For example, Gateway
+ listeners can restrict which Routes can attach to them by Route kind,
+ namespace, or hostname. If 1 of 2 Gateway listeners accept attachment from
+ the referencing Route, the Route MUST be considered successfully
+ attached. If no Gateway listeners accept attachment from this Route, the
+ Route MUST be considered detached from the Gateway.
+
+ Support: Core
+ maxLength: 253
+ minLength: 1
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+ type: string
+ required:
+ - name
+ type: object
+ conditions:
+ description: Conditions describes the status of the Policy with respect to the given Ancestor.
+ items:
+ description: Condition contains details for one aspect of the current state of this API Resource.
+ properties:
+ lastTransitionTime:
+ description: |-
+ lastTransitionTime is the last time the condition transitioned from one status to another.
+ This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
+ format: date-time
+ type: string
+ message:
+ description: |-
+ message is a human readable message indicating details about the transition.
+ This may be an empty string.
+ maxLength: 32768
+ type: string
+ observedGeneration:
+ description: |-
+ observedGeneration represents the .metadata.generation that the condition was set based upon.
+ For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
+ with respect to the current state of the instance.
+ format: int64
+ minimum: 0
+ type: integer
+ reason:
+ description: |-
+ reason contains a programmatic identifier indicating the reason for the condition's last transition.
+ Producers of specific condition types may define expected values and meanings for this field,
+ and whether the values are considered a guaranteed API.
+ The value should be a CamelCase string.
+ This field may not be empty.
+ maxLength: 1024
+ minLength: 1
+ pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
+ type: string
+ status:
+ description: status of the condition, one of True, False, Unknown.
+ enum:
+ - "True"
+ - "False"
+ - Unknown
+ type: string
+ type:
+ description: type of condition in CamelCase or in foo.example.com/CamelCase.
+ maxLength: 316
+ pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
+ type: string
+ required:
+ - lastTransitionTime
+ - message
+ - reason
+ - status
+ - type
+ type: object
+ maxItems: 8
+ minItems: 1
+ type: array
+ x-kubernetes-list-map-keys:
+ - type
+ x-kubernetes-list-type: map
+ controllerName:
+ description: |-
+ ControllerName is a domain/path string that indicates the name of the
+ controller that wrote this status. This corresponds with the
+ controllerName field on GatewayClass.
+
+ Example: "example.net/gateway-controller".
+
+ The format of this field is DOMAIN "/" PATH, where DOMAIN and PATH are
+ valid Kubernetes names
+ (https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
+
+ Controllers MUST populate this field when writing status. Controllers should ensure that
+ entries to status populated with their ControllerName are cleaned up when they are no
+ longer necessary.
+ maxLength: 253
+ minLength: 1
+ pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[A-Za-z0-9\/\-._~%!$&'()*+,;=:]+$
+ type: string
+ required:
+ - ancestorRef
+ - controllerName
+ type: object
+ maxItems: 16
+ type: array
+ required:
+ - ancestors
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
diff --git a/charts/airlock/microgateway/4.3.0/crds/denyrules.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/denyrules.microgateway.airlock.com.yaml
similarity index 99%
rename from charts/airlock/microgateway/4.3.0/crds/denyrules.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/denyrules.microgateway.airlock.com.yaml
index 906353c0a..234190a28 100644
--- a/charts/airlock/microgateway/4.3.0/crds/denyrules.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/denyrules.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: denyrules.microgateway.airlock.com
spec:
group: microgateway.airlock.com
@@ -864,7 +864,9 @@ spec:
TEMPLATE |
UNIXCMD |
WINCMD |
- XSS
+ XSS |
+ SSRF |
+ BOT
enum:
- ENCODING
- EXPLOIT
@@ -883,6 +885,8 @@ spec:
- UNIXCMD
- WINCMD
- XSS
+ - SSRF
+ - BOT
type: string
minItems: 1
type: array
@@ -917,7 +921,9 @@ spec:
TEMPLATE |
UNIXCMD |
WINCMD |
- XSS
+ XSS |
+ SSRF |
+ BOT
enum:
- ENCODING
- EXPLOIT
@@ -936,6 +942,8 @@ spec:
- UNIXCMD
- WINCMD
- XSS
+ - SSRF
+ - BOT
type: string
minItems: 1
type: array
diff --git a/charts/airlock/microgateway/4.3.1/crds/envoyclusters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/envoyclusters.microgateway.airlock.com.yaml
similarity index 96%
rename from charts/airlock/microgateway/4.3.1/crds/envoyclusters.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/envoyclusters.microgateway.airlock.com.yaml
index 8d2c6ef97..4127d53eb 100644
--- a/charts/airlock/microgateway/4.3.1/crds/envoyclusters.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/envoyclusters.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
+ app.kubernetes.io/version: 4.4.1
name: envoyclusters.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.3.1/crds/envoyconfigurations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/envoyconfigurations.microgateway.airlock.com.yaml
similarity index 98%
rename from charts/airlock/microgateway/4.3.1/crds/envoyconfigurations.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/envoyconfigurations.microgateway.airlock.com.yaml
index 38f381b72..a71ef4cc2 100644
--- a/charts/airlock/microgateway/4.3.1/crds/envoyconfigurations.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/envoyconfigurations.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
+ app.kubernetes.io/version: 4.4.1
name: envoyconfigurations.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.2.3/crds/envoyhttpfilters.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/envoyhttpfilters.microgateway.airlock.com.yaml
similarity index 96%
rename from charts/airlock/microgateway/4.2.3/crds/envoyhttpfilters.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/envoyhttpfilters.microgateway.airlock.com.yaml
index f81221802..358e1973d 100644
--- a/charts/airlock/microgateway/4.2.3/crds/envoyhttpfilters.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/envoyhttpfilters.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.14.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.2.3
+ app.kubernetes.io/version: 4.4.1
name: envoyhttpfilters.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.3.3/crds/graphqls.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/graphqls.microgateway.airlock.com.yaml
similarity index 97%
rename from charts/airlock/microgateway/4.3.3/crds/graphqls.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/graphqls.microgateway.airlock.com.yaml
index 1d9cb3b94..39046d24c 100644
--- a/charts/airlock/microgateway/4.3.3/crds/graphqls.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/graphqls.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
+ app.kubernetes.io/version: 4.4.1
name: graphqls.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.4.1/crds/headerrewrites.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/headerrewrites.microgateway.airlock.com.yaml
new file mode 100644
index 000000000..d99797f1e
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/crds/headerrewrites.microgateway.airlock.com.yaml
@@ -0,0 +1,2083 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.4
+ labels:
+ app.kubernetes.io/name: airlock-microgateway-operator
+ app.kubernetes.io/version: 4.4.1
+ name: headerrewrites.microgateway.airlock.com
+spec:
+ group: microgateway.airlock.com
+ names:
+ categories:
+ - airlock-microgateway
+ kind: HeaderRewrites
+ listKind: HeaderRewritesList
+ plural: headerrewrites
+ singular: headerrewrites
+ scope: Namespaced
+ versions:
+ - name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: HeaderRewrites is the Schema for the headerrewrites API
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Specification of the desired header rewriting behavior.
+ properties:
+ request:
+ description: Request defines manipulations on upstream request headers.
+ properties:
+ add:
+ description: Add defines which request headers will be added before forwarding to the upstream.
+ properties:
+ custom:
+ description: |-
+ Custom allows configuring additional upstream request headers.
+ Add selected headers.
+ items:
+ properties:
+ headers:
+ description: Headers to add.
+ items:
+ description: HeaderRewritesHeader specifies a header with a particular value
+ properties:
+ name:
+ description: Name defines the name of a header.
+ minLength: 1
+ type: string
+ value:
+ description: Value defines the value of a header.
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ minItems: 1
+ type: array
+ mode:
+ default: AddIfAbsent
+ description: Mode defines the header addition strategy.
+ enum:
+ - AddIfAbsent
+ - OverwriteOrAdd
+ type: string
+ name:
+ description: Name describing the configured operation.
+ minLength: 1
+ type: string
+ requestConditions:
+ description: RequestConditions defines additional request properties which must be matched in order for this operation to be applied.
+ properties:
+ header:
+ description: Header defines the matching headers of a request.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ invert:
+ default: false
+ description: Invert indicates whether the request condition should be inverted.
+ type: boolean
+ mediaType:
+ description: MediaType defines the matching media type from the content-type header of a request.
+ properties:
+ matcher:
+ description: |-
+ NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
+ In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ method:
+ description: Method defines the matching methods of a request.
+ items:
+ description: Method defines common HTTP methods.
+ enum:
+ - GET
+ - HEAD
+ - POST
+ - PUT
+ - PATCH
+ - DELETE
+ - CONNECT
+ - OPTIONS
+ - TRACE
+ type: string
+ type: array
+ path:
+ description: Path defines the matching path of a request.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ remoteIP:
+ description: RemoteIP defines the matching remote IPs of a request.
+ properties:
+ cidrRanges:
+ description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
+ items:
+ description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
+ format: cidr
+ type: string
+ minItems: 1
+ type: array
+ invert:
+ default: false
+ description: Invert indicates whether the match should be inverted.
+ type: boolean
+ required:
+ - cidrRanges
+ type: object
+ type: object
+ required:
+ - headers
+ - name
+ type: object
+ minItems: 1
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ allow:
+ description: |-
+ Allow defines which request headers will be forwarded to the upstream.
+ This can either be allHeaders or matchingHeaders.
+ Default: matchingHeaders: {...}
+ properties:
+ allHeaders:
+ description: AllHeaders specifies that all request headers should be forwarded.
+ type: object
+ matchingHeaders:
+ description: MatchingHeaders specifies which request headers should be forwarded.
+ properties:
+ builtIn:
+ description: BuiltIn allows configuring a set of predefined upstream request headers.
+ properties:
+ standardHeaders:
+ default: true
+ description: StandardHeaders defines whether the request headers which are forwarded to the upstream will be restricted to a set of common request headers.
+ type: boolean
+ tracingHeaders:
+ default: false
+ description: TracingHeaders defines whether to allow common tracing headers to be forwarded to the upstream.
+ type: boolean
+ type: object
+ custom:
+ description: Custom allows configuring additional upstream request headers.
+ items:
+ properties:
+ headers:
+ description: Headers to allow.
+ items:
+ description: |-
+ HeaderMatcher defines a matcher for an HTTP header.
+ At least one of name and value must be set.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ minItems: 1
+ type: array
+ name:
+ description: Name describing the configured operation. Must be unique.
+ minLength: 1
+ type: string
+ requestConditions:
+ description: RequestConditions defines additional request properties which must be matched in order for this operation to be applied.
+ properties:
+ header:
+ description: Header defines the matching headers of a request.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ invert:
+ default: false
+ description: Invert indicates whether the request condition should be inverted.
+ type: boolean
+ mediaType:
+ description: MediaType defines the matching media type from the content-type header of a request.
+ properties:
+ matcher:
+ description: |-
+ NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
+ In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ method:
+ description: Method defines the matching methods of a request.
+ items:
+ description: Method defines common HTTP methods.
+ enum:
+ - GET
+ - HEAD
+ - POST
+ - PUT
+ - PATCH
+ - DELETE
+ - CONNECT
+ - OPTIONS
+ - TRACE
+ type: string
+ type: array
+ path:
+ description: Path defines the matching path of a request.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ remoteIP:
+ description: RemoteIP defines the matching remote IPs of a request.
+ properties:
+ cidrRanges:
+ description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
+ items:
+ description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
+ format: cidr
+ type: string
+ minItems: 1
+ type: array
+ invert:
+ default: false
+ description: Invert indicates whether the match should be inverted.
+ type: boolean
+ required:
+ - cidrRanges
+ type: object
+ type: object
+ required:
+ - headers
+ - name
+ type: object
+ minItems: 1
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ remove:
+ description: Remove defines which request headers will be removed before forwarding to the upstream.
+ properties:
+ builtIn:
+ description: BuiltIn allows configuring a set of predefined upstream request headers.
+ properties:
+ alternativeForwardedHeaders:
+ default: true
+ description: |-
+ AlternativeForwardedHeaders removes downstream request headers which could potentially
+ be abused to alter the upstream's view of the remote connection.
+ type: boolean
+ type: object
+ custom:
+ description: Custom allows configuring additional upstream request headers.
+ items:
+ properties:
+ headers:
+ description: Headers to remove.
+ items:
+ description: |-
+ HeaderMatcher defines a matcher for an HTTP header.
+ At least one of name and value must be set.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ minItems: 1
+ type: array
+ name:
+ description: Name describing the configured operation. Must be unique.
+ minLength: 1
+ type: string
+ requestConditions:
+ description: RequestConditions defines additional request properties which must be matched in order for this operation to be applied.
+ properties:
+ header:
+ description: Header defines the matching headers of a request.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ invert:
+ default: false
+ description: Invert indicates whether the request condition should be inverted.
+ type: boolean
+ mediaType:
+ description: MediaType defines the matching media type from the content-type header of a request.
+ properties:
+ matcher:
+ description: |-
+ NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
+ In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ method:
+ description: Method defines the matching methods of a request.
+ items:
+ description: Method defines common HTTP methods.
+ enum:
+ - GET
+ - HEAD
+ - POST
+ - PUT
+ - PATCH
+ - DELETE
+ - CONNECT
+ - OPTIONS
+ - TRACE
+ type: string
+ type: array
+ path:
+ description: Path defines the matching path of a request.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ remoteIP:
+ description: RemoteIP defines the matching remote IPs of a request.
+ properties:
+ cidrRanges:
+ description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
+ items:
+ description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
+ format: cidr
+ type: string
+ minItems: 1
+ type: array
+ invert:
+ default: false
+ description: Invert indicates whether the match should be inverted.
+ type: boolean
+ required:
+ - cidrRanges
+ type: object
+ type: object
+ required:
+ - headers
+ - name
+ type: object
+ minItems: 1
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ response:
+ description: Response defines manipulations on upstream response headers.
+ properties:
+ add:
+ description: Add defines which response headers will be added before forwarding to the downstream.
+ properties:
+ builtIn:
+ description: BuiltIn allows configuring a set of predefined upstream response headers.
+ properties:
+ csp:
+ default: true
+ description: |-
+ CSP sets a content security policy which allows only same-origin requests except for images
+ if the 'Content-Security-Policy' header is not set by the upstream.
+ type: boolean
+ featurePolicy:
+ default: false
+ description: |-
+ FeaturePolicy sets a feature policy which prevents cross-origin use of several browser features
+ if the 'Feature-Policy' header is not set by the upstream.
+ **Deprecated:** Use permissionsPolicy instead.
+ type: boolean
+ hsts:
+ default: true
+ description: HSTS enforces the use of HTTPS if the 'Strict-Transport-Security' header is not already set by the upstream.
+ type: boolean
+ hstsPreload:
+ default: false
+ description: HSTSPreload enforces the use of HTTPS including for subdomains and enables HSTS preload.
+ type: boolean
+ permissionsPolicy:
+ default: true
+ description: |-
+ PermissionsPolicy sets a permissions policy which prevents cross-origin use of several browser features
+ if the 'Permissions-Policy' header is not set by the upstream.
+ type: boolean
+ referrerPolicy:
+ default: true
+ description: |-
+ ReferrerPolicy ensures that no 'Referer' header is sent for cross-origin requests
+ if the 'Referrer-Policy' header is not set by the upstream.
+ type: boolean
+ xContentTypeOptions:
+ default: true
+ description: XContentTypeOptions sets 'X-Content-Type-Options' to 'nosniff' if it is not set by the upstream.
+ type: boolean
+ xFrameOptions:
+ default: true
+ description: XFrameOptions sets 'X-Frame-Options' to SAMEORIGIN if it is not set by the upstream.
+ type: boolean
+ type: object
+ custom:
+ description: Custom allows configuring additional upstream response headers.
+ items:
+ properties:
+ headers:
+ description: Headers to add.
+ items:
+ description: HeaderRewritesHeader specifies a header with a particular value
+ properties:
+ name:
+ description: Name defines the name of a header.
+ minLength: 1
+ type: string
+ value:
+ description: Value defines the value of a header.
+ type: string
+ required:
+ - name
+ - value
+ type: object
+ minItems: 1
+ type: array
+ mode:
+ default: AddIfAbsent
+ description: Mode defines the header addition strategy.
+ enum:
+ - AddIfAbsent
+ - OverwriteOrAdd
+ type: string
+ name:
+ description: Name describing the configured operation.
+ minLength: 1
+ type: string
+ requestConditions:
+ description: RequestConditions defines additional request properties which must be matched in order for this operation to be applied.
+ properties:
+ header:
+ description: Header defines the matching headers of a request.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ invert:
+ default: false
+ description: Invert indicates whether the request condition should be inverted.
+ type: boolean
+ mediaType:
+ description: MediaType defines the matching media type from the content-type header of a request.
+ properties:
+ matcher:
+ description: |-
+ NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
+ In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ method:
+ description: Method defines the matching methods of a request.
+ items:
+ description: Method defines common HTTP methods.
+ enum:
+ - GET
+ - HEAD
+ - POST
+ - PUT
+ - PATCH
+ - DELETE
+ - CONNECT
+ - OPTIONS
+ - TRACE
+ type: string
+ type: array
+ path:
+ description: Path defines the matching path of a request.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ remoteIP:
+ description: RemoteIP defines the matching remote IPs of a request.
+ properties:
+ cidrRanges:
+ description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
+ items:
+ description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
+ format: cidr
+ type: string
+ minItems: 1
+ type: array
+ invert:
+ default: false
+ description: Invert indicates whether the match should be inverted.
+ type: boolean
+ required:
+ - cidrRanges
+ type: object
+ type: object
+ required:
+ - headers
+ - name
+ type: object
+ minItems: 1
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ allow:
+ description: |-
+ Allow defines which response headers will be forwarded to the downstream.
+ This can either be allHeaders or matchingHeaders.
+ Default: allHeaders: {}
+ properties:
+ allHeaders:
+ description: AllHeaders specifies that all response headers should be forwarded.
+ type: object
+ matchingHeaders:
+ description: MatchingHeaders specifies which response headers should be forwarded.
+ properties:
+ builtIn:
+ description: BuiltIn allows configuring a set of predefined upstream response header.
+ properties:
+ standardHeaders:
+ default: false
+ description: StandardHeaders defines whether the response headers which are forwarded to the downstream will be restricted to a set of common response headers.
+ type: boolean
+ type: object
+ custom:
+ description: Custom allows configuring additional upstream response headers.
+ items:
+ properties:
+ headers:
+ description: Headers to allow.
+ items:
+ description: |-
+ HeaderMatcher defines a matcher for an HTTP header.
+ At least one of name and value must be set.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ minItems: 1
+ type: array
+ name:
+ description: Name describing the configured operation. Must be unique.
+ minLength: 1
+ type: string
+ requestConditions:
+ description: RequestConditions defines additional request properties which must be matched in order for this operation to be applied.
+ properties:
+ header:
+ description: Header defines the matching headers of a request.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ invert:
+ default: false
+ description: Invert indicates whether the request condition should be inverted.
+ type: boolean
+ mediaType:
+ description: MediaType defines the matching media type from the content-type header of a request.
+ properties:
+ matcher:
+ description: |-
+ NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
+ In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ method:
+ description: Method defines the matching methods of a request.
+ items:
+ description: Method defines common HTTP methods.
+ enum:
+ - GET
+ - HEAD
+ - POST
+ - PUT
+ - PATCH
+ - DELETE
+ - CONNECT
+ - OPTIONS
+ - TRACE
+ type: string
+ type: array
+ path:
+ description: Path defines the matching path of a request.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ remoteIP:
+ description: RemoteIP defines the matching remote IPs of a request.
+ properties:
+ cidrRanges:
+ description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
+ items:
+ description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
+ format: cidr
+ type: string
+ minItems: 1
+ type: array
+ invert:
+ default: false
+ description: Invert indicates whether the match should be inverted.
+ type: boolean
+ required:
+ - cidrRanges
+ type: object
+ type: object
+ required:
+ - headers
+ - name
+ type: object
+ minItems: 1
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ remove:
+ description: Remove defines which response headers will be removed before forwarding to the downstream.
+ properties:
+ builtIn:
+ description: BuiltIn allows configuring a set of predefined upstream response headers.
+ properties:
+ auth:
+ description: Auth defines the categories of headers concerning authentication.
+ properties:
+ basic:
+ default: false
+ description: Basic removes upstream response headers that advise clients to authenticate with Basic Authentication.
+ type: boolean
+ negotiate:
+ default: true
+ description: Negotiate removes upstream response headers that advise clients to authenticate with Negotiate.
+ type: boolean
+ ntlm:
+ default: true
+ description: |-
+ NTLM removes upstream response headers that advise clients to authenticate with NTLM.
+ By default, these headers are removed, because NTLM pass-through is not supported.
+ type: boolean
+ type: object
+ informationLeakage:
+ description: InformationLeakage defines the categories of headers concerning information leakage.
+ properties:
+ application:
+ default: true
+ description: Application removes upstream response headers that leak information about the deployed software.
+ type: boolean
+ server:
+ default: true
+ description: Server removes upstream response headers that leak information about the server.
+ type: boolean
+ type: object
+ permissiveCors:
+ default: true
+ description: PermissiveCORS removes upstream response headers for CORS (Cross-Origin Resource Sharing) which have no restrictions and therefore reduce client-side security.
+ type: boolean
+ type: object
+ custom:
+ description: Custom allows configuring additional upstream response headers.
+ items:
+ properties:
+ headers:
+ description: Headers to remove.
+ items:
+ description: |-
+ HeaderMatcher defines a matcher for an HTTP header.
+ At least one of name and value must be set.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ minItems: 1
+ type: array
+ name:
+ description: Name describing the configured remove operation. Must be unique.
+ minLength: 1
+ type: string
+ requestConditions:
+ description: RequestConditions defines additional request properties which must be matched in order for this operation to be applied.
+ properties:
+ header:
+ description: Header defines the matching headers of a request.
+ properties:
+ name:
+ description: Name defines the name of a header.
+ properties:
+ matcher:
+ description: Matcher defines the way to match a string. In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ value:
+ description: Value defines the value of a header.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ type: object
+ invert:
+ default: false
+ description: Invert indicates whether the request condition should be inverted.
+ type: boolean
+ mediaType:
+ description: MediaType defines the matching media type from the content-type header of a request.
+ properties:
+ matcher:
+ description: |-
+ NonInvertableCaseInsensitiveStringMatcher defines the way to match a string.
+ In comparison to a normal StringMatcher, a value is always matched ignoring the case and can't be inverted.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ method:
+ description: Method defines the matching methods of a request.
+ items:
+ description: Method defines common HTTP methods.
+ enum:
+ - GET
+ - HEAD
+ - POST
+ - PUT
+ - PATCH
+ - DELETE
+ - CONNECT
+ - OPTIONS
+ - TRACE
+ type: string
+ type: array
+ path:
+ description: Path defines the matching path of a request.
+ properties:
+ matcher:
+ description: StringMatcher defines the way to match a string.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ required:
+ - matcher
+ type: object
+ remoteIP:
+ description: RemoteIP defines the matching remote IPs of a request.
+ properties:
+ cidrRanges:
+ description: CIDRRanges defines the IPv4 or IPv6 CIDR ranges, e.g. ``196.148.3.128/26`` or ``2001:db8::/28``.
+ items:
+ description: CIDRRange defines an IPv4 or IPv6 CIDR range, e.g. “196.148.3.128/26“ or “2001:db8::/28“.
+ format: cidr
+ type: string
+ minItems: 1
+ type: array
+ invert:
+ default: false
+ description: Invert indicates whether the match should be inverted.
+ type: boolean
+ required:
+ - cidrRanges
+ type: object
+ type: object
+ required:
+ - headers
+ - name
+ type: object
+ minItems: 1
+ type: array
+ x-kubernetes-list-map-keys:
+ - name
+ x-kubernetes-list-type: map
+ type: object
+ type: object
+ settings:
+ description: Settings configures the HeaderRewrites filter.
+ properties:
+ operationalMode:
+ default: Production
+ description: OperationalMode defines the behavior of the filter. In integration mode more information is logged about the requests and responses.
+ enum:
+ - Production
+ - Integration
+ type: string
+ type: object
+ type: object
+ type: object
+ served: true
+ storage: true
diff --git a/charts/airlock/microgateway/4.3.0/crds/identitypropagations.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/identitypropagations.microgateway.airlock.com.yaml
similarity index 64%
rename from charts/airlock/microgateway/4.3.0/crds/identitypropagations.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/identitypropagations.microgateway.airlock.com.yaml
index 8ff36ad33..a51e47545 100644
--- a/charts/airlock/microgateway/4.3.0/crds/identitypropagations.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/identitypropagations.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: identitypropagations.microgateway.airlock.com
spec:
group: microgateway.airlock.com
@@ -47,6 +47,48 @@ spec:
spec:
description: Specification of the desired identity propagation.
properties:
+ bearerToken:
+ description: BearerToken configures identity propagation via an authorization header containing a bearer token.
+ properties:
+ source:
+ description: Source from which to extract the token.
+ properties:
+ metadata:
+ description: Metadata specifies to extract a value from an Envoy dynamic filter metadata key.
+ properties:
+ key:
+ description: Key specifies the metadata key from which to load the value, e.g. `some_payload.aud`.
+ minLength: 1
+ type: string
+ namespace:
+ description: Namespace specifies the metadata namespace within which the lookup should be performed, e.g. `envoy.filters.http.jwt_authn`.
+ minLength: 1
+ type: string
+ required:
+ - key
+ - namespace
+ type: object
+ oidc:
+ description: OIDC specifies to extract a value from the result of an OpenID Connect flow.
+ properties:
+ accessToken:
+ description: AccessToken specifies to extract the value from the OpenID Connect Access Token.
+ type: object
+ idToken:
+ description: IDToken specifies to extract the value from the OpenID Connect ID Token.
+ properties:
+ claim:
+ description: Claim selects the JWT claim from which to extract the value.
+ minLength: 1
+ type: string
+ required:
+ - claim
+ type: object
+ type: object
+ type: object
+ required:
+ - source
+ type: object
header:
description: Header configures identity propagation via a request header.
properties:
@@ -78,6 +120,9 @@ spec:
oidc:
description: OIDC specifies to extract a value from the result of an OpenID Connect flow.
properties:
+ accessToken:
+ description: AccessToken specifies to extract the value from the OpenID Connect Access Token.
+ type: object
idToken:
description: IDToken specifies to extract the value from the OpenID Connect ID Token.
properties:
@@ -88,8 +133,6 @@ spec:
required:
- claim
type: object
- required:
- - idToken
type: object
type: object
required:
diff --git a/charts/airlock/microgateway/4.4.1/crds/jwks.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/jwks.microgateway.airlock.com.yaml
new file mode 100644
index 000000000..a780e6a34
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/crds/jwks.microgateway.airlock.com.yaml
@@ -0,0 +1,294 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.16.4
+ labels:
+ app.kubernetes.io/name: airlock-microgateway-operator
+ app.kubernetes.io/version: 4.4.1
+ name: jwks.microgateway.airlock.com
+spec:
+ group: microgateway.airlock.com
+ names:
+ categories:
+ - airlock-microgateway
+ kind: JWKS
+ listKind: JWKSList
+ plural: jwks
+ singular: jwks
+ scope: Namespaced
+ versions:
+ - name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: JWKS provides a JSON Web Key Set.
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: Specification of the JWKS.
+ properties:
+ provider:
+ description: Provider configures the source from which to retrieve the JWKS.
+ properties:
+ local:
+ description: Local specifies to retrieve the JWKS from a local secret.
+ properties:
+ secretRef:
+ description: SecretRef selects the secret containing the JWKS under the key 'jwks.json'.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ required:
+ - secretRef
+ type: object
+ remote:
+ description: Remote specifies to retrieve the JWKS from a remote endpoint.
+ properties:
+ timeouts:
+ description: Timeouts specifies the timeouts when interacting with the Token endpoint.
+ properties:
+ connect:
+ default: 5s
+ description: Connect specifies the timeout for establishing a connection.
+ type: string
+ maxDuration:
+ default: 15s
+ description: MaxDuration specifies the response timeout.
+ type: string
+ type: object
+ tls:
+ description: TLS defines TLS settings.
+ properties:
+ certificateVerification:
+ description: CertificateVerification specifies how the certificate presented by the server is verified.
+ properties:
+ custom:
+ description: |-
+ Custom explicitly specifies how the server certificate should be verified.
+ Typical use cases include specifying a custom CA and SAN match when working with self-signed certificates or pinning a specific public key.
+ properties:
+ allowedSANs:
+ description: |-
+ AllowedSANs is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
+ Subject Alternative Name of the presented certificate matches one of the specified matchers. The matching uses “any” semantics,
+ that is to say, the SAN is verified if at least one matcher is matched.
+ AllowedSANs requires trustedCA to be set.
+ items:
+ description: |-
+ TLSValidationContextSANMatcher is a list of matchers to verify the Subject Alternative name. If specified, it will verify that the
+ Subject Alternative Name of the presented certificate matches one of the specified matchers.
+ properties:
+ matcher:
+ description: Matcher defines the string matcher for the SAN value.
+ properties:
+ contains:
+ description: |-
+ Contains defines a substring match on the substring specified here. Empty contains match is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ exact:
+ description: |-
+ Exact defines an explicit match on the string specified here.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ ignoreCase:
+ default: false
+ description: IgnoreCase indicates whether the matching should be case-insensitive. In case of a regex match, the regex gets wrapped with a group `(?i:...)`.
+ type: boolean
+ prefix:
+ description: |-
+ Prefix defines a prefix match on the prefix specified here. Empty prefix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ regex:
+ description: |-
+ Regex defines a regex match on the regular expression specified here. Google's [RE2 regex engine](https://github.com/google/re2/wiki/Syntax) is used.
+ The regex matches only single-line by default, even with ".*". To match a multi-line string prepend (?s) to your regex.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ suffix:
+ description: |-
+ Suffix defines a suffix match on the suffix specified here. Empty suffix is not allowed, please use regex instead.
+ Only one of exact, prefix, suffix, regex or contains can be set.
+ minLength: 1
+ type: string
+ type: object
+ sanType:
+ description: SanType defines the type of SAN matcher.
+ enum:
+ - DNS
+ - Email
+ - URI
+ - IPAddress
+ type: string
+ required:
+ - matcher
+ - sanType
+ type: object
+ minItems: 1
+ type: array
+ certificatePinning:
+ description: |-
+ CertificatePinning defines constraints the presented certificate must fulfill.
+ If more than one constraint is configured only one must be satisfied.
+ At least one of allowedSPKIs and allowedHashes must be set.
+ properties:
+ allowedHashes:
+ description: |-
+ AllowedHashes is a list of hex-encoded SHA-256 hashes.
+ If specified, it will verify that the SHA-256 of the DER-encoded presented certificate matches one of the specified values.
+ items:
+ type: string
+ minItems: 1
+ type: array
+ allowedSPKIs:
+ description: |-
+ AllowedSPKIs is a list of base64-encoded SHA-256 hashes.
+ If specified, it will verify that the SHA-256 of the DER-encoded Subject Public Key Information (SPKI) of the presented certificate matches one of the specified values.
+ items:
+ type: string
+ minItems: 1
+ type: array
+ type: object
+ crl:
+ description: CRL defines the Certificate Revocation List (CRL) settings.
+ properties:
+ lists:
+ description: Lists defines the list of secretRefs containing Certificate Revocation Lists.
+ items:
+ properties:
+ secretRef:
+ description: SecretRef defines the reference to a secret containing one or more CRL's (in PEM format) under the key 'ca.crl'.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ required:
+ - secretRef
+ type: object
+ minItems: 1
+ type: array
+ validationMode:
+ default: VerifyChain
+ description: ValidationMode defines whether only the leaf certificate or also the CA certs should be checked.
+ enum:
+ - VerifyLeafCertOnly
+ - VerifyChain
+ type: string
+ type: object
+ trustedCA:
+ description: TrustedCA defines which CA certificates are trusted.
+ properties:
+ certificates:
+ description: Certificates defines the list of secretRefs containing trusted CA certificates.
+ items:
+ properties:
+ secretRef:
+ description: SecretRef defines the reference to a secret containing one or more CA certificates under the key 'ca.crt'.
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ required:
+ - secretRef
+ type: object
+ minItems: 1
+ type: array
+ verificationDepth:
+ default: 1
+ description: |-
+ VerificationDepth specifies the hops in the certificate chain at which validation is performed.
+ 1 means that either the leaf or the signing CA must be in the set of trusted certificates.
+ format: int32
+ type: integer
+ required:
+ - certificates
+ type: object
+ type: object
+ disabled:
+ description: |-
+ Disabled specifies to trust any certificate without verification.
+ THIS IS INSECURE AND SHOULD ONLY BE USED FOR TESTING.
+ type: object
+ publicCAs:
+ description: PublicCAs specifies to only accept certificates with a SAN matching "uri" and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Engine's base image.
+ type: object
+ type: object
+ ciphers:
+ description: Ciphers defines a list of the supported TLS cipher suites. For details on cipher list refer to the envoy documentation on cipher_suites in common tls configuration.
+ items:
+ type: string
+ minItems: 1
+ type: array
+ protocol:
+ description: Protocol defines the supported TLS protocol versions.
+ properties:
+ maximum:
+ description: Maximum supported TLS version.
+ enum:
+ - TLSv1_0
+ - TLSv1_1
+ - TLSv1_2
+ - TLSv1_3
+ type: string
+ minimum:
+ description: Minimum supported TLS version.
+ enum:
+ - TLSv1_0
+ - TLSv1_1
+ - TLSv1_2
+ - TLSv1_3
+ type: string
+ type: object
+ type: object
+ uri:
+ description: URI specifies the endpoint address.
+ format: uri
+ minLength: 1
+ pattern: ^(http|https)://.*$
+ type: string
+ required:
+ - uri
+ type: object
+ type: object
+ required:
+ - provider
+ type: object
+ required:
+ - spec
+ type: object
+ served: true
+ storage: true
diff --git a/charts/airlock/microgateway/4.3.0/crds/limits.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/limits.microgateway.airlock.com.yaml
similarity index 99%
rename from charts/airlock/microgateway/4.3.0/crds/limits.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/limits.microgateway.airlock.com.yaml
index f807994db..89ba9977c 100644
--- a/charts/airlock/microgateway/4.3.0/crds/limits.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/limits.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: limits.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.3.0/crds/oidcproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/oidcproviders.microgateway.airlock.com.yaml
similarity index 86%
rename from charts/airlock/microgateway/4.3.0/crds/oidcproviders.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/oidcproviders.microgateway.airlock.com.yaml
index 56dad4130..9777a206b 100644
--- a/charts/airlock/microgateway/4.3.0/crds/oidcproviders.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/oidcproviders.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: oidcproviders.microgateway.airlock.com
spec:
group: microgateway.airlock.com
@@ -28,19 +28,7 @@ spec:
description: |-
OIDCProvider specifies an OpenID Provider (OP).
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - Sessions are always shared across all Microgateway Engines using the same Redis instance.
- I.e. if application A and B (with different SidecarGateways) have the same Redis instance configured in their SessionHandling CR, users which are logged into application A
- may be able to access authenticated routes on application B, even if their OIDCRelyingParty configuration differs.
-
-
- {{% /notice %}}
+ {{% notice info %}} The OIDC feature requires SessionHandling to be configured in the SidecarGateway. {{% /notice %}}
properties:
apiVersion:
description: |-
@@ -83,6 +71,18 @@ spec:
token:
description: Token configures the endpoint from which the access, ID and refresh tokens are obtained.
properties:
+ timeouts:
+ description: Timeouts specifies the timeouts when interacting with the Token endpoint.
+ properties:
+ connect:
+ default: 5s
+ description: Connect specifies the timeout for establishing a connection.
+ type: string
+ maxDuration:
+ default: 15s
+ description: MaxDuration specifies the response timeout.
+ type: string
+ type: object
tls:
description: TLS defines TLS settings.
properties:
@@ -293,8 +293,45 @@ spec:
- authorization
- token
type: object
+ issuer:
+ description: Issuer specifies the unique identifier of the OIDC Provider, which is used e.g. for signature verification.
+ format: uri
+ minLength: 1
+ pattern: ^(http|https)://.*$
+ type: string
+ tokenValidation:
+ description: TokenValidation configures token validation.
+ properties:
+ idToken:
+ description: IDToken configures validation for the OIDC ID Token.
+ properties:
+ signatureVerification:
+ description: SignatureVerification specifies how to verify the ID Token signature.
+ properties:
+ disabled:
+ description: Disabled specifies to skip verification of the JWT signature. Not recommended for production environments.
+ type: object
+ jwksRef:
+ description: JwksRef specifies the JWKS to use for verifying the JWT signature (usually provided by the OpenID Provider).
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ type: object
+ required:
+ - signatureVerification
+ type: object
+ required:
+ - idToken
+ type: object
required:
- endpoints
+ - issuer
+ - tokenValidation
type: object
type: object
required:
diff --git a/charts/airlock/microgateway/4.3.0/crds/oidcrelyingparties.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/oidcrelyingparties.microgateway.airlock.com.yaml
similarity index 84%
rename from charts/airlock/microgateway/4.3.0/crds/oidcrelyingparties.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/oidcrelyingparties.microgateway.airlock.com.yaml
index 578ac39df..4005300a3 100644
--- a/charts/airlock/microgateway/4.3.0/crds/oidcrelyingparties.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/oidcrelyingparties.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: oidcrelyingparties.microgateway.airlock.com
spec:
group: microgateway.airlock.com
@@ -28,19 +28,6 @@ spec:
description: |-
OIDCRelyingParty specifies how the Airlock Microgateway Engine interacts with an OpenID Provider (OP).
-
- {{% notice warning %}} The OIDC feature is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as security has not yet been hardened.
- In particular, the current implementation has the following limitations, which we intend to address in future Microgateway releases:
- - The state parameter is guessable.
- - Sessions are always shared across all Microgateway Engines using the same Redis instance.
- I.e. if application A and B (with different SidecarGateways) have the same Redis instance configured in their SessionHandling CR, users which are logged into application A
- may be able to access authenticated routes on application B, even if their OIDCRelyingParty configuration differs.
-
-
- {{% /notice %}}
{{% notice info %}} The OIDC feature requires SessionHandling to be configured in the SidecarGateway. {{% /notice %}}
properties:
apiVersion:
@@ -96,6 +83,10 @@ spec:
required:
- clientSecret
type: object
+ flowTimeout:
+ default: 5m
+ description: FlowTimeout specifies the time window within which an initiated OIDC flow can be completed by the client.
+ type: string
oidcProviderRef:
description: OIDCProviderRef selects the OpenID Provider (OP) used to authenticate users.
properties:
@@ -110,7 +101,10 @@ spec:
description: PathMapping configures the action matching.
properties:
logoutPath:
- description: LogoutPath specifies which request paths should initiate a logout.
+ description: |-
+ LogoutPath specifies which request paths should initiate a logout.
+
+ WARNING: If the AccessControl policy referencing this OIDCRelyingParty has a request condition, you must currently ensure that it also matches these logout requests.
properties:
matcher:
description: StringMatcher defines the way to match a string.
@@ -155,7 +149,10 @@ spec:
- matcher
type: object
redirectPath:
- description: RedirectPath specifies which request paths should be interpreted as a response from the authorization endpoint.
+ description: |-
+ RedirectPath specifies which request paths should be interpreted as a callback redirect from the authorization endpoint.
+
+ WARNING: If the AccessControl policy referencing this OIDCRelyingParty has a request condition, you must currently ensure that it also matches these callback redirect requests.
properties:
matcher:
description: StringMatcher defines the way to match a string.
@@ -206,9 +203,23 @@ spec:
redirectURI:
description: |-
RedirectURI configures the "redirect_uri" parameter included in the authorization request.
- May contain envoy command operators, e.g. '%REQ(:x-forwarded-proto)%://%REQ(:authority)%/callback'.
+ May contain envoy command operators, e.g.: `%REQ(:x-forwarded-proto)%://%REQ(:authority)%/callback`
+
+ WARNING: If the AccessControl policy referencing this OIDCRelyingParty has a request condition, you must currently
+ ensure that it also matches requests to this URI.
minLength: 1
type: string
+ scopes:
+ description: |-
+ Scopes specifies the scopes to request during the OIDC flow.
+ The mandatory `openid` scope is implicitly added to the list if not already present.
+ Default: `['openid', 'profile']`
+
+ Note: Different OIDCRelyingParties which use the same OIDC Provider and Client ID must request the same scopes for now.
+ items:
+ minLength: 1
+ type: string
+ type: array
required:
- clientID
- credentials
diff --git a/charts/airlock/microgateway/4.3.0/crds/openapis.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/openapis.microgateway.airlock.com.yaml
similarity index 98%
rename from charts/airlock/microgateway/4.3.0/crds/openapis.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/openapis.microgateway.airlock.com.yaml
index 451dc8b88..2531bc334 100644
--- a/charts/airlock/microgateway/4.3.0/crds/openapis.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/openapis.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: openapis.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.3.3/crds/parsers.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/parsers.microgateway.airlock.com.yaml
similarity index 99%
rename from charts/airlock/microgateway/4.3.3/crds/parsers.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/parsers.microgateway.airlock.com.yaml
index db60b6c84..5ed82205d 100644
--- a/charts/airlock/microgateway/4.3.3/crds/parsers.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/parsers.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.3
+ app.kubernetes.io/version: 4.4.1
name: parsers.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.3.0/crds/redisproviders.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/redisproviders.microgateway.airlock.com.yaml
similarity index 67%
rename from charts/airlock/microgateway/4.3.0/crds/redisproviders.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/redisproviders.microgateway.airlock.com.yaml
index 59c94b966..65c785f0a 100644
--- a/charts/airlock/microgateway/4.3.0/crds/redisproviders.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/redisproviders.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: redisproviders.microgateway.airlock.com
spec:
group: microgateway.airlock.com
@@ -74,6 +74,63 @@ spec:
mode:
description: Mode configures the redis deployment mode.
properties:
+ cluster:
+ description: Cluster specifies the Redis Cluster to connect to.
+ properties:
+ nodes:
+ description: Nodes specifies the Cluster nodes.
+ items:
+ properties:
+ host:
+ description: Host specifies the IP or hostname.
+ minLength: 1
+ pattern: ^(\d{1,3}(\.\d{1,3}){3}|([0-9a-fA-F]{1,4}|:)+(:\d{1,3}(\.\d{1,3}){3})?|[a-z0-9\-]+(\.[a-z0-9\-]+)*)$
+ type: string
+ port:
+ default: 6379
+ description: Port specifies the port.
+ maximum: 65535
+ minimum: 1
+ type: integer
+ required:
+ - host
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - nodes
+ type: object
+ sentinel:
+ description: Sentinel specifies the Redis Sentinels to connect to.
+ properties:
+ masterName:
+ description: MasterName specifies the master name.
+ minLength: 1
+ type: string
+ nodes:
+ description: Nodes specifies the Sentinel nodes.
+ items:
+ properties:
+ host:
+ description: Host specifies the IP or hostname.
+ minLength: 1
+ pattern: ^(\d{1,3}(\.\d{1,3}){3}|([0-9a-fA-F]{1,4}|:)+(:\d{1,3}(\.\d{1,3}){3})?|[a-z0-9\-]+(\.[a-z0-9\-]+)*)$
+ type: string
+ port:
+ default: 6379
+ description: Port specifies the port.
+ maximum: 65535
+ minimum: 1
+ type: integer
+ required:
+ - host
+ type: object
+ minItems: 1
+ type: array
+ required:
+ - masterName
+ - nodes
+ type: object
standalone:
description: Standalone specifies the standalone Redis instance to connect to.
properties:
@@ -148,6 +205,22 @@ spec:
description: PublicCAs specifies to only accept certificates with a SAN matching the host and which are signed by a CA which is either directly or indirectly trusted by any of the root CA certificates shipped with the Airlock Microgateway Session Agent’s base image.
type: object
type: object
+ clientCertificate:
+ description: ClientCertificate configures client certificate authentication. If not specified, TLS-based client authentication is disabled.
+ properties:
+ secretRef:
+ description: SecretRef specifies the client certificate to use (secret of type kubernetes.io/tls).
+ properties:
+ name:
+ description: Name of the resource
+ minLength: 1
+ type: string
+ required:
+ - name
+ type: object
+ required:
+ - secretRef
+ type: object
type: object
required:
- mode
diff --git a/charts/airlock/microgateway/4.3.0/crds/sessionhandlings.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/sessionhandlings.microgateway.airlock.com.yaml
similarity index 57%
rename from charts/airlock/microgateway/4.3.0/crds/sessionhandlings.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/sessionhandlings.microgateway.airlock.com.yaml
index 5275aa7b4..81ed6ac88 100644
--- a/charts/airlock/microgateway/4.3.0/crds/sessionhandlings.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/sessionhandlings.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: sessionhandlings.microgateway.airlock.com
spec:
group: microgateway.airlock.com
@@ -21,15 +21,7 @@ spec:
- name: v1alpha1
schema:
openAPIV3Schema:
- description: |-
- SessionHandling contains the configuration for session handling.
-
-
- {{% notice warning %}} The Session Handling feature (required for OIDC) is currently in an experimental state.
-
-
- We encourage you to try it out and give feedback, but be aware that we do not recommend using it in a production environment yet, as high-availability Redis configurations (e.g. Sentinel/Cluster) are not yet supported.
- {{% /notice %}}
+ description: SessionHandling contains the configuration for session handling.
properties:
apiVersion:
description: |-
@@ -51,6 +43,14 @@ spec:
spec:
description: Specification of the desired session handling behavior.
properties:
+ defaultTimeouts:
+ description: DefaultTimeouts specifies the session timeouts to apply when not provided by the authentication method.
+ properties:
+ lifetime:
+ default: 12h
+ description: Lifetime specifies the maximum duration a session can exist.
+ type: string
+ type: object
persistence:
description: Persistence configures where to store the session state.
properties:
@@ -67,6 +67,18 @@ spec:
required:
- redisProviderRef
type: object
+ prefix:
+ description: |-
+ Prefix specifies the prefix under which the sessions should be stored in the persistence layer.
+ If not specified, an automatic prefix derived from the namespaced SessionHandling CR name is used, which ensures that sessions will always be isolated on Microgateways configured with different SessionHandling CRs, even if they share the same persistence backend.
+
+ To allow session sharing between different Microgateway deployments, ensure that the prefix and persistence backend is the same across all corresponding SessionHandling CRs.
+
+ Note: Session cookies are currently never shared across different fully qualified domain names (FQDNs) and authentication via different OIDC Relying Parties generates different session cookies. Clients will therefore only able to transparently reuse session cookies for connecting to different Microgateway deployments if those are a) exposed under the same FQDN and b) handle authentication via the same OIDC Relying Party.
+ maxLength: 64
+ minLength: 1
+ pattern: ^[a-zA-Z][a-zA-Z0-9_]*$
+ type: string
required:
- persistence
type: object
diff --git a/charts/airlock/microgateway/4.3.1/crds/sidecargateways.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/sidecargateways.microgateway.airlock.com.yaml
similarity index 99%
rename from charts/airlock/microgateway/4.3.1/crds/sidecargateways.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/sidecargateways.microgateway.airlock.com.yaml
index 9639c94fb..7229bacc0 100644
--- a/charts/airlock/microgateway/4.3.1/crds/sidecargateways.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/sidecargateways.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.1
+ app.kubernetes.io/version: 4.4.1
name: sidecargateways.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.3.0/crds/telemetries.microgateway.airlock.com.yaml b/charts/airlock/microgateway/4.4.1/crds/telemetries.microgateway.airlock.com.yaml
similarity index 98%
rename from charts/airlock/microgateway/4.3.0/crds/telemetries.microgateway.airlock.com.yaml
rename to charts/airlock/microgateway/4.4.1/crds/telemetries.microgateway.airlock.com.yaml
index 80a7cba97..96ef223f2 100644
--- a/charts/airlock/microgateway/4.3.0/crds/telemetries.microgateway.airlock.com.yaml
+++ b/charts/airlock/microgateway/4.4.1/crds/telemetries.microgateway.airlock.com.yaml
@@ -2,10 +2,10 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
- controller-gen.kubebuilder.io/version: v0.15.0
+ controller-gen.kubebuilder.io/version: v0.16.4
labels:
app.kubernetes.io/name: airlock-microgateway-operator
- app.kubernetes.io/version: 4.3.0
+ app.kubernetes.io/version: 4.4.1
name: telemetries.microgateway.airlock.com
spec:
group: microgateway.airlock.com
diff --git a/charts/airlock/microgateway/4.3.0/dashboards/blockLogs.json b/charts/airlock/microgateway/4.4.1/dashboards/blockLogs.json
similarity index 68%
rename from charts/airlock/microgateway/4.3.0/dashboards/blockLogs.json
rename to charts/airlock/microgateway/4.4.1/dashboards/blockLogs.json
index ef0ce6d62..8c96b4f64 100644
--- a/charts/airlock/microgateway/4.3.0/dashboards/blockLogs.json
+++ b/charts/airlock/microgateway/4.4.1/dashboards/blockLogs.json
@@ -60,7 +60,7 @@
}
]
},
- "description": "Blocked requests by Airlock Microgateway retrieved from corresponding access logs.\n\nThe dashboard can be filtered by namespace and block type. Column filters on the table allow for even a more granular filtering of the logs.",
+ "description": "Log entries of threats blocked by Airlock Microgateway.\n\nThe dashboard can be filtered by namespace and block type. Column filters on the table allow for an even more granular filtering of the logs.",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
@@ -140,7 +140,7 @@
},
{
"id": "unit",
- "value": "dateTimeAsIso"
+ "value": "time: YYYY-MM-DD HH:mm:ss.SSS"
},
{
"id": "custom.filterable"
@@ -150,12 +150,12 @@
{
"matcher": {
"id": "byName",
- "options": "Method"
+ "options": "HTTP Method"
},
"properties": [
{
"id": "custom.width",
- "value": 89
+ "value": 140
}
]
},
@@ -222,7 +222,7 @@
{
"matcher": {
"id": "byName",
- "options": "Attack Type"
+ "options": "Block Subtype"
},
"properties": [
{
@@ -230,18 +230,6 @@
"value": 217
}
]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Application"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 207
- }
- ]
}
]
},
@@ -266,7 +254,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -274,62 +262,14 @@
"uid": "${DS_LOKI}"
},
"editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_deny_rule\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.deny_rules.matches\"\n| label_format block_type=\"deny_rules\", attack_type=`{{ range $q := fromJson .details }} {{ if eq $q.threat_handling_mode \"block\" }} {{ $q.rule_key }} {{ end }} {{ end }}` | block_type=~\"${blockType:regex}\"",
+ "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", domain=\"url.domain\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.actions.block.details\", block_type=\"airlock.actions.block.block_type\", block_subtype=\"airlock.actions.block.block_subtype\"\n| block_type=~\"${blockType:regex}\"",
"hide": false,
"queryType": "range",
- "refId": "Deny Rule Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_limit\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.limits.matches\"\n| label_format block_type=\"limits\", attack_type=`{{ range $q := fromJson .details }} {{ if eq $q.threat_handling_mode \"block\" }} {{ $q.rule }} {{ end }} {{ end }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Limit Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_openapi\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", reference=\"airlock.openapi.reference\", constraint=\"airlock.openapi.request.failed_validation.constraint\", position=\"airlock.openapi.request.failed_validation.position\", message=\"airlock.openapi.request.failed_validation.message\"\n| label_format block_type=\"openapi\", attack_type=\"openapi\", details=`{{.reference }}: {{.constraint }} at {{ .position }} ({{ .message }})` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "OpenAPI Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_parser\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", attack_type=\"airlock.parser\", failed_check=\"airlock.parser.matches[0].failed_check\", message=\"airlock.parser.matches[0].message\"\n| label_format block_type=\"parsing\", attack_type=\"parsing\", details=`{{.failed_check}}: {{.message}}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Parser Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_graphql\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", reference=\"airlock.graphql.reference\", message=\"airlock.graphql.request.failed_validation.message\"\n| label_format block_type=\"graphql\", attack_type=\"graphql\", details=`{{ .reference }}: {{ .message }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "GraphQL Blocks"
+ "refId": "Blocks"
}
],
"title": "Blocked Request logs",
"transformations": [
- {
- "id": "merge",
- "options": {}
- },
{
"id": "extractFields",
"options": {
@@ -344,16 +284,16 @@
"include": {
"names": [
"Time",
- "attack_type",
+ "block_subtype",
"block_type",
"client_ip",
"details",
+ "domain",
"http_method",
"namespace",
"request_id",
"request_size",
- "url",
- "pod"
+ "url"
]
}
}
@@ -371,30 +311,29 @@
"includeByName": {},
"indexByName": {
"Time": 0,
- "attack_type": 7,
+ "block_subtype": 7,
"block_type": 6,
"client_ip": 9,
"details": 8,
+ "domain": 2,
"http_method": 3,
"namespace": 1,
- "pod": 2,
"request_id": 10,
"request_size": 5,
"url": 4
},
"renameByName": {
"Time": "Timestamp",
- "attack_type": "Attack Type",
+ "block_subtype": "Block Subtype",
"block_type": "Block Type",
"client_ip": "Client IP",
"details": "Details",
- "http_method": "Method",
+ "domain": "URL Domain",
+ "http_method": "HTTP Method",
"namespace": "Namespace",
- "pod": "Pod",
"request_id": "Request ID",
"request_size": "Request Size",
- "tsNs": "",
- "url": "Path"
+ "url": "URL Path"
}
}
}
@@ -409,11 +348,7 @@
"templating": {
"list": [
{
- "current": {
- "selected": false,
- "text": "Loki",
- "value": "P8E80F9AEF21F6940"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "DS_LOKI",
@@ -477,11 +412,7 @@
"type": "query"
},
{
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "DS_PROMETHEUS",
@@ -503,7 +434,7 @@
"timeRangeUpdatedDuringEditOrView": false,
"timepicker": {},
"timezone": "browser",
- "title": "Airlock Microgateway Blocked Request Logs",
+ "title": "Airlock Microgateway Threats Block - Logs",
"uid": "adnyzcvwnyadcc",
"version": 3,
"weekStart": ""
diff --git a/charts/airlock/microgateway/4.3.0/dashboards/blockMetrics.json b/charts/airlock/microgateway/4.4.1/dashboards/blockMetrics.json
similarity index 95%
rename from charts/airlock/microgateway/4.3.0/dashboards/blockMetrics.json
rename to charts/airlock/microgateway/4.4.1/dashboards/blockMetrics.json
index ba383d22e..0b98122ef 100644
--- a/charts/airlock/microgateway/4.3.0/dashboards/blockMetrics.json
+++ b/charts/airlock/microgateway/4.4.1/dashboards/blockMetrics.json
@@ -58,7 +58,7 @@
}
]
},
- "description": "Metrics on requests blocked by Airlock Microgateway.\n\nDashboard can be filtered by namespaces as well as block types.",
+ "description": "Metrics on threats blocked by Airlock Microgateway.\n\nDashboard can be filtered by namespaces as well as block types.",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
@@ -88,7 +88,7 @@
"y": 0
},
"id": 6,
- "title": "Airlock Microgateway Block Metrics",
+ "title": "Airlock Microgateway Threats Block - Metrics",
"type": "row"
},
{
@@ -140,7 +140,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -225,7 +225,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -408,7 +408,7 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Blocked requests by block type.",
+ "description": "Blocked threats by block type.",
"fieldConfig": {
"defaults": {
"color": {
@@ -448,7 +448,7 @@
}
]
},
- "unit": "none"
+ "unit": "short"
},
"overrides": []
},
@@ -482,7 +482,7 @@
"xTickLabelRotation": 0,
"xTickLabelSpacing": 0
},
- "pluginVersion": "10.4.3",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -520,7 +520,7 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Blocked requests by attack type, which are subsets of the various block types.",
+ "description": "Blocked threats by block subtype, which are subsets of the various block types.",
"fieldConfig": {
"defaults": {
"color": {
@@ -557,7 +557,8 @@
"value": null
}
]
- }
+ },
+ "unit": "short"
},
"overrides": []
},
@@ -587,11 +588,11 @@
"mode": "single",
"sort": "none"
},
- "xField": "attack_type",
+ "xField": "block_subtype",
"xTickLabelRotation": 0,
"xTickLabelSpacing": 0
},
- "pluginVersion": "10.4.3",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -600,14 +601,14 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "round(sum by (attack_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
+ "expr": "round(sum by (block_subtype) (increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "A"
}
],
- "title": "Attack Type",
+ "title": "Block Subtype",
"transformations": [
{
"id": "reduce",
@@ -630,11 +631,7 @@
"templating": {
"list": [
{
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "Datasource Prometheus",
@@ -648,11 +645,7 @@
"type": "datasource"
},
{
- "current": {
- "selected": false,
- "text": "Loki",
- "value": "P8E80F9AEF21F6940"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "DS_LOKI",
@@ -751,7 +744,7 @@
"hidden": false
},
"timezone": "browser",
- "title": "Airlock Microgateway Block Metrics",
+ "title": "Airlock Microgateway Threats Block - Metrics",
"uid": "ddnqoczu7qvb4cdd3dd",
"version": 3,
"weekStart": ""
diff --git a/charts/airlock/microgateway/4.3.3/dashboards/blockLogs.json b/charts/airlock/microgateway/4.4.1/dashboards/headerLogs.json
similarity index 55%
rename from charts/airlock/microgateway/4.3.3/dashboards/blockLogs.json
rename to charts/airlock/microgateway/4.4.1/dashboards/headerLogs.json
index ef0ce6d62..a6c45008f 100644
--- a/charts/airlock/microgateway/4.3.3/dashboards/blockLogs.json
+++ b/charts/airlock/microgateway/4.4.1/dashboards/headerLogs.json
@@ -7,14 +7,6 @@
"type": "datasource",
"pluginId": "loki",
"pluginName": "Loki"
- },
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
}
],
"__elements": {},
@@ -60,7 +52,7 @@
}
]
},
- "description": "Blocked requests by Airlock Microgateway retrieved from corresponding access logs.\n\nThe dashboard can be filtered by namespace and block type. Column filters on the table allow for even a more granular filtering of the logs.",
+ "description": "Logs for header rewrites by Airlock Microgateway, retrieved from corresponding access logs.\n\nThe dashboard can be filtered by namespace. Column filters on the table allow for an even more granular filtering of the logs.",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
@@ -84,6 +76,7 @@
"panels": [
{
"datasource": {
+ "default": false,
"type": "loki",
"uid": "${DS_LOKI}"
},
@@ -140,7 +133,7 @@
},
{
"id": "unit",
- "value": "dateTimeAsIso"
+ "value": "time: YYYY-MM-DD HH:mm:ss.SSS"
},
{
"id": "custom.filterable"
@@ -150,12 +143,12 @@
{
"matcher": {
"id": "byName",
- "options": "Method"
+ "options": "HTTP Method"
},
"properties": [
{
"id": "custom.width",
- "value": 89
+ "value": 140
}
]
},
@@ -183,22 +176,6 @@
}
]
},
- {
- "matcher": {
- "id": "byName",
- "options": "Block Type"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 116
- },
- {
- "id": "custom.filterable",
- "value": false
- }
- ]
- },
{
"matcher": {
"id": "byName",
@@ -218,30 +195,6 @@
"value": "right"
}
]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Attack Type"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 217
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Application"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 207
- }
- ]
}
]
},
@@ -266,7 +219,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -274,62 +227,14 @@
"uid": "${DS_LOKI}"
},
"editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_deny_rule\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.deny_rules.matches\"\n| label_format block_type=\"deny_rules\", attack_type=`{{ range $q := fromJson .details }} {{ if eq $q.threat_handling_mode \"block\" }} {{ $q.rule_key }} {{ end }} {{ end }}` | block_type=~\"${blockType:regex}\"",
+ "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"header_rewrites\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", domain=\"url.domain\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", header_request_details=\"airlock.actions.header_rewrites.request\", header_response_details=\"airlock.actions.header_rewrites.response\", log_type=\"event.dataset\" | log_type = `envoy.access`",
"hide": false,
"queryType": "range",
- "refId": "Deny Rule Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_limit\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.limits.matches\"\n| label_format block_type=\"limits\", attack_type=`{{ range $q := fromJson .details }} {{ if eq $q.threat_handling_mode \"block\" }} {{ $q.rule }} {{ end }} {{ end }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Limit Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_openapi\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", reference=\"airlock.openapi.reference\", constraint=\"airlock.openapi.request.failed_validation.constraint\", position=\"airlock.openapi.request.failed_validation.position\", message=\"airlock.openapi.request.failed_validation.message\"\n| label_format block_type=\"openapi\", attack_type=\"openapi\", details=`{{.reference }}: {{.constraint }} at {{ .position }} ({{ .message }})` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "OpenAPI Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_parser\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", attack_type=\"airlock.parser\", failed_check=\"airlock.parser.matches[0].failed_check\", message=\"airlock.parser.matches[0].message\"\n| label_format block_type=\"parsing\", attack_type=\"parsing\", details=`{{.failed_check}}: {{.message}}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Parser Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_graphql\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", reference=\"airlock.graphql.reference\", message=\"airlock.graphql.request.failed_validation.message\"\n| label_format block_type=\"graphql\", attack_type=\"graphql\", details=`{{ .reference }}: {{ .message }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "GraphQL Blocks"
+ "refId": "Header Rewrites"
}
],
- "title": "Blocked Request logs",
+ "title": "Header Rewrite Logs",
"transformations": [
- {
- "id": "merge",
- "options": {}
- },
{
"id": "extractFields",
"options": {
@@ -344,16 +249,15 @@
"include": {
"names": [
"Time",
- "attack_type",
- "block_type",
"client_ip",
- "details",
+ "domain",
+ "header_request_details",
+ "header_response_details",
"http_method",
"namespace",
"request_id",
"request_size",
- "url",
- "pod"
+ "url"
]
}
}
@@ -371,30 +275,28 @@
"includeByName": {},
"indexByName": {
"Time": 0,
- "attack_type": 7,
- "block_type": 6,
- "client_ip": 9,
- "details": 8,
+ "client_ip": 8,
+ "domain": 2,
+ "header_request_details": 6,
+ "header_response_details": 7,
"http_method": 3,
"namespace": 1,
- "pod": 2,
- "request_id": 10,
+ "request_id": 9,
"request_size": 5,
"url": 4
},
"renameByName": {
"Time": "Timestamp",
- "attack_type": "Attack Type",
- "block_type": "Block Type",
"client_ip": "Client IP",
"details": "Details",
- "http_method": "Method",
+ "domain": "URL Domain",
+ "header_request_details": "Request Header Actions",
+ "header_response_details": "Response Header Actions",
+ "http_method": "HTTP Method",
"namespace": "Namespace",
- "pod": "Pod",
"request_id": "Request ID",
"request_size": "Request Size",
- "tsNs": "",
- "url": "Path"
+ "url": "URL Path"
}
}
}
@@ -409,11 +311,7 @@
"templating": {
"list": [
{
- "current": {
- "selected": false,
- "text": "Loki",
- "value": "P8E80F9AEF21F6940"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "DS_LOKI",
@@ -452,36 +350,7 @@
"type": "query"
},
{
- "allValue": ".*",
"current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "hide": 0,
- "includeAll": true,
- "label": "Block Type",
- "multi": true,
- "name": "blockType",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 5,
- "type": "query"
- },
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
"hide": 2,
"includeAll": false,
"label": "DS_PROMETHEUS",
@@ -500,11 +369,10 @@
"from": "now-15m",
"to": "now"
},
- "timeRangeUpdatedDuringEditOrView": false,
"timepicker": {},
"timezone": "browser",
- "title": "Airlock Microgateway Blocked Request Logs",
- "uid": "adnyzcvwnyadcc",
- "version": 3,
+ "title": "Airlock Microgateway Header Rewrites - Logs",
+ "uid": "adnydadenyadcc",
+ "version": 1,
"weekStart": ""
}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.4/dashboards/overview.json b/charts/airlock/microgateway/4.4.1/dashboards/license.json
similarity index 54%
rename from charts/airlock/microgateway/4.3.4/dashboards/overview.json
rename to charts/airlock/microgateway/4.4.1/dashboards/license.json
index 094276621..14886328a 100644
--- a/charts/airlock/microgateway/4.3.4/dashboards/overview.json
+++ b/charts/airlock/microgateway/4.4.1/dashboards/license.json
@@ -58,6 +58,7 @@
}
]
},
+ "description": "Overview on Airlock Microgateway License attributes and usage.",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
@@ -79,246 +80,12 @@
}
],
"panels": [
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 3,
- "title": "Overview",
- "type": "row"
- },
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Number of pods that are protected by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "text",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 0,
- "y": 1
- },
- "id": 11,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(microgateway_sidecars{namespace=~\"${operator_namespace.regex}\"})",
- "instant": true,
- "legendFormat": "Protected Pods",
- "range": false,
- "refId": "A"
- }
- ],
- "title": "Protected Pods",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Total number of requests processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 3,
- "y": 1
- },
- "id": 4,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "format": "time_series",
- "fullMetaSearch": false,
- "hide": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Processed Requests",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Ratio of blocked requests vs. processed requests by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [
- {
- "options": {
- "match": "nan",
- "result": {
- "index": 0,
- "text": "n/a"
- }
- },
- "type": "special"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "percentunit"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 6,
- "y": 1
- },
- "id": 5,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "last"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "sum(increase(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])) / sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range]))",
- "fullMetaSearch": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Blocked Requests (%)",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "% Blocked Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "License status of Airlock Microgateway.",
+ "description": "Aggregated status of the Airlock Microgateway licenses selected in the dashboard filter.",
"fieldConfig": {
"defaults": {
"color": {
@@ -356,15 +123,16 @@
"gridPos": {
"h": 4,
"w": 3,
- "x": 9,
- "y": 1
+ "x": 0,
+ "y": 0
},
- "id": 10,
+ "id": 1,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
+ "percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
@@ -376,7 +144,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -385,33 +153,229 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "min(microgateway_license_valid{namespace=~\"${operator_namespace.regex}\"})",
+ "expr": "min(microgateway_license_valid * on (service,instance) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"})",
"instant": true,
"legendFormat": "License Status",
"range": false,
"refId": "Licenses"
}
],
- "title": "License",
+ "title": "License Status",
"type": "stat"
},
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 5
- },
- "id": 2,
- "title": "Blocks",
- "type": "row"
- },
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Requests per second processed by Airlock Microgateway along with the corresponding block rate.",
+ "description": "Next upcoming expiry date over all Airlock Microgateway licenses selected in the dashboard filter.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "text",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "time: L"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 4,
+ "x": 3,
+ "y": 0
+ },
+ "id": 4,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "min(microgateway_license_expiry_timestamp_seconds * on (service, namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"})*1000",
+ "instant": true,
+ "legendFormat": "Expiry Date (MM/DD/YYYY)",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "License Expiry Date",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Sum of the number licensed requests over all Airlock Microgateway license selected in the dashboard filter.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "text",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 4,
+ "x": 7,
+ "y": 0
+ },
+ "id": 6,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(topk(1, (microgateway_license_max_rq_count_per_month > 0) * on (service, namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"}) by (id))",
+ "instant": true,
+ "legendFormat": "Licensed Requests",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "Licensed Requests",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Sum of the estimated number of requests over 30 days based on the last 7 days over all Airlock Microgateway licenses selected in the dashboard filter.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "text",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 5,
+ "x": 11,
+ "y": 0
+ },
+ "id": 2,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "percentChangeColorMode": "standard",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.2.0",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "(sum((label_replace(increase(microgateway_license_http_rq_total[7d]), \"namespace\", \"$1\", \"job\", \"(.+)/.*\")) * on(namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"}))/7*30",
+ "instant": true,
+ "legendFormat": "Estimated Requests",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "Requests over 30 days (estimated)",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Number of requests per week processed by Airlock Microgateway.",
"fieldConfig": {
"defaults": {
"color": {
@@ -423,8 +387,9 @@
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
- "axisPlacement": "left",
+ "axisPlacement": "auto",
"barAlignment": 0,
+ "barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
@@ -455,65 +420,22 @@
"mode": "absolute",
"steps": [
{
- "color": "blue",
+ "color": "green",
"value": null
}
]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "% Blocks"
- },
- "properties": [
- {
- "id": "custom.axisPlacement",
- "value": "right"
- },
- {
- "id": "unit",
- "value": "percentunit"
- },
- {
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
- },
- {
- "id": "max",
- "value": 1
- }
- ]
},
- {
- "matcher": {
- "id": "byName",
- "options": "Requests per second"
- },
- "properties": [
- {
- "id": "unit",
- "value": "short"
- },
- {
- "id": "custom.fillOpacity",
- "value": 25
- }
- ]
- }
- ]
+ "unit": "short"
+ },
+ "overrides": []
},
"gridPos": {
- "h": 10,
- "w": 12,
+ "h": 13,
+ "w": 24,
"x": 0,
- "y": 6
+ "y": 4
},
- "id": 6,
+ "id": 5,
"options": {
"legend": {
"calcs": [],
@@ -521,9 +443,6 @@
"placement": "bottom",
"showLegend": true
},
- "timezone": [
- ""
- ],
"tooltip": {
"maxHeight": 600,
"mode": "single",
@@ -537,36 +456,24 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
- "exemplar": false,
- "expr": "sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "instant": false,
- "legendFormat": "Requests per second",
- "range": true,
- "refId": "Requests per Second"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(rate(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) / sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
+ "expr": " sum((label_replace(avg_over_time(increase(microgateway_license_http_rq_total[7d])[2m:30s]), \"namespace\", \"$1\", \"job\", \"(.+)/.*\")) * on(namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"})",
"hide": false,
"instant": false,
- "legendFormat": "% Blocks",
+ "legendFormat": "# Requests per week",
"range": true,
- "refId": "Blocks"
+ "refId": "C"
}
],
- "title": "Requests vs. % Blocks",
+ "title": "Processed Requests per week",
"type": "timeseries"
},
{
"datasource": {
+ "default": false,
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Requests blocked by Airlock Microgateway categorized by their corresponding type.",
+ "description": "Estimated number of requests over 30 days based on the last 7 days per operator namespace for the Airlock Microgateway licenses selected in the dashboard filter.",
"fieldConfig": {
"defaults": {
"color": {
@@ -575,26 +482,10 @@
"custom": {
"align": "auto",
"cellOptions": {
- "barAlignment": 0,
- "drawStyle": "line",
- "gradientMode": "none",
- "hideValue": false,
- "lineInterpolation": "linear",
- "lineStyle": {
- "dash": [
- 10,
- 10
- ],
- "fill": "solid"
- },
- "showPoints": "never",
- "spanNulls": false,
- "type": "sparkline"
+ "type": "auto"
},
"inspect": false
},
- "displayName": "Block Type",
- "fieldMinMax": false,
"mappings": [],
"thresholds": {
"mode": "absolute",
@@ -602,6 +493,10 @@
{
"color": "green",
"value": null
+ },
+ {
+ "color": "red",
+ "value": 80
}
]
}
@@ -610,67 +505,78 @@
{
"matcher": {
"id": "byName",
- "options": "block_type"
+ "options": "License ID"
},
"properties": [
{
"id": "custom.width",
- "value": 153
- },
- {
- "id": "custom.cellOptions",
- "value": {
- "type": "auto"
- }
+ "value": 330
}
]
},
{
"matcher": {
"id": "byName",
- "options": "Trend #Block Types"
+ "options": "Requests over 30 days (estimated)"
},
"properties": [
{
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
+ "id": "unit",
+ "value": "short"
+ },
+ {
+ "id": "mappings",
+ "value": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
+ },
+ "type": "special"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Operator Namespace"
+ },
+ "properties": [
+ {
+ "id": "custom.width",
+ "value": 307
}
]
}
]
},
"gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 6
+ "h": 8,
+ "w": 11,
+ "x": 0,
+ "y": 17
},
"id": 7,
"options": {
- "cellHeight": "lg",
+ "cellHeight": "sm",
"footer": {
"countRows": false,
- "enablePagination": false,
- "fields": [
- "Value"
- ],
+ "fields": "",
"reducer": [
"sum"
],
"show": false
},
- "showHeader": false,
- "sortBy": [
- {
- "desc": true,
- "displayName": "block_type"
- }
- ]
+ "frameIndex": 1,
+ "showHeader": true,
+ "sortBy": []
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -678,84 +584,91 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
- "expr": "sum by (block_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m] offset -1m))/(60000/$__interval_ms)",
- "format": "time_series",
- "instant": false,
+ "exemplar": false,
+ "expr": "(sum by (namespace, id) ((label_replace(increase(microgateway_license_http_rq_total[7d]), \"namespace\", \"$1\", \"job\", \"(.+)/.*\")) * on(namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"}))/7*30",
+ "format": "table",
+ "hide": false,
+ "instant": true,
"legendFormat": "__auto",
- "range": true,
- "refId": "Block Types"
+ "range": false,
+ "refId": "Est. Usage over 30 days"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "(min by(namespace) (microgateway_build_info{container=\"manager\"})) * on (namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"}",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "Engine License"
}
],
- "title": "Blocked Requests by Type",
+ "title": "Usage by Operator Namespace",
"transformations": [
{
- "id": "timeSeriesTable",
+ "id": "merge",
+ "options": {}
+ },
+ {
+ "id": "organize",
"options": {
- "A": {
- "timeField": "Time"
+ "excludeByName": {
+ "Time": true,
+ "Value #Engine License": true,
+ "Value #Licensed Req": false,
+ "container": true,
+ "endpoint": true,
+ "instance": true,
+ "job": true,
+ "namespace": false,
+ "pod": true,
+ "service": true,
+ "version": true
},
- "Block Types": {
- "stat": "sum",
- "timeField": "Time"
+ "includeByName": {},
+ "indexByName": {
+ "Time": 0,
+ "Value": 3,
+ "id": 2,
+ "namespace": 1
+ },
+ "renameByName": {
+ "Value #Est. Usage over 30 days": "Requests over 30 days (estimated)",
+ "Value #License Expiry Date": "Expiry Date",
+ "Value #License Type": "License Type",
+ "Value #Licensed Req": "Licensed Requests",
+ "Value #Validity": "Valid",
+ "id": "License ID",
+ "namespace": "Operator Namespace"
}
}
}
],
"type": "table"
},
- {
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 16
- },
- "id": 1,
- "title": "Latency",
- "type": "row"
- },
{
"datasource": {
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Percentiles of the application downstream latency over one minute.",
+ "description": "Metadata for the Airlock Microgateway licenses selected in the dashboard filter.",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "palette-classic"
+ "mode": "thresholds"
},
"custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
},
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
+ "inspect": false
},
"mappings": [],
"thresholds": {
@@ -764,245 +677,198 @@
{
"color": "green",
"value": null
+ },
+ {
+ "color": "red",
+ "value": 80
}
]
- },
- "unit": "ms"
+ }
},
"overrides": [
{
"matcher": {
"id": "byName",
- "options": "25th Percentile"
+ "options": "License ID"
},
"properties": [
{
- "id": "color",
- "value": {
- "fixedColor": "super-light-purple",
- "mode": "fixed"
- }
+ "id": "custom.width",
+ "value": 321
}
]
},
{
"matcher": {
"id": "byName",
- "options": "50th Percentile"
+ "options": "Valid"
},
"properties": [
{
- "id": "color",
- "value": {
- "fixedColor": "purple",
- "mode": "fixed"
- }
+ "id": "mappings",
+ "value": [
+ {
+ "options": {
+ "0": {
+ "color": "red",
+ "index": 1,
+ "text": "Invalid"
+ },
+ "1": {
+ "color": "green",
+ "index": 0,
+ "text": "Valid"
+ }
+ },
+ "type": "value"
+ },
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "color": "red",
+ "index": 2,
+ "text": "Invalid"
+ }
+ },
+ "type": "special"
+ }
+ ]
+ },
+ {
+ "id": "custom.width",
+ "value": 65
}
]
},
{
"matcher": {
"id": "byName",
- "options": "95th Percentile"
+ "options": "License Type"
},
"properties": [
{
- "id": "color",
- "value": {
- "fixedColor": "dark-purple",
- "mode": "fixed"
- }
+ "id": "mappings",
+ "value": [
+ {
+ "options": {
+ "0": {
+ "index": 1,
+ "text": "Community"
+ },
+ "1": {
+ "index": 0,
+ "text": "Premium"
+ }
+ },
+ "type": "value"
+ },
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 2,
+ "text": "n/a"
+ }
+ },
+ "type": "special"
+ }
+ ]
+ },
+ {
+ "id": "custom.width",
+ "value": 109
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Expiry Date"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "time:L"
+ },
+ {
+ "id": "custom.width",
+ "value": 130
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Requests over 30 days (estimated)"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "short"
+ },
+ {
+ "id": "mappings",
+ "value": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
+ },
+ "type": "special"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Licensed Requests"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "short"
+ },
+ {
+ "id": "custom.width",
+ "value": 160
}
]
}
]
},
"gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
+ "h": 8,
+ "w": 13,
+ "x": 11,
"y": 17
},
"id": 8,
"options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
},
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.25, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "instant": false,
- "legendFormat": "25th Percentile",
- "range": true,
- "refId": "25th Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.5, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "50th Percentile",
- "range": true,
- "refId": "50th Percentile"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "histogram_quantile(0.95, sum(rate(envoy_http_downstream_rq_time_bucket{envoy_http_conn_manager_prefix=\"http\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "hide": false,
- "instant": false,
- "legendFormat": "95th Percentile",
- "range": true,
- "refId": "95th Percentile"
- }
- ],
- "title": "Application Downstream Latency",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Percentiles of the Airlock Microgateway processing time over one minute.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "ms"
- },
- "overrides": [
+ "frameIndex": 1,
+ "showHeader": true,
+ "sortBy": [
{
- "matcher": {
- "id": "byName",
- "options": "25th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "super-light-purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "50th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "purple",
- "mode": "fixed"
- }
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "95th Percentile"
- },
- "properties": [
- {
- "id": "color",
- "value": {
- "fixedColor": "dark-purple",
- "mode": "fixed"
- }
- }
- ]
+ "desc": false,
+ "displayName": "Expiry Date"
}
]
},
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 17
- },
- "id": 9,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "maxHeight": 600,
- "mode": "single",
- "sort": "none"
- }
- },
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -1010,11 +876,13 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
- "expr": "histogram_quantile(0.25, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
- "instant": false,
- "legendFormat": "25th Percentile",
- "range": true,
- "refId": "0.25 Percentile"
+ "exemplar": false,
+ "expr": "min by (id) (microgateway_license_valid * on (service, namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"})",
+ "format": "table",
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "Validity"
},
{
"datasource": {
@@ -1022,12 +890,14 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
- "expr": "histogram_quantile(0.5, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
+ "exemplar": false,
+ "expr": "topk(1,microgateway_license_max_rq_count_per_month * on (service, namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"})by (id)",
+ "format": "table",
"hide": false,
- "instant": false,
- "legendFormat": "50th Percentile",
- "range": true,
- "refId": "0.5 Percentile"
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "Licensed Req"
},
{
"datasource": {
@@ -1035,16 +905,99 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
- "expr": "histogram_quantile(0.95, sum(rate(microgateway_rq_processing_time_ms_bucket{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) by (le))",
+ "exemplar": false,
+ "expr": "min by (id) (microgateway_license_is_premium * on (service, namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"})",
+ "format": "table",
"hide": false,
- "instant": false,
- "legendFormat": "95th Percentile",
- "range": true,
- "refId": "0.95 Percentile"
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "License Type"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "min by (id) (microgateway_license_expiry_timestamp_seconds * on (service, namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"})*1000",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "License Expiry Date"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "(sum by (id) ((label_replace(increase(microgateway_license_http_rq_total[7d]), \"namespace\", \"$1\", \"job\", \"(.+)/.*\")) * on(namespace) group_left(id) microgateway_license_info{id=~\"${license_id.regex}\"}))/7*30",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "Est. Usage over 30 days"
}
],
- "title": "Airlock Microgateway Processing Time",
- "type": "timeseries"
+ "title": "License Overview",
+ "transformations": [
+ {
+ "id": "merge",
+ "options": {}
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Value #Licensed Req": false,
+ "container": true,
+ "endpoint": true,
+ "instance": true,
+ "job": true,
+ "namespace": true,
+ "pod": true,
+ "service": true
+ },
+ "includeByName": {},
+ "indexByName": {},
+ "renameByName": {
+ "Value #Est. Usage over 30 days": "Requests over 30 days (estimated)",
+ "Value #License Expiry Date": "Expiry Date",
+ "Value #License Type": "License Type",
+ "Value #Licensed Req": "Licensed Requests",
+ "Value #Validity": "Valid",
+ "id": "License ID",
+ "namespace": "Operator Namespace"
+ }
+ }
+ },
+ {
+ "id": "filterByValue",
+ "options": {
+ "filters": [
+ {
+ "config": {
+ "id": "equal",
+ "options": {
+ "value": ""
+ }
+ },
+ "fieldName": "License ID"
+ }
+ ],
+ "match": "any",
+ "type": "exclude"
+ }
+ }
+ ],
+ "type": "table"
}
],
"refresh": "",
@@ -1055,11 +1008,7 @@
"templating": {
"list": [
{
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "DS_PROMETHEUS",
@@ -1079,41 +1028,17 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "definition": "label_values(microgateway_license_valid,namespace)",
+ "definition": "label_values(microgateway_license_info,id)",
+ "description": "",
"hide": 0,
"includeAll": true,
- "label": "Operator Namespace",
+ "label": "License ID",
"multi": true,
- "name": "operator_namespace",
+ "name": "license_id",
"options": [],
"query": {
"qryType": 1,
- "query": "label_values(microgateway_license_valid,namespace)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": ".*",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- },
- {
- "allValue": ".*",
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_license_http_rq_total,namespace)",
- "hide": 0,
- "includeAll": true,
- "label": "Application Namespace",
- "multi": true,
- "name": "namespace",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_license_http_rq_total,namespace)",
+ "query": "label_values(microgateway_license_info,id)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 2,
@@ -1125,14 +1050,14 @@
]
},
"time": {
- "from": "now-24h",
+ "from": "now-7d",
"to": "now"
},
"timeRangeUpdatedDuringEditOrView": false,
"timepicker": {},
"timezone": "browser",
- "title": "Airlock Microgateway Overview",
- "uid": "fdp5jb8fnrmyoa",
- "version": 1,
+ "title": "Airlock Microgateway License",
+ "uid": "cdpq79bzrr01se",
+ "version": 2,
"weekStart": ""
}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/dashboards/blockLogs.json b/charts/airlock/microgateway/4.4.1/dashboards/logOnlyLogs.json
similarity index 55%
rename from charts/airlock/microgateway/4.3.1/dashboards/blockLogs.json
rename to charts/airlock/microgateway/4.4.1/dashboards/logOnlyLogs.json
index ef0ce6d62..6d7ae7f22 100644
--- a/charts/airlock/microgateway/4.3.1/dashboards/blockLogs.json
+++ b/charts/airlock/microgateway/4.4.1/dashboards/logOnlyLogs.json
@@ -60,7 +60,7 @@
}
]
},
- "description": "Blocked requests by Airlock Microgateway retrieved from corresponding access logs.\n\nThe dashboard can be filtered by namespace and block type. Column filters on the table allow for even a more granular filtering of the logs.",
+ "description": "Log entries of threats logged in log-only mode by Airlock Microgateway.\n\nThe dashboard can be filtered by namespace. Column filters on the table allow for an even more granular filtering of the logs.",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
@@ -84,6 +84,7 @@
"panels": [
{
"datasource": {
+ "default": false,
"type": "loki",
"uid": "${DS_LOKI}"
},
@@ -121,7 +122,7 @@
"properties": [
{
"id": "custom.width",
- "value": 221
+ "value": 328
},
{
"id": "custom.filterable"
@@ -136,11 +137,11 @@
"properties": [
{
"id": "custom.width",
- "value": 214
+ "value": 176
},
{
"id": "unit",
- "value": "dateTimeAsIso"
+ "value": "time: YYYY-MM-DD HH:mm:ss.SSS"
},
{
"id": "custom.filterable"
@@ -150,12 +151,12 @@
{
"matcher": {
"id": "byName",
- "options": "Method"
+ "options": "HTTP Method"
},
"properties": [
{
"id": "custom.width",
- "value": 89
+ "value": 132
}
]
},
@@ -167,7 +168,7 @@
"properties": [
{
"id": "custom.width",
- "value": 138
+ "value": 137
}
]
},
@@ -183,22 +184,6 @@
}
]
},
- {
- "matcher": {
- "id": "byName",
- "options": "Block Type"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 116
- },
- {
- "id": "custom.filterable",
- "value": false
- }
- ]
- },
{
"matcher": {
"id": "byName",
@@ -218,30 +203,6 @@
"value": "right"
}
]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Attack Type"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 217
- }
- ]
- },
- {
- "matcher": {
- "id": "byName",
- "options": "Application"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 207
- }
- ]
}
]
},
@@ -266,7 +227,7 @@
"showHeader": true,
"sortBy": []
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -274,62 +235,14 @@
"uid": "${DS_LOKI}"
},
"editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_deny_rule\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.deny_rules.matches\"\n| label_format block_type=\"deny_rules\", attack_type=`{{ range $q := fromJson .details }} {{ if eq $q.threat_handling_mode \"block\" }} {{ $q.rule_key }} {{ end }} {{ end }}` | block_type=~\"${blockType:regex}\"",
+ "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= `log_only` |= `envoy.access` | json http_method=\"http.request.method\", url=\"url.path\", domain=\"url.domain\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.actions.log_only\", log_type=\"event.dataset\" | label_format log_count=`{{ len (fromJson .details) }}` | log_type = `envoy.access` | log_count > 0",
"hide": false,
"queryType": "range",
- "refId": "Deny Rule Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_limit\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", details=\"airlock.limits.matches\"\n| label_format block_type=\"limits\", attack_type=`{{ range $q := fromJson .details }} {{ if eq $q.threat_handling_mode \"block\" }} {{ $q.rule }} {{ end }} {{ end }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Limit Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_openapi\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", reference=\"airlock.openapi.reference\", constraint=\"airlock.openapi.request.failed_validation.constraint\", position=\"airlock.openapi.request.failed_validation.position\", message=\"airlock.openapi.request.failed_validation.message\"\n| label_format block_type=\"openapi\", attack_type=\"openapi\", details=`{{.reference }}: {{.constraint }} at {{ .position }} ({{ .message }})` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "OpenAPI Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_parser\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", attack_type=\"airlock.parser\", failed_check=\"airlock.parser.matches[0].failed_check\", message=\"airlock.parser.matches[0].message\"\n| label_format block_type=\"parsing\", attack_type=\"parsing\", details=`{{.failed_check}}: {{.message}}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "Parser Blocks"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "editorMode": "code",
- "expr": "{container=\"airlock-microgateway-engine\", namespace=~\"${namespace:regex}\"} |= \"airlock_request_blocked_graphql\" |= \"envoy.access\"\n| json http_method=\"http.request.method\", url=\"url.path\", request_size=\"http.request.bytes\", client_ip=\"network.forwarded_ip\", request_id=\"http.request.id\", reference=\"airlock.graphql.reference\", message=\"airlock.graphql.request.failed_validation.message\"\n| label_format block_type=\"graphql\", attack_type=\"graphql\", details=`{{ .reference }}: {{ .message }}` | block_type=~\"${blockType:regex}\"",
- "hide": false,
- "queryType": "range",
- "refId": "GraphQL Blocks"
+ "refId": "Log Only Logs"
}
],
- "title": "Blocked Request logs",
+ "title": "Threats Logs Log-Only",
"transformations": [
- {
- "id": "merge",
- "options": {}
- },
{
"id": "extractFields",
"options": {
@@ -344,16 +257,14 @@
"include": {
"names": [
"Time",
- "attack_type",
- "block_type",
"client_ip",
"details",
+ "domain",
"http_method",
"namespace",
"request_id",
"request_size",
- "url",
- "pod"
+ "url"
]
}
}
@@ -371,30 +282,25 @@
"includeByName": {},
"indexByName": {
"Time": 0,
- "attack_type": 7,
- "block_type": 6,
- "client_ip": 9,
- "details": 8,
- "http_method": 3,
+ "client_ip": 8,
+ "details": 7,
+ "domain": 2,
+ "http_method": 4,
"namespace": 1,
- "pod": 2,
- "request_id": 10,
- "request_size": 5,
- "url": 4
+ "request_id": 9,
+ "request_size": 6,
+ "url": 5
},
"renameByName": {
"Time": "Timestamp",
- "attack_type": "Attack Type",
- "block_type": "Block Type",
"client_ip": "Client IP",
"details": "Details",
- "http_method": "Method",
+ "domain": "URL Domain",
+ "http_method": "HTTP Method",
"namespace": "Namespace",
- "pod": "Pod",
"request_id": "Request ID",
"request_size": "Request Size",
- "tsNs": "",
- "url": "Path"
+ "url": "URL Path"
}
}
}
@@ -409,11 +315,7 @@
"templating": {
"list": [
{
- "current": {
- "selected": false,
- "text": "Loki",
- "value": "P8E80F9AEF21F6940"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "DS_LOKI",
@@ -452,36 +354,7 @@
"type": "query"
},
{
- "allValue": ".*",
"current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "hide": 0,
- "includeAll": true,
- "label": "Block Type",
- "multi": true,
- "name": "blockType",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 2,
- "regex": "",
- "skipUrlSync": false,
- "sort": 5,
- "type": "query"
- },
- {
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
"hide": 2,
"includeAll": false,
"label": "DS_PROMETHEUS",
@@ -500,11 +373,10 @@
"from": "now-15m",
"to": "now"
},
- "timeRangeUpdatedDuringEditOrView": false,
"timepicker": {},
"timezone": "browser",
- "title": "Airlock Microgateway Blocked Request Logs",
- "uid": "adnyzcvwnyadcc",
- "version": 3,
+ "title": "Airlock Microgateway Threats LogOnly - Logs",
+ "uid": "adnasdfdwnyadcc",
+ "version": 7,
"weekStart": ""
}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.1/dashboards/blockMetrics.json b/charts/airlock/microgateway/4.4.1/dashboards/logOnlyMetrics.json
similarity index 70%
rename from charts/airlock/microgateway/4.3.1/dashboards/blockMetrics.json
rename to charts/airlock/microgateway/4.4.1/dashboards/logOnlyMetrics.json
index ba383d22e..137e28ee0 100644
--- a/charts/airlock/microgateway/4.3.1/dashboards/blockMetrics.json
+++ b/charts/airlock/microgateway/4.4.1/dashboards/logOnlyMetrics.json
@@ -58,7 +58,7 @@
}
]
},
- "description": "Metrics on requests blocked by Airlock Microgateway.\n\nDashboard can be filtered by namespaces as well as block types.",
+ "description": "Metrics on threats logged by Airlock Microgateway in threat handling mode LogOnly.\n\nDashboard can be filtered by namespaces as well as block types.",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
@@ -88,7 +88,7 @@
"y": 0
},
"id": 6,
- "title": "Airlock Microgateway Block Metrics",
+ "title": "Airlock Microgateway Threats LogOnly - Metrics",
"type": "row"
},
{
@@ -96,81 +96,7 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Total number of requests processed by Airlock Microgateway.",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 4,
- "x": 0,
- "y": 1
- },
- "id": 1,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "11.0.0",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "exemplar": false,
- "expr": "round(sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
- "format": "time_series",
- "fullMetaSearch": false,
- "hide": false,
- "includeNullMetadata": true,
- "instant": true,
- "legendFormat": "Processed Requests",
- "range": false,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Requests",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "Ratio of blocked requests vs. processed requests by Airlock Microgateway.",
+ "description": "Number of threats logged by Airlock Microgateway in threat handling mode LogOnly.",
"fieldConfig": {
"defaults": {
"color": {
@@ -198,14 +124,14 @@
}
]
},
- "unit": "percentunit"
+ "unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
- "x": 4,
+ "x": 0,
"y": 1
},
"id": 2,
@@ -214,6 +140,7 @@
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
+ "percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"last"
@@ -225,7 +152,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -235,17 +162,17 @@
"disableTextWrap": false,
"editorMode": "code",
"exemplar": false,
- "expr": "sum(increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])) / sum(increase(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range]))",
+ "expr": "round(sum(increase(microgateway_http_downstream_rq_threats_logged_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": true,
- "legendFormat": "Blocked Requests (%)",
+ "legendFormat": "Logged threats in LogOnly mode",
"range": false,
"refId": "A",
"useBackend": false
}
],
- "title": "% Blocked Requests",
+ "title": "Threats - LogOnly",
"type": "stat"
},
{
@@ -253,11 +180,11 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Requests per second processed by Airlock Microgateway along with the corresponding block rate.",
+ "description": "Number of threats per second handled in LogOnly mode.",
"fieldConfig": {
"defaults": {
"color": {
- "fixedColor": "blue",
+ "fixedColor": "orange",
"mode": "fixed"
},
"custom": {
@@ -268,7 +195,7 @@
"axisPlacement": "left",
"barAlignment": 0,
"drawStyle": "line",
- "fillOpacity": 0,
+ "fillOpacity": 25,
"gradientMode": "none",
"hideFrom": {
"legend": false,
@@ -301,53 +228,10 @@
"value": null
}
]
- }
- },
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "% Blocks"
- },
- "properties": [
- {
- "id": "custom.axisPlacement",
- "value": "right"
- },
- {
- "id": "unit",
- "value": "percentunit"
- },
- {
- "id": "color",
- "value": {
- "fixedColor": "orange",
- "mode": "fixed"
- }
- },
- {
- "id": "max",
- "value": 1
- }
- ]
},
- {
- "matcher": {
- "id": "byName",
- "options": "Requests per second"
- },
- "properties": [
- {
- "id": "unit",
- "value": "short"
- },
- {
- "id": "custom.fillOpacity",
- "value": 25
- }
- ]
- }
- ]
+ "unit": "short"
+ },
+ "overrides": []
},
"gridPos": {
"h": 10,
@@ -380,27 +264,14 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
+ "expr": "sum(rate(microgateway_http_downstream_rq_threats_logged_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
"instant": false,
- "legendFormat": "Requests per second",
+ "legendFormat": "Number of threats per second",
"range": true,
- "refId": "Requests per Second"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "sum(rate(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m])) / sum(rate(microgateway_license_http_rq_total{namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[1m]))",
- "hide": false,
- "instant": false,
- "legendFormat": "% Blocks",
- "range": true,
- "refId": "Blocks"
+ "refId": "LogOnly Events"
}
],
- "title": "Requests vs. % Blocks",
+ "title": "Threats - LogOnly",
"type": "timeseries"
},
{
@@ -408,7 +279,7 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Blocked requests by block type.",
+ "description": "Number of threats in LogOnly mode by block type.",
"fieldConfig": {
"defaults": {
"color": {
@@ -448,7 +319,7 @@
}
]
},
- "unit": "none"
+ "unit": "short"
},
"overrides": []
},
@@ -482,7 +353,7 @@
"xTickLabelRotation": 0,
"xTickLabelSpacing": 0
},
- "pluginVersion": "10.4.3",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -491,7 +362,7 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "round(sum by (block_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
+ "expr": "round(sum by (block_type) (increase(microgateway_http_downstream_rq_threats_logged_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
"format": "time_series",
"instant": true,
"legendFormat": "__auto",
@@ -520,7 +391,7 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Blocked requests by attack type, which are subsets of the various block types.",
+ "description": "Number of threats in LogOnly mode by block subtype, which are subsets of the various block types.",
"fieldConfig": {
"defaults": {
"color": {
@@ -557,7 +428,8 @@
"value": null
}
]
- }
+ },
+ "unit": "short"
},
"overrides": []
},
@@ -587,11 +459,11 @@
"mode": "single",
"sort": "none"
},
- "xField": "attack_type",
+ "xField": "block_subtype",
"xTickLabelRotation": 0,
"xTickLabelSpacing": 0
},
- "pluginVersion": "10.4.3",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -600,14 +472,14 @@
},
"editorMode": "code",
"exemplar": false,
- "expr": "round(sum by (attack_type) (increase(microgateway_http_downstream_rq_threats_blocked_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
+ "expr": "round(sum by (block_subtype) (increase(microgateway_http_downstream_rq_threats_logged_total{block_type=~\"${blockType:regex}\", namespace=~\"${namespace:regex}\", job=~\"${operator_namespace.regex}/.*-engine\"}[$__range])))",
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "A"
}
],
- "title": "Attack Type",
+ "title": "Block Subtype",
"transformations": [
{
"id": "reduce",
@@ -630,11 +502,7 @@
"templating": {
"list": [
{
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "Datasource Prometheus",
@@ -648,11 +516,7 @@
"type": "datasource"
},
{
- "current": {
- "selected": false,
- "text": "Loki",
- "value": "P8E80F9AEF21F6940"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "DS_LOKI",
@@ -722,7 +586,7 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "definition": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
+ "definition": "label_values(microgateway_http_downstream_rq_threats_logged_total,block_type)",
"hide": 0,
"includeAll": true,
"label": "Block Type",
@@ -731,7 +595,7 @@
"options": [],
"query": {
"qryType": 1,
- "query": "label_values(microgateway_http_downstream_rq_threats_blocked_total,block_type)",
+ "query": "label_values(microgateway_http_downstream_rq_threats_logged_total,block_type)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 2,
@@ -746,13 +610,12 @@
"from": "now-24h",
"to": "now"
},
- "timeRangeUpdatedDuringEditOrView": false,
"timepicker": {
"hidden": false
},
"timezone": "browser",
- "title": "Airlock Microgateway Block Metrics",
- "uid": "ddnqoczu7qvb4cdd3dd",
- "version": 3,
+ "title": "Airlock Microgateway Threats LogOnly - Metrics",
+ "uid": "ddnqoczu7qv2mfmsd3dd",
+ "version": 1,
"weekStart": ""
}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.3/dashboards/overview.json b/charts/airlock/microgateway/4.4.1/dashboards/overview.json
similarity index 98%
rename from charts/airlock/microgateway/4.3.3/dashboards/overview.json
rename to charts/airlock/microgateway/4.4.1/dashboards/overview.json
index 094276621..8a9c913b0 100644
--- a/charts/airlock/microgateway/4.3.3/dashboards/overview.json
+++ b/charts/airlock/microgateway/4.4.1/dashboards/overview.json
@@ -137,7 +137,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -205,7 +205,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -290,7 +290,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -376,7 +376,7 @@
"textMode": "auto",
"wideLayout": true
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -566,7 +566,7 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
- "description": "Requests blocked by Airlock Microgateway categorized by their corresponding type.",
+ "description": "Threats blocked by Airlock Microgateway categorized by their corresponding block type.",
"fieldConfig": {
"defaults": {
"color": {
@@ -670,7 +670,7 @@
}
]
},
- "pluginVersion": "11.0.0",
+ "pluginVersion": "10.2.0",
"targets": [
{
"datasource": {
@@ -686,7 +686,7 @@
"refId": "Block Types"
}
],
- "title": "Blocked Requests by Type",
+ "title": "Blocked Threats by Block Type",
"transformations": [
{
"id": "timeSeriesTable",
@@ -1055,11 +1055,7 @@
"templating": {
"list": [
{
- "current": {
- "selected": false,
- "text": "Prometheus",
- "value": "PBFA97CFB590B2093"
- },
+ "current": {},
"hide": 2,
"includeAll": false,
"label": "DS_PROMETHEUS",
diff --git a/charts/airlock/microgateway/4.4.1/templates/NOTES.txt b/charts/airlock/microgateway/4.4.1/templates/NOTES.txt
new file mode 100644
index 000000000..a607483f9
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/templates/NOTES.txt
@@ -0,0 +1,61 @@
+Thank you for installing Airlock Microgateway.
+{{- if .Values.operator.gatewayAPI.enabled }}
+
+K8s Gateway API support enabled.
+Note that the K8s Gateway API support is an incubating Airlock Microgateway feature. We encourage you to try the installation and configuration for testing and evaluation. Your feedback is welcome.
+
+ {{- if or .Values.operator.watchNamespaces .Values.operator.watchNamespaceSelector -}}
+ {{- fail `
+
+K8s Gateway API is only supported using the 'AllNamespaces' installation mode type, ensure that 'operator.watchNamespaces' and 'operator.watchNamespaceSelector' are not configured.
+`
+ -}}
+ {{- end -}}
+{{- end }}
+
+Please ensure the following prerequisites are fulfilled:
+* cert-manager is installed.
+ https://cert-manager.io/docs/installation/helm/
+* A valid Airlock Microgateway license is deployed in the Kubernetes secret '{{ .Release.Namespace }}/{{ .Values.license.secretName }}'
+ * Get a free Community license: https://airlock.com/en/microgateway-community
+ * Order a Premium license: https://airlock.com/en/microgateway-premium
+* Airlock Microgateway CNI is installed on the cluster, when running data plane mode sidecar
+ https://artifacthub.io/packages/helm/airlock-microgateway-cni/microgateway-cni.
+ For more information about data plane modes, see https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" . }}/#data/1660804709650.html
+
+Further information:
+* Documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" . }}
+* CRD API reference documentation: https://docs.airlock.com/microgateway/{{ include "airlock-microgateway.docsVersion" . }}/api/crds
+* Airlock Microgateway Labs: https://play.instruqt.com/airlock/invite/hyi9fy4b4jzc?icp_referrer=helm
+{{- if .Values.crds.skipVersionCheck }}
+
+Warning: CRD version check skipped
+{{- else -}}
+{{- $outdatedCRDs := (include "airlock-microgateway.outdatedCRDs" .) -}}
+{{- if $outdatedCRDs -}}
+ {{- fail (printf `
+
+Helm does not automatically upgrade CRDs from the chart's 'crds/' directory during 'helm install/upgrade'.
+Therefore, the CRDs must be manually upgraded with the following command before deploying this chart:
+
+kubectl apply -k https://github.com/airlock/microgateway/deploy/charts/airlock-microgateway/crds/?ref=%s --server-side --force-conflicts
+
+If you are not using the helm install/upgrade command and instead rely on some other mechanism which is able to upgrade CRDs for deploying this chart, you can suppress this error by setting the helm value 'crds.skipVersionCheck=true'.`
+ .Chart.AppVersion)
+ -}}
+{{- end -}}
+{{- end -}}
+{{- if .Values.tests.enabled -}}
+ {{- if .Values.operator.watchNamespaces -}}
+ {{- if not (has .Release.Namespace .Values.operator.watchNamespaces) -}}
+ {{- fail (printf `
+
+To execute 'helm test', it is necessary that the release namespace '%s' is part of the operator's watch scope. Either disable the tests or ensure that the release namespace is added to watch namspace list ('operator.watchNamespaces') in the helm values.
+`
+ .Release.Namespace)
+ -}}
+ {{- end -}}
+ {{- end -}}
+{{- end }}
+
+Your release version is {{ .Chart.Version }}.
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.4.1/templates/_helpers.tpl b/charts/airlock/microgateway/4.4.1/templates/_helpers.tpl
new file mode 100644
index 000000000..733ba9648
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/templates/_helpers.tpl
@@ -0,0 +1,153 @@
+{{/*
+Expand the name of the chart.
+We truncate at 49 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
+and the longest explicit suffix is 14 characters.
+*/}}
+{{- define "airlock-microgateway.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 49 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Convert an image configuration object into an image ref string.
+*/}}
+{{- define "airlock-microgateway.image" -}}
+ {{- if .digest -}}
+ {{- printf "%s@%s" .repository .digest -}}
+ {{- else if .tag -}}
+ {{- printf "%s:%s" .repository .tag -}}
+ {{- else -}}
+ {{- printf "%s" .repository -}}
+ {{- end -}}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 36 chars because some Kubernetes name fields are limited to 63 chars (by the DNS naming spec)
+and the longest implicit suffix is 27 characters.
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "airlock-microgateway.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 36 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 36 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 36 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "airlock-microgateway.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "airlock-microgateway.sharedLabels" -}}
+helm.sh/chart: {{ include "airlock-microgateway.chart" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+app.kubernetes.io/part-of: {{ .Chart.Name }}
+{{- with .Values.commonLabels }}
+{{ toYaml .}}
+{{- end }}
+{{- end }}
+
+{{/*
+Common Selector labels
+*/}}
+{{- define "airlock-microgateway.sharedSelectorLabels" -}}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Restricted Container Security Context
+*/}}
+{{- define "airlock-microgateway.restrictedSecurityContext" -}}
+allowPrivilegeEscalation: false
+privileged: false
+runAsNonRoot: true
+capabilities:
+ drop: ["ALL"]
+readOnlyRootFilesystem: true
+seccompProfile:
+ type: RuntimeDefault
+{{- end }}
+
+{{/* Precondition: May only be used if AppVersion is isSemver */}}
+{{- define "airlock-microgateway.supportedCRDVersionPattern" -}}
+{{- $version := (semver .Chart.AppVersion) -}}
+{{- if $version.Prerelease -}}
+>= {{ $version.Major }}.{{ $version.Minor }}.{{ $version.Patch }}-{{ $version.Prerelease }}
+{{- else -}}
+>= {{ $version.Major }}.{{ $version.Minor }}.0 || >= {{ $version.Major }}.{{ $version.Minor }}.{{ add1 $version.Patch }}-0
+{{- end -}}
+{{- end -}}
+
+{{- define "airlock-microgateway.outdatedCRDs" -}}
+{{- if (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) -}}
+ {{- $supportedVersion := (include "airlock-microgateway.supportedCRDVersionPattern" .) -}}
+ {{- range $path, $_ := .Files.Glob "crds/*.yaml" -}}
+ {{- $api := ($.Files.Get $path | fromYaml).metadata.name -}}
+ {{- $crd := (lookup "apiextensions.k8s.io/v1" "CustomResourceDefinition" "" $api) -}}
+ {{- $isOutdated := false -}}
+ {{- if $crd -}}
+ {{/* If CRD is already present in the cluster, it must have the minimum supported version */}}
+ {{- $isOutdated = true -}}
+ {{- if hasKey $crd.metadata "labels" -}}
+ {{- $crdVersion := get $crd.metadata.labels "app.kubernetes.io/version" -}}
+ {{- if (eq "true" (include "airlock-microgateway.isSemver" $crdVersion)) -}}
+ {{- if (semverCompare $supportedVersion $crdVersion) }}
+ {{- $isOutdated = false -}}
+ {{- end }}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+ {{- if $isOutdated }}
+{{ base $path }}
+ {{- end }}
+ {{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{- define "airlock-microgateway.isSemver" -}}
+{{- regexMatch `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` . -}}
+{{- end -}}
+
+{{- define "airlock-microgateway.docsVersion" -}}
+{{- if and (eq "true" (include "airlock-microgateway.isSemver" .Chart.AppVersion)) (not (contains "-" .Chart.AppVersion)) -}}
+ {{- $version := (semver .Chart.AppVersion) -}}
+ {{- $version.Major }}.{{ $version.Minor -}}
+{{- else -}}
+ {{- print "latest" -}}
+{{- end -}}
+{{- end -}}
+
+{{- define "airlock-microgateway.watchNamespaceSelector.labelQuery" -}}
+{{- $list := list -}}
+{{- with .matchLabels -}}
+ {{- range $key, $value := . -}}
+ {{- $list = append $list (printf "%s=%s" $key $value) -}}
+ {{- end -}}
+{{- end -}}
+{{- with .matchExpressions -}}
+ {{- range . -}}
+ {{- if has .operator (list "In" "NotIn") -}}
+ {{- $list = append $list (printf "%s %s (%s)" .key (lower .operator) (join "," .values)) -}}
+ {{- else if eq .operator "Exists" -}}
+ {{- $list = append $list .key -}}
+ {{- else if eq .operator "DoesNotExist" -}}
+ {{- $list = append $list (printf "!%s" .key) -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+{{- join "," $list -}}
+{{- end -}}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/_operator_helpers.tpl b/charts/airlock/microgateway/4.4.1/templates/operator/_operator_helpers.tpl
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/_operator_helpers.tpl
rename to charts/airlock/microgateway/4.4.1/templates/operator/_operator_helpers.tpl
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/_rbac.gen.tpl b/charts/airlock/microgateway/4.4.1/templates/operator/_rbac.gen.tpl
similarity index 73%
rename from charts/airlock/microgateway/4.2.3/templates/operator/_rbac.gen.tpl
rename to charts/airlock/microgateway/4.4.1/templates/operator/_rbac.gen.tpl
index 528f72bc6..faa078b6b 100644
--- a/charts/airlock/microgateway/4.2.3/templates/operator/_rbac.gen.tpl
+++ b/charts/airlock/microgateway/4.4.1/templates/operator/_rbac.gen.tpl
@@ -8,6 +8,8 @@ Operator rbac permission rules
- ""
resources:
- configmaps
+ - namespaces
+ - replicasets
verbs:
- get
- list
@@ -52,28 +54,107 @@ Operator rbac permission rules
- delete
- get
- list
+ - patch
- update
- watch
+- apiGroups:
+ - ""
+ resources:
+ - services
+ verbs:
+ - create
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - apps
+ resources:
+ - deployments
+ verbs:
+ - create
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - apps
+ resources:
+ - replicasets
+ verbs:
+ - get
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - apps
+ resources:
+ - replicasets/finalizers
+ verbs:
+ - patch
+ - update
+- apiGroups:
+ - gateway.networking.k8s.io
+ resources:
+ - gatewayclasses
+ verbs:
+ - get
+ - list
+ - patch
+ - watch
+- apiGroups:
+ - gateway.networking.k8s.io
+ resources:
+ - gatewayclasses/finalizers
+ - gatewayclasses/status
+ - gateways/finalizers
+ - gateways/status
+ - httproutes/status
+ verbs:
+ - patch
+ - update
+- apiGroups:
+ - gateway.networking.k8s.io
+ resources:
+ - gateways
+ - httproutes
+ - referencegrants
+ verbs:
+ - get
+ - list
+ - watch
- apiGroups:
- microgateway.airlock.com
resources:
- accesscontrols
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- contentsecurities
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
+ - contentsecuritypolicies
- denyrules
+ - envoyclusters
+ - envoyhttpfilters
+ - graphqls
+ - headerrewrites
+ - identitypropagations
+ - jwks
+ - limits
+ - oidcproviders
+ - oidcrelyingparties
+ - openapis
+ - parsers
+ - redisproviders
+ - sessionhandlings
+ - telemetries
verbs:
- get
- list
@@ -81,11 +162,10 @@ Operator rbac permission rules
- apiGroups:
- microgateway.airlock.com
resources:
- - envoyclusters
+ - contentsecuritypolicies/status
verbs:
- - get
- - list
- - watch
+ - patch
+ - update
- apiGroups:
- microgateway.airlock.com
resources:
@@ -102,74 +182,11 @@ Operator rbac permission rules
- microgateway.airlock.com
resources:
- envoyconfigurations/status
+ - sidecargateways/status
verbs:
- get
- patch
- update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - envoyhttpfilters
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - headerrewrites
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - identitypropagations
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - limits
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcproviders
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - oidcrelyingparties
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - openapis
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - parsers
- verbs:
- - get
- - list
- - watch
- apiGroups:
- microgateway.airlock.com
resources:
@@ -186,20 +203,4 @@ Operator rbac permission rules
- sidecargateways/finalizers
verbs:
- update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - sidecargateways/status
- verbs:
- - get
- - patch
- - update
-- apiGroups:
- - microgateway.airlock.com
- resources:
- - telemetries
- verbs:
- - get
- - list
- - watch
{{- end }}
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/_webhooks.gen.tpl b/charts/airlock/microgateway/4.4.1/templates/operator/_webhooks.gen.tpl
similarity index 84%
rename from charts/airlock/microgateway/4.3.1/templates/operator/_webhooks.gen.tpl
rename to charts/airlock/microgateway/4.4.1/templates/operator/_webhooks.gen.tpl
index 02e304890..97474df39 100644
--- a/charts/airlock/microgateway/4.3.1/templates/operator/_webhooks.gen.tpl
+++ b/charts/airlock/microgateway/4.4.1/templates/operator/_webhooks.gen.tpl
@@ -76,6 +76,26 @@ Operator validating webhooks
resources:
- accesscontrols
sideEffects: None
+- admissionReviewVersions:
+ - v1
+ clientConfig:
+ service:
+ name: airlock-microgateway-operator-webhook
+ namespace: '{{ .Release.Namespace }}'
+ path: /validate-microgateway-airlock-com-v1alpha1-contentsecuritypolicy
+ failurePolicy: Fail
+ name: validate-contentsecuritypolicy.microgateway.airlock.com
+ rules:
+ - apiGroups:
+ - microgateway.airlock.com
+ apiVersions:
+ - v1alpha1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - contentsecuritypolicies
+ sideEffects: None
- admissionReviewVersions:
- v1
clientConfig:
@@ -196,6 +216,26 @@ Operator validating webhooks
resources:
- identitypropagations
sideEffects: None
+- admissionReviewVersions:
+ - v1
+ clientConfig:
+ service:
+ name: airlock-microgateway-operator-webhook
+ namespace: '{{ .Release.Namespace }}'
+ path: /validate-microgateway-airlock-com-v1alpha1-jwks
+ failurePolicy: Fail
+ name: validate-jwks.microgateway.airlock.com
+ rules:
+ - apiGroups:
+ - microgateway.airlock.com
+ apiVersions:
+ - v1alpha1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - jwks
+ sideEffects: None
- admissionReviewVersions:
- v1
clientConfig:
@@ -316,6 +356,26 @@ Operator validating webhooks
resources:
- redisproviders
sideEffects: None
+- admissionReviewVersions:
+ - v1
+ clientConfig:
+ service:
+ name: airlock-microgateway-operator-webhook
+ namespace: '{{ .Release.Namespace }}'
+ path: /validate-microgateway-airlock-com-v1alpha1-sessionhandling
+ failurePolicy: Fail
+ name: validate-sessionhandling.microgateway.airlock.com
+ rules:
+ - apiGroups:
+ - microgateway.airlock.com
+ apiVersions:
+ - v1alpha1
+ operations:
+ - CREATE
+ - UPDATE
+ resources:
+ - sessionhandlings
+ sideEffects: None
- admissionReviewVersions:
- v1
clientConfig:
diff --git a/charts/airlock/microgateway/4.3.1/templates/operator/configmap.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/configmap.yaml
similarity index 97%
rename from charts/airlock/microgateway/4.3.1/templates/operator/configmap.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/configmap.yaml
index 95e52d7df..276a632e8 100644
--- a/charts/airlock/microgateway/4.3.1/templates/operator/configmap.yaml
+++ b/charts/airlock/microgateway/4.4.1/templates/operator/configmap.yaml
@@ -190,8 +190,8 @@ data:
stats_tags:
- tag_name: "block_type"
regex: "\\.(block_type\\.([^.]+))"
- - tag_name: "attack_type"
- regex: "\\.(attack_type\\.([^.]+))"
+ - tag_name: "block_subtype"
+ regex: "\\.(block_subtype\\.([^.]+))"
- tag_name: "envoy_cluster_name"
regex: "\\.(cluster\\.([^.]+))"
- tag_name: "version"
@@ -364,6 +364,10 @@ data:
securityContext:
{{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
runAsUser: $(SECURITYCONTEXT_UID)
+ {{- with .Values.networkValidator.resources }}
+ resources:
+ {{- toYaml . | nindent 6 }}
+ {{- end }}
operator_config.yaml: |
apiVersion: config.airlock.com/v1alpha1
kind: OperatorConfig
@@ -392,3 +396,10 @@ data:
list:
{{- toYaml . | nindent 8 }}
{{- end }}
+ {{- with $.Values.operator.gatewayAPI }}
+ gatewayAPI:
+ enabled: {{ .enabled }}
+ {{- if .controllerName }}
+ controllerName: {{ .controllerName }}
+ {{- end }}
+ {{- end }}
\ No newline at end of file
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/dashboard-configmap.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/dashboard-configmap.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.3.0/templates/operator/dashboard-configmap.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/dashboard-configmap.yaml
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/deployment.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/deployment.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.3.0/templates/operator/deployment.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/deployment.yaml
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/manager-role.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/manager-role.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.3.0/templates/operator/manager-role.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/manager-role.yaml
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/manager-rolebinding.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/manager-rolebinding.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.3.0/templates/operator/manager-rolebinding.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/manager-rolebinding.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/metrics-service.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/metrics-service.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/metrics-service.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/metrics-service.yaml
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/mutating-webhook.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/mutating-webhook.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.3.0/templates/operator/mutating-webhook.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/mutating-webhook.yaml
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/podmonitor.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/podmonitor.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.3.0/templates/operator/podmonitor.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/podmonitor.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/role.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/role.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/role.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/role.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/rolebinding.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/rolebinding.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/rolebinding.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/rolebinding.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/selfsigned-issuer.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/selfsigned-issuer.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/selfsigned-issuer.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/selfsigned-issuer.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/serviceaccount.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/serviceaccount.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/serviceaccount.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/serviceaccount.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/servicemonitor.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/servicemonitor.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/servicemonitor.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/servicemonitor.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/serving-certificate.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/serving-certificate.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/serving-certificate.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/serving-certificate.yaml
diff --git a/charts/airlock/microgateway/4.3.0/templates/operator/validating-webhook.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/validating-webhook.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.3.0/templates/operator/validating-webhook.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/validating-webhook.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/webhook-service.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/webhook-service.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/webhook-service.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/webhook-service.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/operator/xds-service.yaml b/charts/airlock/microgateway/4.4.1/templates/operator/xds-service.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/operator/xds-service.yaml
rename to charts/airlock/microgateway/4.4.1/templates/operator/xds-service.yaml
diff --git a/charts/airlock/microgateway/4.4.1/templates/tests/rbac.yaml b/charts/airlock/microgateway/4.4.1/templates/tests/rbac.yaml
new file mode 100644
index 000000000..93bd4cd1b
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/templates/tests/rbac.yaml
@@ -0,0 +1,143 @@
+{{- if .Values.tests.enabled -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ app.kubernetes.io/component: tests
+ app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
+ {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ namespace: {{ .Release.Namespace }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ labels:
+ app.kubernetes.io/component: tests
+ app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
+ {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+subjects:
+- kind: ServiceAccount
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ labels:
+ app.kubernetes.io/component: tests
+ app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
+ {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ namespace: {{ .Release.Namespace }}
+rules:
+- apiGroups:
+ - microgateway.airlock.com
+ resources:
+ - sidecargateways
+ resourceNames:
+ - "{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway"
+ verbs:
+ - get
+ - list
+ - watch
+ - delete
+- apiGroups:
+ - microgateway.airlock.com
+ resources:
+ - sidecargateways
+ verbs:
+ - create
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - list
+- apiGroups:
+ - "apps"
+ resources:
+ - deployments
+ resourceNames:
+ - "{{ include "airlock-microgateway.operator.fullname" . }}"
+ verbs:
+ - get
+ - list
+ - watch
+- apiGroups:
+ - "apps"
+ resources:
+ - statefulsets
+ - statefulsets/scale
+ resourceNames:
+ - "{{ include "airlock-microgateway.fullname" . }}-test-backend"
+ verbs:
+ - get
+ - list
+ - watch
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ - pods/log
+ - pods/status
+ - pods/attach
+ resourceNames:
+ - "{{ include "airlock-microgateway.fullname" . }}-test-backend-0"
+ - "{{ include "airlock-microgateway.fullname" . }}-test-valid-request"
+ - "{{ include "airlock-microgateway.fullname" . }}-test-injection-request"
+ verbs:
+ - get
+ - list
+ - create
+ - watch
+ - delete
+- apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - create
+{{- if .Values.operator.watchNamespaceSelector }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app.kubernetes.io/component: tests
+ app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
+ {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
+subjects:
+ - kind: ServiceAccount
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests"
+ namespace: {{ .Release.Namespace }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ app.kubernetes.io/component: tests
+ app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
+ {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
+ name: "{{ include "airlock-microgateway.fullname" . }}-tests-{{ .Release.Namespace }}"
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - namespaces
+ verbs:
+ - get
+ - list
+{{- end }}
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.2.3/templates/tests/service.yaml b/charts/airlock/microgateway/4.4.1/templates/tests/service.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/tests/service.yaml
rename to charts/airlock/microgateway/4.4.1/templates/tests/service.yaml
diff --git a/charts/airlock/microgateway/4.2.3/templates/tests/statefulset.yaml b/charts/airlock/microgateway/4.4.1/templates/tests/statefulset.yaml
similarity index 100%
rename from charts/airlock/microgateway/4.2.3/templates/tests/statefulset.yaml
rename to charts/airlock/microgateway/4.4.1/templates/tests/statefulset.yaml
diff --git a/charts/airlock/microgateway/4.4.1/templates/tests/test-install.yaml b/charts/airlock/microgateway/4.4.1/templates/tests/test-install.yaml
new file mode 100644
index 000000000..721ae2b82
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/templates/tests/test-install.yaml
@@ -0,0 +1,227 @@
+{{- if .Values.tests.enabled -}}
+apiVersion: v1
+kind: Pod
+metadata:
+ name: "{{ include "airlock-microgateway.fullname" . }}-test-install"
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app.kubernetes.io/component: test-install
+ app.kubernetes.io/name: {{ include "airlock-microgateway.name" . }}-tests
+ sidecar.istio.io/inject: "false"
+ {{- include "airlock-microgateway.sharedLabels" . | nindent 4 }}
+ {{- include "airlock-microgateway.sharedSelectorLabels" . | nindent 4 }}
+ annotations:
+ helm.sh/hook: test
+ helm.sh/hook-delete-policy: before-hook-creation
+spec:
+ restartPolicy: Never
+ containers:
+ - name: test
+ image: "bitnami/kubectl:{{ .Capabilities.KubeVersion.Major }}.{{ .Capabilities.KubeVersion.Minor }}"
+ securityContext:
+ {{- include "airlock-microgateway.restrictedSecurityContext" . | nindent 6 }}
+ command:
+ - sh
+ - -c
+ - |
+ set -eu
+
+ clean_up() {
+ echo ""
+ echo "### Clean up test resources"
+ kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
+ echo ""
+ echo "### Scale down '{{ include "airlock-microgateway.fullname" . }}-test-backend'"
+ kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=60s
+ sleep 3s
+ echo ""
+ }
+
+ fail() {
+ echo ""
+ echo "### Error: ${1}"
+ echo ""
+
+ if kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway >/dev/null 2>&1; then
+ echo ""
+ echo 'Microgateway Sidecargateway status:'
+ kubectl get -n {{ .Release.Namespace }} sidecargateway.microgateway.airlock.com/{{ include "airlock-microgateway.fullname" . }}-test-sidecargateway -o jsonpath-as-json='{.status}' || true
+ echo ""
+ echo ""
+ fi
+
+ if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 >/dev/null 2>&1; then
+ echo "Pod '{{ include "airlock-microgateway.fullname" . }}-test-backend-0':"
+ kubectl describe -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 || true
+ echo ""
+ echo ""
+ echo 'Logs of Nginx container:'
+ kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c nginx --tail 5 || true
+ echo ""
+ echo ""
+ # Wait for engine logs
+ sleep 10s
+ echo 'Logs of Microgateway Engine container:'
+ kubectl logs -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -c airlock-microgateway-engine --tail 5 || true
+ fi
+
+ exit 1
+ }
+
+ create_sidecargateway() {
+ # create SidecarGateway resource for testing purposes
+ kubectl delete --ignore-not-found=true -n {{ .Release.Namespace }} sidecargateways.microgateway.airlock.com {{ include "airlock-microgateway.fullname" . }}-test-sidecargateway || true
+ kubectl apply -f - </dev/null 2>&1; do sleep 1s; i=$((i+1)); done
+ kubectl logs -f -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
+ kubectl delete pod --ignore-not-found=true -n {{ .Release.Namespace }} {{ include "airlock-microgateway.fullname" . }}-test-valid-request
+ }
+
+ {{- if .Values.operator.watchNamespaceSelector }}
+ echo "### Verify that Namespace Selector matches Namespace '{{ .Release.Namespace }}'"
+ if ! kubectl get namespace -l '{{ include "airlock-microgateway.watchNamespaceSelector.labelQuery" .Values.operator.watchNamespaceSelector }}' | grep -q {{ .Release.Namespace }}; then
+ labels=$(kubectl get namespace {{ .Release.Namespace }} -o jsonpath={.metadata.labels} | jq | awk '{print " " $0}')
+ fail {{printf `"Operator namespace '%s' is not part of the operator's watch scope. To execute 'helm test', the selector configured in the helm value 'operator.watchNamespaceSelector' must match the namespace's labels:\n* Current selector:\n%s\n\n* Current labels:\n$labels\n###"`
+ .Release.Namespace
+ (replace "\"" "\\\"" (replace "\n" "\\n" (.Values.operator.watchNamespaceSelector | toPrettyJson | indent 2)))
+ }}
+ fi
+ echo ""
+ {{- end }}
+
+ trap clean_up EXIT
+ echo ""
+
+ echo "### Waiting for Microgateway Operator Deployments to be ready"
+ if ! kubectl rollout status -n {{ .Release.Namespace }} --timeout=90s \
+ deployments/{{ include "airlock-microgateway.operator.fullname" . }}; then
+ fail 'Timeout occurred'
+ fi
+ echo ""
+
+ echo "### Scale '{{ include "airlock-microgateway.fullname" . }}-test-backend' to '1' replica"
+ # scale to zero replicas to ensure no pods are present from previous runs
+ kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=0 --timeout=10s
+ kubectl scale -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --replicas=1 --timeout=10s
+ echo ""
+
+ echo "### Waiting for backend pod"
+ i=0
+ while true; do
+ if kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0; then
+ break
+ elif [ $i -gt 3 ]; then
+ fail 'Pod not ready'
+ fi
+ sleep 2s
+ i=$((i+1))
+ done
+
+ echo "### Checking Microgateway Engine sidecar container was injected"
+ if ! kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.spec.containers[?(@.name=="airlock-microgateway-engine")]}' | grep -q "airlock-microgateway-engine"; then
+ fail 'Microgateway Engine sidecar container not injected'
+ fi
+ echo "True"
+ echo ""
+
+ echo "### Checking for valid license"
+ i=0
+ while true; do
+ if [ "$(kubectl get -n {{ .Release.Namespace }} pods/{{ include "airlock-microgateway.fullname" . }}-test-backend-0 -o jsonpath='{.metadata.labels.sidecar\.microgateway\.airlock\.com/licensed}')" = 'true' ]; then
+ break
+ elif [ $i -gt 30 ]; then
+ fail 'Microgateway license is missing or invalid'
+ fi
+ sleep 2s
+ i=$((i+1))
+ done
+ echo "True"
+ echo ""
+
+ echo "### Create SidecarGateway resource for testing"
+ if ! create_sidecargateway ; then
+ fail 'Creation of SidecarGateway resource failed'
+ fi
+ echo ""
+
+ echo "### Waiting for '{{ include "airlock-microgateway.fullname" . }}-test-backend' to be ready"
+ if ! kubectl rollout status -n {{ .Release.Namespace }} statefulset/{{ include "airlock-microgateway.fullname" . }}-test-backend --timeout=90s; then
+ fail 'Timeout occurred'
+ fi
+ echo ""
+
+ echo "### Waiting for 'engine-config-valid' condition"
+ if ! kubectl wait -n {{ .Release.Namespace }} pods --field-selector=metadata.name={{ include "airlock-microgateway.fullname" . }}-test-backend-0 --timeout=90s --for=condition=microgateway.airlock.com/engine-config-valid=True; then
+ fail 'Configuration was never accepted by the Microgateway Engine'
+ fi
+ sleep 5s
+ echo ""
+ echo ""
+
+ echo "### Checking whether a valid request is successful and returns HTTP status code '200'"
+ out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/" || true)
+ echo "Response:"
+ echo "${out}"
+ if ! echo "${out}" | grep -q "200 OK"; then
+ fail 'A valid request was not successful'
+ fi
+ echo ""
+ echo ""
+
+ echo "### Checking whether a request with an injection attack is blocked and returns HTTP status code '400'"
+ out=$(curl -vsS --retry 3 --retry-connrefused --connect-timeout 10 "http://{{ include "airlock-microgateway.fullname" . }}-test-service:8080/?token='%20UnION%20all%20select%20A" || true)
+ echo "Response:"
+ echo "${out}"
+ if ! echo "${out}" | grep -q "400 Bad Request"; then
+ fail 'A malicious request was not blocked'
+ fi
+ echo ""
+ echo ""
+
+ echo "### Installation of '{{ include "airlock-microgateway.fullname" . }}' succeeded"
+ exit 0
+ serviceAccountName: "{{ include "airlock-microgateway.fullname" . }}-tests"
+{{- end -}}
diff --git a/charts/airlock/microgateway/4.4.1/values.schema.json b/charts/airlock/microgateway/4.4.1/values.schema.json
new file mode 100644
index 000000000..05c7d7717
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/values.schema.json
@@ -0,0 +1,572 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "properties": {
+ "nameOverride": {
+ "type": "string"
+ },
+ "fullnameOverride": {
+ "type": "string"
+ },
+ "commonLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "commonAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "crds": {
+ "type": "object",
+ "properties": {
+ "skipVersionCheck": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "imagePullSecrets": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "additionalProperties": true
+ }
+ },
+ "operator": {
+ "type": "object",
+ "properties": {
+ "replicaCount": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "updateStrategy": {
+ "$ref": "#/definitions/UpdateStrategy"
+ },
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "podAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "podLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "serviceAnnotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "serviceLabels": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "resources": {
+ "type": "object"
+ },
+ "nodeSelector": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "tolerations": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "affinity": {
+ "type": "object"
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "logLevel": {
+ "type": "string",
+ "enum": [
+ "debug",
+ "info",
+ "warn",
+ "error"
+ ]
+ }
+ },
+ "required": [
+ "logLevel"
+ ],
+ "additionalProperties": false
+ },
+ "serviceAccount": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "annotations": {
+ "$ref": "#/definitions/StringMap"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "annotations",
+ "create",
+ "name"
+ ],
+ "additionalProperties": false
+ },
+ "watchNamespaces": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "watchNamespaceSelector": {
+ "$ref": "#/definitions/LabelSelector"
+ },
+ "rbac": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "create"
+ ],
+ "additionalProperties": false
+ },
+ "serviceMonitor": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "labels": {
+ "$ref": "#/definitions/StringMap"
+ }
+ },
+ "required": [
+ "create"
+ ],
+ "additionalProperties": false
+ },
+ "gatewayAPI": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "controllerName" : {
+ "type": "string",
+ "pattern": "^microgateway\\.airlock\\.com\/[A-Za-z0-9\/\\-._~%!$&'()*+,;=:]+$"
+ }
+ },
+ "required": [
+ "enabled"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "oneOf": [
+ {
+ "properties": {
+ "watchNamespaces": {
+ "minItems": 1
+ },
+ "watchNamespaceSelector": {
+ "additionalProperties": false
+ }
+ }
+ },
+ {
+ "properties": {
+ "watchNamespaces": {
+ "maxItems": 0
+ },
+ "watchNamespaceSelector": {
+ "$ref": "#/definitions/LabelSelector"
+ }
+ }
+ }
+ ],
+ "required": [
+ "affinity",
+ "config",
+ "image",
+ "updateStrategy",
+ "nodeSelector",
+ "podAnnotations",
+ "podLabels",
+ "rbac",
+ "replicaCount",
+ "resources",
+ "serviceAccount",
+ "serviceAnnotations",
+ "serviceLabels",
+ "serviceMonitor",
+ "tolerations"
+ ],
+ "additionalProperties": false
+ },
+ "engine": {
+ "type": "object",
+ "properties": {
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "resources": {
+ "type": "object"
+ },
+ "sidecar": {
+ "type": "object",
+ "properties":{
+ "podMonitor": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "labels": {
+ "$ref": "#/definitions/StringMap"
+ }
+ },
+ "required": [
+ "create"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "podMonitor"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "image",
+ "resources",
+ "sidecar"
+ ],
+ "additionalProperties": false
+ },
+ "networkValidator": {
+ "type": "object",
+ "properties": {
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "resources": {
+ "type": "object"
+ }
+ },
+ "required": [
+ "image",
+ "resources"
+ ],
+ "additionalProperties": false
+ },
+ "sessionAgent": {
+ "type": "object",
+ "properties": {
+ "image": {
+ "$ref": "#/definitions/Image"
+ },
+ "resources": {
+ "type": "object"
+ }
+ },
+ "required": [
+ "image",
+ "resources"
+ ],
+ "additionalProperties": false
+ },
+ "license": {
+ "type": "object",
+ "properties": {
+ "secretName": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "required": [
+ "secretName"
+ ],
+ "additionalProperties": false
+ },
+ "dashboards": {
+ "type": "object",
+ "properties" : {
+ "create": {
+ "type": "boolean"
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "grafana": {
+ "type": "object",
+ "properties": {
+ "folderAnnotation": {
+ "$ref": "#/definitions/NameValuePair"
+ },
+ "dashboardLabel": {
+ "$ref": "#/definitions/NameValuePair"
+ }
+ },
+ "required": [
+ "folderAnnotation",
+ "dashboardLabel"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "grafana"
+ ],
+ "additionalProperties": false
+ },
+ "instances": {
+ "type": "object",
+ "properties": {
+ "overview": {
+ "$ref": "#/definitions/DashboardInstance"
+ },
+ "license" : {
+ "$ref": "#/definitions/DashboardInstance"
+ },
+ "blockMetrics" : {
+ "$ref": "#/definitions/DashboardInstance"
+ },
+ "blockLogs" : {
+ "$ref": "#/definitions/DashboardInstance"
+ },
+ "headerLogs" : {
+ "$ref": "#/definitions/DashboardInstance"
+ },
+ "logOnlyMetrics" : {
+ "$ref": "#/definitions/DashboardInstance"
+ },
+ "logOnlyLogs" : {
+ "$ref": "#/definitions/DashboardInstance"
+ }
+ },
+ "required": [
+ "overview",
+ "license",
+ "blockMetrics",
+ "blockLogs",
+ "headerLogs",
+ "logOnlyMetrics",
+ "logOnlyLogs"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "create",
+ "config",
+ "instances"
+ ],
+ "additionalProperties": false
+ },
+ "tests": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "enabled"
+ ],
+ "additionalProperties": false
+ },
+ "global": {
+ "type": "object"
+ }
+ },
+ "required": [
+ "commonAnnotations",
+ "commonLabels",
+ "crds",
+ "engine",
+ "fullnameOverride",
+ "imagePullSecrets",
+ "license",
+ "nameOverride",
+ "operator",
+ "networkValidator",
+ "sessionAgent",
+ "dashboards",
+ "tests"
+ ],
+ "additionalProperties": false,
+ "definitions": {
+ "StringMap": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "Image": {
+ "type": "object",
+ "properties": {
+ "repository": {
+ "type": "string",
+ "minLength": 1
+ },
+ "tag": {
+ "type": "string"
+ },
+ "digest": {
+ "type": "string",
+ "pattern": "^$|^sha256:[a-f0-9]{64}$"
+ },
+ "pullPolicy": {
+ "type": "string",
+ "enum": [
+ "Always",
+ "IfNotPresent",
+ "Never"
+ ]
+ }
+ },
+ "required": [
+ "digest",
+ "pullPolicy",
+ "repository",
+ "tag"
+ ],
+ "additionalProperties": false
+ },
+ "LabelSelector": {
+ "type": "object",
+ "properties": {
+ "matchExpressions": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "key",
+ "operator"
+ ],
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "operator": {
+ "type": "string"
+ },
+ "values": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "matchLabels": {
+ "$ref": "#/definitions/StringMap"
+ }
+ },
+ "additionalProperties": false
+ },
+ "UpdateStrategy": {
+ "type": "object",
+ "oneOf" : [
+ {
+ "properties": {
+ "type": {
+ "$ref": "#/definitions/RecreateType"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "properties": {
+ "type": {
+ "$ref": "#/definitions/RollingUpdateType"
+ },
+ "rollingUpdate": {
+ "$ref": "#/definitions/RollingUpdate"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "RecreateType": {
+ "type": "string",
+ "enum": [
+ "Recreate"
+ ]
+ },
+ "RollingUpdateType": {
+ "type": "string",
+ "enum": [
+ "RollingUpdate"
+ ]
+ },
+ "RollingUpdate": {
+ "type": "object",
+ "properties": {
+ "maxSurge": {
+ "type": ["integer", "string"],
+ "minimum": 0,
+ "pattern": "^\\d+%?$"
+ },
+ "maxUnavailable": {
+ "type": ["integer", "string"],
+ "minimum": 0,
+ "pattern": "^\\d+%?$"
+ }
+ },
+ "anyOf": [
+ {"required": ["maxSurge"]},
+ {"required": ["maxUnavailable"]}
+ ],
+ "additionalProperties": false
+ },
+ "DashboardInstance" : {
+ "type" : "object",
+ "properties" : {
+ "create" : {
+ "type" : "boolean"
+ }
+ },
+ "required" : [
+ "create"
+ ],
+ "additionalProperties": false
+ },
+ "NameValuePair" : {
+ "type" : "object",
+ "properties" : {
+ "name" : {
+ "type": "string",
+ "minLength": 1
+ },
+ "value" : {
+ "type" : "string",
+ "minLength": 1
+ }
+ },
+ "required" : [
+ "name",
+ "value"
+ ],
+ "additionalProperties": false
+ }
+ }
+}
diff --git a/charts/airlock/microgateway/4.4.1/values.yaml b/charts/airlock/microgateway/4.4.1/values.yaml
new file mode 100644
index 000000000..f0f598ea1
--- /dev/null
+++ b/charts/airlock/microgateway/4.4.1/values.yaml
@@ -0,0 +1,237 @@
+# -- Allows overriding the name to use instead of "microgateway".
+nameOverride: ""
+# -- Allows overriding the name to use as full name of resources.
+fullnameOverride: ""
+# -- Labels to add to all resources.
+commonLabels: {}
+# -- Annotations to add to all resources.
+commonAnnotations: {}
+# -- ImagePullSecrets to use when pulling images.
+imagePullSecrets: []
+# - name: myRegistryKeySecretName
+
+crds:
+ # -- Whether to skip the sanity check which prevents installing/upgrading the helm chart in a cluster with outdated Airlock Microgateway CRDs.
+ # The check aims to prevent unexpected behavior and issues due to Helm v3 not automatically upgrading CRDs which are already present in the cluster
+ # when performing a "helm install/upgrade".
+ skipVersionCheck: false
+operator:
+ # -- Number of replicas for the operator Deployment.
+ replicaCount: 2
+ # -- Specifies the operator update strategy.
+ updateStrategy:
+ type: RollingUpdate
+ # Specifies the Airlock Microgateway Operator image.
+ image:
+ # -- Image repository from which to pull the Airlock Microgateway Operator image.
+ repository: "quay.io/airlock/microgateway-operator"
+ # -- Image tag to pull.
+ tag: "4.4.1"
+ # -- SHA256 image digest to pull (in the format "sha256:c79ee3f85862fb386e9dd62b901b607161d27807f512d7fbdece05e9ee3d7c63").
+ # Overrides tag when specified.
+ digest: "sha256:1133c3e59418eec1721683e68dd19faca577609ace6eebd010a56e52b1f75789"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+ # -- Annotations to add to all Pods.
+ podAnnotations: {}
+ # -- Labels to add to all Pods.
+ podLabels: {}
+ # -- Annotations to add to the Service.
+ serviceAnnotations: {}
+ # prometheus.io/scrape: "true"
+ # prometheus.io/port: "8080"
+
+ # -- Labels to add to the Service.
+ serviceLabels: {}
+ # -- Resource restrictions to apply to the operator container.
+ resources: {}
+ # We recommend at least the following resource specification.
+ # limits:
+ # cpu: 1000m
+ # memory: 512Mi
+ # requests:
+ # cpu: 100m
+ # memory: 512Mi
+
+ # -- Custom nodeSelector to apply to the operator Deployment in order to constrain its Pods to certain nodes.
+ nodeSelector: {}
+ # -- Custom tolerations to apply to the operator Deployment in order to allow its Pods to run on tainted nodes.
+ tolerations: []
+ # -- Custom affinity to apply to the operator Deployment. Used to influence the scheduling.
+ affinity: {}
+ # Parameters for the operator configuration.
+ config:
+ # -- Operator application log level.
+ logLevel: "info"
+ # Configures the generation of the ServiceAccount.
+ serviceAccount:
+ # -- Whether a ServiceAccount should be created.
+ create: true
+ # -- Annotations to add to the ServiceAccount.
+ annotations: {}
+ # -- Name of the ServiceAccount to use.
+ # If not set and create is true, a name is generated using the fullname template.
+ name: ""
+ # -- Allows to restrict the operator to specific namespaces, depending on your needs.
+ # For a `OwnNamespace` or `SingleNamespace` installation the list may only contain one namespace (e.g., `watchNamespaces: ["airlock-microgateway-system"]`).
+ # In case of the `OwnNamespace` installation mode the specified namespace should be equal to the installation namespace.
+ # For a static `MultiNamespace` installation, the complete list of namespaces must be provided in the `watchNamespaces`.
+ # An `AllNamespaces` installation or the usage of the `watchNamespaceSelector` requires the `watchNamespaces` to be empty.
+ # Regardless of the installation modes supported by `watchNamespaces`, RBAC is created only namespace-scoped (using Roles and RoleBindings) in the respective namespaces.
+ # Please note that this feature requires a Premium license.
+ watchNamespaces: []
+ # -- Allows to dynamically select watch namespaces of the operator and the scope of the webhooks based on a Namespace label selector.
+ # It is able to detect and reconcile resources in all namespaces that match the label selector automatically, even for new namespaces, without restarting the operator.
+ # This facilitates a dynamic `MultiNamespace` installation mode, but still requires cluster-scoped permissions (i.e., ClusterRoles and ClusterRoleBindings).
+ # An `AllNamespaces` installation or the usage of the `watchNamespaces` requires the `watchNamespaceSelector` to be empty.
+ # Please note that this feature requires a Premium license.
+ watchNamespaceSelector: {}
+ # For further examples, see: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements.
+ # matchLabels:
+ # microgateway.airlock.com/enable: "true"
+ # matchExpressions:
+ # - { key: environment, operator: NotIn, values: [dev] }
+
+ # Configures the generation of Role and RoleBinding as well as ClusterRoles and ClusterRoleBinding pairs for the ServiceAccount specified above.
+ rbac:
+ # -- Whether to create RBAC resources which are required for the Airlock Microgateway Operator to function.
+ create: true
+ # Configures the generation of a Prometheus Operator ServiceMonitor.
+ serviceMonitor:
+ # -- Whether to create a ServiceMonitor resource for monitoring.
+ create: false
+ # -- Labels to add to the ServiceMonitor.
+ labels: {}
+ # release: ""
+ # Configures the Kubernetes Gateway API integration.
+ gatewayAPI:
+ # -- Whether to enable the Kubernetes Gateway API related controllers.
+ # Requires that the gateway.networking.k8s.io/v1 resources are installed on the cluster.
+ enabled: false
+ # -- Controller name referred in the GatewayClasses managed by this operator. The value must be a path prefixed by the domain `microgateway.airlock.com`.
+ controllerName: microgateway.airlock.com/gatewayclass-controller
+engine:
+ # Specifies the Airlock Microgateway Engine image.
+ image:
+ # -- Image repository from which to pull the Airlock Microgateway Engine image.
+ repository: "quay.io/airlock/microgateway-engine"
+ # -- Image tag to pull.
+ tag: "4.4.1"
+ # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
+ # Overrides tag when specified.
+ digest: "sha256:06573ef5e6769dbd6eb8606e34c56f1ad2084b6adcae9925b1d2d153a45cbc47"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+ # -- Resource restrictions to apply to the Airlock Microgateway Engine container.
+ resources: {}
+ # We recommend at least the following resource specification.
+ # limits:
+ # cpu: 500m
+ # memory: 128Mi
+ # requests:
+ # cpu: 10m
+ # memory: 40Mi
+
+ # Additional configuration when deployed as a sidecar.
+ sidecar:
+ # Configures the generation of a Prometheus Operator PodMonitor.
+ podMonitor:
+ # -- Whether to create a PodMonitor resource for monitoring.
+ create: false
+ # -- Labels to add to the PodMonitor.
+ labels: {}
+ # release: ""
+networkValidator:
+ # Specifies the Airlock Microgateway Network Validator image to be injected as an init-container.
+ image:
+ # -- Image repository from which to pull the netcat image for the Airlock Microgateway Network Validator init-container.
+ repository: "cgr.dev/chainguard/netcat"
+ # -- Image tag to pull.
+ tag: ""
+ # -- SHA256 image digest to pull (in the format "sha256:7ef657ce316ce9d86f90c1dc99702d1190877c6ac2e923e696dc82c30050a14c").
+ # Overrides tag when specified.
+ digest: "sha256:7ef657ce316ce9d86f90c1dc99702d1190877c6ac2e923e696dc82c30050a14c"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+ # -- Resource restrictions to apply to the Airlock Microgateway Network Validator init-container.
+ resources:
+ limits:
+ cpu: 25m
+ memory: 12Mi
+ requests:
+ cpu: 5m
+ memory: 1Mi
+sessionAgent:
+ # Specifies the Airlock Microgateway Session Agent image.
+ image:
+ # -- Image repository from which to pull the Airlock Microgateway Session Agent image.
+ repository: "quay.io/airlock/microgateway-session-agent"
+ # -- Image tag to pull.
+ tag: "4.4.1"
+ # -- SHA256 image digest to pull (in the format "sha256:a3051f42d3013813b05f7513bb86ed6a3209cb3003f1bb2f7b72df249aa544d3").
+ # Overrides tag when specified.
+ digest: "sha256:733a25f61ea7cf43c0a46da7d3ecb9a263bda49bf60e1fd8e4162be33aa24b7b"
+ # -- Pull policy for this image.
+ pullPolicy: IfNotPresent
+ # -- Resource restrictions to apply to the Airlock Microgateway Session Agent container.
+ resources: {}
+ # We recommend at least the following resource specification.
+ # limits:
+ # cpu: 150m
+ # memory: 32Mi
+ # requests:
+ # cpu: 10m
+ # memory: 8Mi
+license:
+ # -- Name of the secret containing the "microgateway-license.txt" key.
+ secretName: "airlock-microgateway-license"
+# Creates dashboards in the form of ConfigMaps that can be imported
+# by Grafana using its sidecar setup.
+dashboards:
+ # -- Whether to create any ConfigMaps containing Grafana dashboards to import.
+ create: false
+ config:
+ # Configures the necessary label and annotations along with their values
+ # to enable Grafana to correctly identify the ConfigMaps containing
+ # dashboards and file them within a dedicated folder in the dashboard overview.
+ # These settings need to match the Grafana sidecar configuration.
+ grafana:
+ folderAnnotation:
+ # -- Name of the annotation containing the folder name to file dashboards into.
+ name: "grafana_folder"
+ # -- Name of the folder dashboards are filed into within the Grafana UI.
+ value: "Airlock Microgateway"
+ dashboardLabel:
+ # -- Name of the label that lets Grafana identify ConfigMaps that represent dashboards.
+ name: "grafana_dashboard"
+ # -- Value of the label that lets Grafana identify ConfigMaps that represent dashboards.
+ value: "1"
+ instances:
+ # Available dashboard instances that can be individually created/deployed.
+ overview:
+ # -- Whether to create the overview dashboard.
+ create: true
+ license:
+ # -- Whether to create the license dashboard.
+ create: true
+ blockMetrics:
+ # -- Whether to create the block metrics dashboard.
+ create: true
+ blockLogs:
+ # -- Whether to create the block logs dashboard.
+ create: true
+ headerLogs:
+ # -- Whether to create the header rewrite logs dashboard.
+ create: true
+ logOnlyMetrics:
+ # -- Whether to create the log only metrics dashboard
+ create: true
+ logOnlyLogs:
+ # -- Whether to create the log only logs dashboard.
+ create: true
+# Check whether the installation of the Airlock Microgateway Helm Chart was successful.
+# Requires a secret with a valid Airlock Microgateway license key already to be present.
+tests:
+ # -- Whether additional resources required for running `helm test` should be created (e.g. Roles and ServiceAccounts).
+ # If set to false, `helm test` will not run any tests.
+ enabled: false
diff --git a/charts/kasten/k10/7.0.1401/Chart.lock b/charts/kasten/k10/7.0.1401/Chart.lock
new file mode 100644
index 000000000..b1b447114
--- /dev/null
+++ b/charts/kasten/k10/7.0.1401/Chart.lock
@@ -0,0 +1,9 @@
+dependencies:
+- name: grafana
+ repository: ""
+ version: 8.5.8
+- name: prometheus
+ repository: ""
+ version: 25.28.0
+digest: sha256:4af966da2fe3b7163bec3c5da98178c8232d6a6ad4405c8e592d38a6832ce704
+generated: "2024-11-15T16:25:38.370071605Z"
diff --git a/charts/kasten/k10/7.0.1401/Chart.yaml b/charts/kasten/k10/7.0.1401/Chart.yaml
new file mode 100644
index 000000000..3e1dd214a
--- /dev/null
+++ b/charts/kasten/k10/7.0.1401/Chart.yaml
@@ -0,0 +1,25 @@
+annotations:
+ catalog.cattle.io/certified: partner
+ catalog.cattle.io/display-name: K10
+ catalog.cattle.io/kube-version: '>= 1.17.0-0'
+ catalog.cattle.io/release-name: k10
+apiVersion: v2
+appVersion: 7.0.14
+dependencies:
+- condition: grafana.enabled
+ name: grafana
+ repository: ""
+ version: 8.5.8
+- condition: prometheus.server.enabled
+ name: prometheus
+ repository: ""
+ version: 25.28.0
+description: Kasten’s K10 Data Management Platform
+home: https://kasten.io/
+icon: file://assets/icons/k10.png
+kubeVersion: '>= 1.17.0-0'
+maintainers:
+- email: contact@kasten.io
+ name: kastenIO
+name: k10
+version: 7.0.1401
diff --git a/charts/kasten/k10/7.0.1401/README.md b/charts/kasten/k10/7.0.1401/README.md
new file mode 100644
index 000000000..7dbccc9c7
--- /dev/null
+++ b/charts/kasten/k10/7.0.1401/README.md
@@ -0,0 +1,344 @@
+# Kasten's K10 Helm chart.
+
+[Kasten's k10](https://docs.kasten.io/) is a data lifecycle management system for all your persistence.enabled
+container-based applications.
+
+## TL;DR;
+
+```console
+$ helm install kasten/k10 --name=k10 --namespace=kasten-io
+```
+Additionally, K10 images are available in Platform One's **Iron Bank** hardened container registry.
+To install using these images, follow the instructions found
+[here](https://docs.kasten.io/latest/install/ironbank.html).
+
+## Introduction
+
+This chart bootstraps Kasten's K10 platform on a [Kubernetes](http://kubernetes.io) cluster using
+the [Helm](https://helm.sh) package manager.
+
+## Prerequisites
+
+- Kubernetes 1.23 - 1.26
+
+## Installing the Chart
+
+To install the chart on a [GKE](https://cloud.google.com/container-engine/) cluster
+
+```console
+$ helm install kasten/k10 --name=k10 --namespace=kasten-io
+```
+
+To install the chart on an [AWS](https://aws.amazon.com/) [kops](https://github.com/kubernetes/kops)-created cluster
+
+```console
+$ helm install kasten/k10 --name=k10 --namespace=kasten-io --set secrets.awsAccessKeyId="${AWS_ACCESS_KEY_ID}" \
+ --set secrets.awsSecretAccessKey="${AWS_SECRET_ACCESS_KEY}"
+```
+
+> **Tip**: List all releases using `helm list`
+
+## Uninstalling the Chart
+
+To uninstall/delete the `k10` application:
+
+```console
+$ helm delete k10 --purge
+```
+
+## Configuration
+
+The following table lists the configurable parameters of the K10
+chart and their default values.
+
+Parameter | Description | Default
+--- | --- | ---
+`eula.accept`| Whether to enable accept EULA before installation | `false`
+`eula.company` | Company name. Required field if EULA is accepted | `None`
+`eula.email` | Contact email. Required field if EULA is accepted | `None`
+`license` | License string obtained from Kasten | `None`
+`rbac.create` | Whether to enable RBAC with a specific cluster role and binding for K10 | `true`
+`scc.create` | Whether to create a SecurityContextConstraints for K10 ServiceAccounts | `false`
+`scc.priority` | Sets the SecurityContextConstraints priority | `15`
+`services.dashboardbff.hostNetwork` | Whether the dashboardbff pods may use the node network | `false`
+`services.executor.hostNetwork` | Whether the executor pods may use the node network | `false`
+`services.aggregatedapis.hostNetwork` | Whether the aggregatedapis pods may use the node network | `false`
+`serviceAccount.create`| Specifies whether a ServiceAccount should be created | `true`
+`serviceAccount.name` | The name of the ServiceAccount to use. If not set, a name is derived using the release and chart names. | `None`
+`ingress.create` | Specifies whether the K10 dashboard should be exposed via ingress | `false`
+`ingress.name` | Optional name of the Ingress object for the K10 dashboard. If not set, the name is formed using the release name. | `{Release.Name}-ingress`
+`ingress.class` | Cluster ingress controller class: `nginx`, `GCE` | `None`
+`ingress.host` | FQDN (e.g., `k10.example.com`) for name-based virtual host | `None`
+`ingress.urlPath` | URL path for K10 Dashboard (e.g., `/k10`) | `Release.Name`
+`ingress.pathType` | Specifies the path type for the ingress resource | `ImplementationSpecific`
+`ingress.annotations` | Additional Ingress object annotations | `{}`
+`ingress.tls.enabled` | Configures a TLS use for `ingress.host` | `false`
+`ingress.tls.secretName` | Optional TLS secret name | `None`
+`ingress.defaultBackend.service.enabled` | Configures the default backend backed by a service for the K10 dashboard Ingress (mutually exclusive setting with `ingress.defaultBackend.resource.enabled`). | `false`
+`ingress.defaultBackend.service.name` | The name of a service referenced by the default backend (required if the service-backed default backend is used). | `None`
+`ingress.defaultBackend.service.port.name` | The port name of a service referenced by the default backend (mutually exclusive setting with port `number`, required if the service-backed default backend is used). | `None`
+`ingress.defaultBackend.service.port.number` | The port number of a service referenced by the default backend (mutually exclusive setting with port `name`, required if the service-backed default backend is used). | `None`
+`ingress.defaultBackend.resource.enabled` | Configures the default backend backed by a resource for the K10 dashboard Ingress (mutually exclusive setting with `ingress.defaultBackend.service.enabled`). | `false`
+`ingress.defaultBackend.resource.apiGroup` | Optional API group of a resource backing the default backend. | `''`
+`ingress.defaultBackend.resource.kind` | The type of a resource being referenced by the default backend (required if the resource default backend is used). | `None`
+`ingress.defaultBackend.resource.name` | The name of a resource being referenced by the default backend (required if the resource default backend is used). | `None`
+`global.persistence.size` | Default global size of volumes for K10 persistent services | `20Gi`
+`global.persistence.catalog.size` | Size of a volume for catalog service | `global.persistence.size`
+`global.persistence.jobs.size` | Size of a volume for jobs service | `global.persistence.size`
+`global.persistence.logging.size` | Size of a volume for logging service | `global.persistence.size`
+`global.persistence.metering.size` | Size of a volume for metering service | `global.persistence.size`
+`global.persistence.storageClass` | Specified StorageClassName will be used for PVCs | `None`
+`global.podLabels` | Configures custom labels to be set to all Kasten pods | `None`
+`global.podAnnotations` | Configures custom annotations to be set to all Kasten pods | `None`
+`global.airgapped.repository` | Specify the helm repository for offline (airgapped) installation | `''`
+`global.imagePullSecret` | Provide secret which contains docker config for private repository. Use `k10-ecr` when secrets.dockerConfigPath is used. | `''`
+`global.prometheus.external.host` | Provide external prometheus host name | `''`
+`global.prometheus.external.port` | Provide external prometheus port number | `''`
+`global.prometheus.external.baseURL` | Provide Base URL of external prometheus | `''`
+`global.network.enable_ipv6` | Enable `IPv6` support for K10 | `false`
+`google.workloadIdentityFederation.enabled` | Enable Google Workload Identity Federation for K10 | `false`
+`google.workloadIdentityFederation.idp.type` | Identity Provider type for Google Workload Identity Federation for K10 | `''`
+`google.workloadIdentityFederation.idp.aud` | Audience for whom the ID Token from Identity Provider is intended | `''`
+`secrets.awsAccessKeyId` | AWS access key ID (required for AWS deployment) | `None`
+`secrets.awsSecretAccessKey` | AWS access key secret | `None`
+`secrets.awsIamRole` | ARN of the AWS IAM role assumed by K10 to perform any AWS operation. | `None`
+`secrets.awsClientSecretName` | The secret that contains AWS access key ID, AWS access key secret and AWS IAM role for AWS | `None`
+`secrets.googleApiKey` | Non-default base64 encoded GCP Service Account key | `None`
+`secrets.googleProjectId` | Sets Google Project ID other than the one used in the GCP Service Account | `None`
+`secrets.azureTenantId` | Azure tenant ID (required for Azure deployment) | `None`
+`secrets.azureClientId` | Azure Service App ID | `None`
+`secrets.azureClientSecret` | Azure Service APP secret | `None`
+`secrets.azureClientSecretName` | The secret that contains ClientID, ClientSecret and TenantID for Azure | `None`
+`secrets.azureResourceGroup` | Resource Group name that was created for the Kubernetes cluster | `None`
+`secrets.azureSubscriptionID` | Subscription ID in your Azure tenant | `None`
+`secrets.azureResourceMgrEndpoint` | Resource management endpoint for the Azure Stack instance | `None`
+`secrets.azureADEndpoint` | Azure Active Directory login endpoint | `None`
+`secrets.azureADResourceID` | Azure Active Directory resource ID to obtain AD tokens | `None`
+`secrets.microsoftEntraIDEndpoint` | Microsoft Entra ID login endpoint | `None`
+`secrets.microsoftEntraIDResourceID` | Microsoft Entra ID resource ID to obtain AD tokens | `None`
+`secrets.azureCloudEnvID` | Azure Cloud Environment ID | `None`
+`secrets.vsphereEndpoint` | vSphere endpoint for login | `None`
+`secrets.vsphereUsername` | vSphere username for login | `None`
+`secrets.vspherePassword` | vSphere password for login | `None`
+`secrets.vsphereClientSecretName` | The secret that contains vSphere username, vSphere password and vSphere endpoint | `None`
+`secrets.dockerConfig` | Set base64 encoded docker config to use for image pull operations. Alternative to the ``secrets.dockerConfigPath`` | `None`
+`secrets.dockerConfigPath` | Use ``--set-file secrets.dockerConfigPath=path_to_docker_config.yaml`` to specify docker config for image pull. Will be overwritten if ``secrets.dockerConfig`` is set | `None`
+`cacertconfigmap.name` | Name of the ConfigMap that contains a certificate for a trusted root certificate authority | `None`
+`clusterName` | Cluster name for better logs visibility | `None`
+`metering.awsRegion` | Sets AWS_REGION for metering service | `None`
+`metering.mode` | Control license reporting (set to `airgap` for private-network installs) | `None`
+`metering.reportCollectionPeriod` | Sets metric report collection period (in seconds) | `1800`
+`metering.reportPushPeriod` | Sets metric report push period (in seconds) | `3600`
+`metering.promoID` | Sets K10 promotion ID from marketing campaigns | `None`
+`metering.awsMarketplace` | Sets AWS cloud metering license mode | `false`
+`metering.awsManagedLicense` | Sets AWS managed license mode | `false`
+`metering.redhatMarketplacePayg` | Sets Red Hat cloud metering license mode | `false`
+`metering.licenseConfigSecretName` | Sets AWS managed license config secret | `None`
+`externalGateway.create` | Configures an external gateway for K10 API services | `false`
+`externalGateway.annotations` | Standard annotations for the services | `None`
+`externalGateway.fqdn.name` | Domain name for the K10 API services | `None`
+`externalGateway.fqdn.type` | Supported gateway type: `route53-mapper` or `external-dns` | `None`
+`externalGateway.awsSSLCertARN` | ARN for the AWS ACM SSL certificate used in the K10 API server | `None`
+`auth.basicAuth.enabled` | Configures basic authentication for the K10 dashboard | `false`
+`auth.basicAuth.htpasswd` | A username and password pair separated by a colon character | `None`
+`auth.basicAuth.secretName` | Name of an existing Secret that contains a file generated with htpasswd | `None`
+`auth.k10AdminGroups` | A list of groups whose members are granted admin level access to K10's dashboard | `None`
+`auth.k10AdminUsers` | A list of users who are granted admin level access to K10's dashboard | `None`
+`auth.tokenAuth.enabled` | Configures token based authentication for the K10 dashboard | `false`
+`auth.oidcAuth.enabled` | Configures Open ID Connect based authentication for the K10 dashboard | `false`
+`auth.oidcAuth.providerURL` | URL for the OIDC Provider | `None`
+`auth.oidcAuth.redirectURL` | URL to the K10 gateway service | `None`
+`auth.oidcAuth.scopes` | Space separated OIDC scopes required for userinfo. Example: "profile email" | `None`
+`auth.oidcAuth.prompt` | The type of prompt to be used during authentication (none, consent, login or select_account) | `select_account`
+`auth.oidcAuth.clientID` | Client ID given by the OIDC provider for K10 | `None`
+`auth.oidcAuth.clientSecret` | Client secret given by the OIDC provider for K10 | `None`
+`auth.oidcAuth.clientSecretName` | The secret that contains the Client ID and Client secret given by the OIDC provider for K10 | `None`
+`auth.oidcAuth.usernameClaim` | The claim to be used as the username | `sub`
+`auth.oidcAuth.usernamePrefix` | Prefix that has to be used with the username obtained from the username claim | `None`
+`auth.oidcAuth.groupClaim` | Name of a custom OpenID Connect claim for specifying user groups | `None`
+`auth.oidcAuth.groupPrefix` | All groups will be prefixed with this value to prevent conflicts | `None`
+`auth.oidcAuth.sessionDuration` | Maximum OIDC session duration | `1h`
+`auth.oidcAuth.refreshTokenSupport` | Enable OIDC Refresh Token support | `false`
+`auth.openshift.enabled` | Enables access to the K10 dashboard by authenticating with the OpenShift OAuth server | `false`
+`auth.openshift.serviceAccount` | Name of the service account that represents an OAuth client | `None`
+`auth.openshift.clientSecret` | The token corresponding to the service account | `None`
+`auth.openshift.clientSecretName` | The secret that contains the token corresponding to the service account | `None`
+`auth.openshift.dashboardURL` | The URL used for accessing K10's dashboard | `None`
+`auth.openshift.openshiftURL` | The URL for accessing OpenShift's API server | `None`
+`auth.openshift.insecureCA` | To turn off SSL verification of connections to OpenShift | `false`
+`auth.openshift.useServiceAccountCA` | Set this to true to use the CA certificate corresponding to the Service Account ``auth.openshift.serviceAccount`` usually found at ``/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`` | `false`
+`auth.openshift.caCertsAutoExtraction` | Set this to false to disable the OCP CA certificates automatic extraction to the K10 namespace | `true`
+`auth.ldap.enabled` | Configures Active Directory/LDAP based authentication for the K10 dashboard | `false`
+`auth.ldap.restartPod` | To force a restart of the authentication service pod (useful when updating authentication config) | `false`
+`auth.ldap.dashboardURL` | The URL used for accessing K10's dashboard | `None`
+`auth.ldap.host` | Host and optional port of the AD/LDAP server in the form `host:port` | `None`
+`auth.ldap.insecureNoSSL` | Required if the AD/LDAP host is not using TLS | `false`
+`auth.ldap.insecureSkipVerifySSL` | To turn off SSL verification of connections to the AD/LDAP host | `false`
+`auth.ldap.startTLS` | When set to true, ldap:// is used to connect to the server followed by creation of a TLS session. When set to false, ldaps:// is used. | `false`
+`auth.ldap.bindDN` | The Distinguished Name(username) used for connecting to the AD/LDAP host | `None`
+`auth.ldap.bindPW` | The password corresponding to the `bindDN` for connecting to the AD/LDAP host | `None`
+`auth.ldap.bindPWSecretName` | The name of the secret that contains the password corresponding to the `bindDN` for connecting to the AD/LDAP host | `None`
+`auth.ldap.userSearch.baseDN` | The base Distinguished Name to start the AD/LDAP search from | `None`
+`auth.ldap.userSearch.filter` | Optional filter to apply when searching the directory | `None`
+`auth.ldap.userSearch.username` | Attribute used for comparing user entries when searching the directory | `None`
+`auth.ldap.userSearch.idAttr` | AD/LDAP attribute in a user's entry that should map to the user ID field in a token | `None`
+`auth.ldap.userSearch.emailAttr` | AD/LDAP attribute in a user's entry that should map to the email field in a token | `None`
+`auth.ldap.userSearch.nameAttr` | AD/LDAP attribute in a user's entry that should map to the name field in a token | `None`
+`auth.ldap.userSearch.preferredUsernameAttr` | AD/LDAP attribute in a user's entry that should map to the preferred_username field in a token | `None`
+`auth.ldap.groupSearch.baseDN` | The base Distinguished Name to start the AD/LDAP group search from | `None`
+`auth.ldap.groupSearch.filter` | Optional filter to apply when searching the directory for groups | `None`
+`auth.ldap.groupSearch.nameAttr` | The AD/LDAP attribute that represents a group's name in the directory | `None`
+`auth.ldap.groupSearch.userMatchers` | List of field pairs that are used to match a user to a group. | `None`
+`auth.ldap.groupSearch.userMatchers.userAttr` | Attribute in the user's entry that must match with the `groupAttr` while searching for groups | `None`
+`auth.ldap.groupSearch.userMatchers.groupAttr` | Attribute in the group's entry that must match with the `userAttr` while searching for groups | `None`
+`auth.groupAllowList` | A list of groups whose members are allowed access to K10's dashboard | `None`
+`services.securityContext` | Custom [security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) for K10 service containers | `{"runAsUser" : 1000, "fsGroup": 1000}`
+`services.securityContext.runAsUser` | User ID K10 service containers run as| `1000`
+`services.securityContext.runAsGroup` | Group ID K10 service containers run as| `1000`
+`services.securityContext.fsGroup` | FSGroup that owns K10 service container volumes | `1000`
+`siem.logging.cluster.enabled` | Whether to enable writing K10 audit event logs to stdout (standard output) | `true`
+`siem.logging.cloud.path` | Directory path for saving audit logs in a cloud object store | `k10audit/`
+`siem.logging.cloud.awsS3.enabled` | Whether to enable sending K10 audit event logs to AWS S3 | `true`
+`injectKanisterSidecar.enabled` | Enable Kanister sidecar injection for workload pods | `false`
+`injectKanisterSidecar.namespaceSelector.matchLabels` | Set of labels to select namespaces in which sidecar injection is enabled for workloads | `{}`
+`injectKanisterSidecar.objectSelector.matchLabels` | Set of labels to filter workload objects in which the sidecar is injected | `{}`
+`injectKanisterSidecar.webhookServer.port` | Port number on which the mutating webhook server accepts request | `8080`
+`gateway.insecureDisableSSLVerify` | Specifies whether to disable SSL verification for gateway pods | `false`
+`gateway.exposeAdminPort` | Specifies whether to expose Admin port for gateway service | `true`
+`gateway.resources.[requests\|limits].[cpu\|memory]` | Resource requests and limits for gateway pod | `{}`
+`gateway.service.externalPort` | Specifies the gateway services external port | `80`
+`genericVolumeSnapshot.resources.[requests\|limits].[cpu\|memory]` | Specifies resource requests and limits for generic backup sidecar and all temporary Kasten worker Pods. Superseded by ActionPodSpec | `{}`
+`multicluster.enabled` | Choose whether to enable the multi-cluster system components and capabilities | `true`
+`multicluster.primary.create` | Choose whether to setup cluster as a multi-cluster primary | `false`
+`multicluster.primary.name` | Primary cluster name | `''`
+`multicluster.primary.ingressURL` | Primary cluster dashboard URL | `''`
+`prometheus.k10image.registry` | (optional) Set Prometheus image registry. | `gcr.io`
+`prometheus.k10image.repository` | (optional) Set Prometheus image repository. | `kasten-images`
+`prometheus.rbac.create` | (optional) Whether to create Prometheus RBAC configuration. Warning - this action will allow prometheus to scrape pods in all k8s namespaces | `false`
+`prometheus.alertmanager.enabled` | DEPRECATED: (optional) Enable Prometheus `alertmanager` service | `false`
+`prometheus.alertmanager.serviceAccount.create` | DEPRECATED: (optional) Set true to create ServiceAccount for `alertmanager` | `false`
+`prometheus.networkPolicy.enabled` | DEPRECATED: (optional) Enable Prometheus `networkPolicy` | `false`
+`prometheus.prometheus-node-exporter.enabled` | DEPRECATED: (optional) Enable Prometheus `node-exporter` | `false`
+`prometheus.prometheus-node-exporter.serviceAccount.create` | DEPRECATED: (optional) Set true to create ServiceAccount for `prometheus-node-exporter` | `false`
+`prometheus.prometheus-pushgateway.enabled` | DEPRECATED: (optional) Enable Prometheus `pushgateway` | `false`
+`prometheus.prometheus-pushgateway.serviceAccount.create` | DEPRECATED: (optional) Set true to create ServiceAccount for `prometheus-pushgateway` | `false`
+`prometheus.scrapeCAdvisor` | DEPRECATED: (optional) Enable Prometheus ScrapeCAdvisor | `false`
+`prometheus.server.enabled` | (optional) If false, K10's Prometheus server will not be created, reducing the dashboard's functionality. | `true`
+`prometheus.server.securityContext.runAsUser` | (optional) Set security context `runAsUser` ID for Prometheus server pod | `65534`
+`prometheus.server.securityContext.runAsNonRoot` | (optional) Enable security context `runAsNonRoot` for Prometheus server pod | `true`
+`prometheus.server.securityContext.runAsGroup` | (optional) Set security context `runAsGroup` ID for Prometheus server pod | `65534`
+`prometheus.server.securityContext.fsGroup` | (optional) Set security context `fsGroup` ID for Prometheus server pod | `65534`
+`prometheus.server.retention` | (optional) K10 Prometheus data retention | `"30d"`
+`prometheus.server.strategy.rollingUpdate.maxSurge` | DEPRECATED: (optional) The number of Prometheus server pods that can be created above the desired amount of pods during an update | `"100%"`
+`prometheus.server.strategy.rollingUpdate.maxUnavailable` | DEPRECATED: (optional) The number of Prometheus server pods that can be unavailable during the upgrade process | `"100%"`
+`prometheus.server.strategy.type` | DEPRECATED: (optional) Change default deployment strategy for Prometheus server | `"RollingUpdate"`
+`prometheus.server.persistentVolume.enabled` | DEPRECATED: (optional) If true, K10 Prometheus server will create a Persistent Volume Claim | `true`
+`prometheus.server.persistentVolume.size` | (optional) K10 Prometheus server data Persistent Volume size | `30Gi`
+`prometheus.server.persistentVolume.storageClass` | (optional) StorageClassName used to create Prometheus PVC. Setting this option overwrites global StorageClass value | `""`
+`prometheus.server.configMapOverrideName` | DEPRECATED: (optional) Prometheus configmap name to override default generated name| `k10-prometheus-config`
+`prometheus.server.fullnameOverride` | (optional) Prometheus deployment name to override default generated name| `prometheus-server`
+`prometheus.server.baseURL` | (optional) K10 Prometheus external url path at which the server can be accessed | `/k10/prometheus/`
+`prometheus.server.prefixURL` | (optional) K10 Prometheus prefix slug at which the server can be accessed | `/k10/prometheus/`
+`prometheus.server.serviceAccounts.server.create` | DEPRECATED: (optional) Set true to create ServiceAccount for Prometheus server service | `true`
+`grafana.enabled` | (optional) If false Grafana will not be available | `true`
+`resources...[requests\|limits].[cpu\|memory]` | Overwriting the default K10 [container resource requests and limits](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) | varies depending on the container
+`route.enabled` | Specifies whether the K10 dashboard should be exposed via route | `false`
+`route.host` | FQDN (e.g., `.k10.example.com`) for name-based virtual host | `""`
+`route.path` | URL path for K10 Dashboard (e.g., `/k10`) | `/`
+`route.annotations` | Additional Route object annotations | `{}`
+`route.labels` | Additional Route object labels | `{}`
+`route.tls.enabled` | Configures a TLS use for `route.host` | `false`
+`route.tls.insecureEdgeTerminationPolicy` | Specifies behavior for insecure scheme traffic | `Redirect`
+`route.tls.termination` | Specifies the TLS termination of the route | `edge`
+`apigateway.serviceResolver` | Specifies the resolver used for service discovery in the API gateway (`dns` or `endpoint`) | `dns`
+`limiter.executorReplicas` | Specifies the number of executor-svc Pods used to process Kasten jobs | 3
+`limiter.executorThreads` | Specifies the number of threads per executor-svc Pod used to process Kasten jobs | 8
+`limiter.workloadSnapshotsPerAction` | Per action limit of concurrent manifest data snapshots, based on workload (ex. Namespace, Deployment, StatefulSet, VirtualMachine) | 5
+`limiter.csiSnapshotsPerCluster` | Cluster-wide limit of concurrent CSI VolumeSnapshot creation requests | `10`
+`limiter.directSnapshotsPerCluster` | Cluster-wide limit of concurrent non-CSI snapshot creation requests | `10`
+`limiter.snapshotExportsPerAction` | Per action limit of concurrent volume export operations | `3`
+`limiter.snapshotExportsPerCluster` | Cluster-wide limit of concurrent volume export operations | `10`
+`limiter.genericVolumeBackupsPerCluster` | Cluster-wide limit of concurrent Generic Volume Backup operations | `10`
+`limiter.imageCopiesPerCluster` | Cluster-wide limit of concurrent ImageStream container image backup (i.e. copy from) and restore (i.e. copy to) operations | `10`
+`limiter.workloadRestoresPerAction` | Per action limit of concurrent manifest data restores, based on workload (ex. Namespace, Deployment, StatefulSet, VirtualMachine) | 3
+`limiter.csiSnapshotRestoresPerAction` | Per action limit of concurrent CSI volume provisioning requests when restoring from VolumeSnapshots | 3
+`limiter.volumeRestoresPerAction` | Per action limit of concurrent volume restore operations from an exported backup | 3
+`limiter.volumeRestoresPerCluster` | Cluster-wide limit of concurrent volume restore operations from exported backups | `10`
+`cluster.domainName` | Specifies the domain name of the cluster | `""`
+`timeout.blueprintBackup` | Specifies the timeout (in minutes) for Blueprint backup actions | `45`
+`timeout.blueprintRestore` | Specifies the timeout (in minutes) for Blueprint restore actions | `600`
+`timeout.blueprintDelete` | Specifies the timeout (in minutes) for Blueprint delete actions | `45`
+`timeout.blueprintHooks` | Specifies the timeout (in minutes) for Blueprint backupPrehook and backupPosthook actions | `20`
+`timeout.checkRepoPodReady` | Specifies the timeout (in minutes) for temporary worker Pods used to validate backup repository existence | `20`
+`timeout.statsPodReady` | Specifies the timeout (in minutes) for temporary worker Pods used to collect repository statistics | `20`
+`timeout.efsRestorePodReady` | Specifies the timeout (in minutes) for temporary worker Pods used for shareable volume restore operations | `45`
+`timeout.workerPodReady` | Specifies the timeout (in minutes) for all other temporary worker Pods used during Veeam Kasten operations | `15`
+`timeout.jobWait` | Specifies the timeout (in minutes) for completing execution of any child job, after which the parent job will be canceled. If no value is set, a default of 10 hours will be used | `None`
+`awsConfig.assumeRoleDuration` | Duration of a session token generated by AWS for an IAM role. The minimum value is 15 minutes and the maximum value is the maximum duration setting for that IAM role. For documentation about how to view and edit the maximum session duration for an IAM role see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session. The value accepts a number along with a single character ``m``(for minutes) or ``h`` (for hours) Examples: 60m or 2h | `''`
+`awsConfig.efsBackupVaultName` | Specifies the AWS EFS backup vault name | `k10vault`
+`vmWare.taskTimeoutMin` | Specifies the timeout for VMWare operations | `60`
+`encryption.primaryKey.awsCmkKeyId` | Specifies the AWS CMK key ID for encrypting K10 Primary Key | `None`
+`garbagecollector.daemonPeriod` | Sets garbage collection period (in seconds) | `21600`
+`garbagecollector.keepMaxActions` | Sets maximum actions to keep | `1000`
+`garbagecollector.actions.enabled` | Enables action collectors | `false`
+`kubeVirtVMs.snapshot.unfreezeTimeout` | Defines the time duration within which the VMs must be unfrozen while backing them up. To know more about format [go doc](https://pkg.go.dev/time#ParseDuration) can be followed | `5m`
+`excludedApps` | Specifies a list of applications to be excluded from the dashboard & compliance considerations. Format should be a :ref:`YAML array` | `["kube-system", "kube-ingress", "kube-node-lease", "kube-public", "kube-rook-ceph"]`
+`workerPodMetricSidecar.enabled` | Enables a sidecar container for temporary worker Pods used to push Pod performance metrics to Prometheus | `true`
+`workerPodMetricSidecar.metricLifetime` | Specifies the period after which metrics for an individual worker Pod are removed from Prometheus | `2m`
+`workerPodMetricSidecar.pushGatewayInterval` | Specifies the frequency for pushing metrics into Prometheus | `30s`
+`workerPodMetricSidecar.resources.[requests\|limits].[cpu\|memory]` | Specifies resource requests and limits for the temporary worker Pod metric sidecar | `{}`
+`forceRootInBlueprintActions` | Forces any Pod created by a Blueprint to run as root user | `true`
+`defaultPriorityClassName` | Specifies the default [priority class](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass) name for all K10 deployments and ephemeral pods | `None`
+`priorityClassName.` | Overrides the default [priority class](https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass) name for the specified deployment | `{}`
+`ephemeralPVCOverhead` | Set the percentage increase for the ephemeral Persistent Volume Claim's storage request, e.g. PVC size = (file raw size) * (1 + `ephemeralPVCOverhead`) | `0.1`
+`datastore.parallelUploads` | Specifies how many files can be uploaded in parallel to the data store | `8`
+`datastore.parallelDownloads` | Specifies how many files can be downloaded in parallel from the data store | `8`
+`kastenDisasterRecovery.quickMode.enabled` | Enables K10 Quick Disaster Recovery | `false`
+`fips.enabled` | Specifies whether K10 should be run in the FIPS mode of operation | `false`
+`workerPodCRDs.enabled` | Specifies whether K10 should use `ActionPodSpec` for granular resource control of worker pods | `false`
+`workerPodCRDs.resourcesRequests.maxCPU` | Max CPU which might be setup in `ActionPodSpec` | `''`
+`workerPodCRDs.resourcesRequests.maxMemory` | Max memory which might be setup in `ActionPodSpec` | `''`
+`workerPodCRDs.defaultActionPodSpec.name` | The name of `ActionPodSpec` that will be used by default for worker pod resources. | `''`
+`workerPodCRDs.defaultActionPodSpec.namespace` | The namespace of `ActionPodSpec` that will be used by default for worker pod resources. | `''`
+
+
+
+## Helm tips and tricks
+
+There is a way of setting values via a yaml file instead of using `--set`.
+First, copy/paste values into a file (e.g., my_values.yaml):
+
+```yaml
+secrets:
+ awsAccessKeyId: ${AWS_ACCESS_KEY_ID}
+ awsSecretAccessKey: ${AWS_SECRET_ACCESS_KEY}
+```
+
+and then run:
+
+```bash
+ envsubst < my_values.yaml > my_values_out.yaml && helm install k10 kasten/k10 -f my_values_out.yaml
+```
+
+To set a single value from a file, `--set-file` may be used over `--set`:
+
+```bash
+ helm install k10 kasten/k10 --set-file license=my_license.lic
+```
+
+
+To use non-default GCP ServiceAccount (SA) credentials, the credentials JSON file needs to be encoded into a base64
+string:
+
+```bash
+ sa_key=$(base64 -w0 sa-key.json)
+ helm install k10 kasten/k10 --namespace=kasten-io --set secrets.googleApiKey=$sa_key
+```
+
+If the Google Service Account belongs to a project other than the one in which the cluster
+is located, then the project's ID of the cluster must be also provided during the installation:
+
+```bash
+ sa_key=$(base64 -w0 sa-key.json)
+ helm install k10 kasten/k10 --namespace=kasten-io --set secrets.googleApiKey=$sa_key --set secrets.googleProjectId=
+```
diff --git a/charts/kasten/k10/7.0.1401/app-readme.md b/charts/kasten/k10/7.0.1401/app-readme.md
new file mode 100644
index 000000000..1b221891b
--- /dev/null
+++ b/charts/kasten/k10/7.0.1401/app-readme.md
@@ -0,0 +1,5 @@
+The K10 data management platform, purpose-built for Kubernetes, provides enterprise operations teams an easy-to-use, scalable, and secure system for backup/restore, disaster recovery, and mobility of Kubernetes applications.
+
+K10’s application-centric approach and deep integrations with relational and NoSQL databases, Kubernetes distributions, and all clouds provide teams the freedom of infrastructure choice without sacrificing operational simplicity. Policy-driven and extensible, K10 provides a native Kubernetes API and includes features such as full-spectrum consistency, database integrations, automatic application discovery, multi-cloud mobility, and a powerful web-based user interface.
+
+For more information, refer to the docs [https://docs.kasten.io/](https://docs.kasten.io/)
diff --git a/charts/kasten/k10/7.0.1401/charts/grafana/.helmignore b/charts/kasten/k10/7.0.1401/charts/grafana/.helmignore
new file mode 100644
index 000000000..8cade1318
--- /dev/null
+++ b/charts/kasten/k10/7.0.1401/charts/grafana/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.vscode
+.project
+.idea/
+*.tmproj
+OWNERS
diff --git a/charts/kasten/k10/7.0.1401/charts/grafana/Chart.yaml b/charts/kasten/k10/7.0.1401/charts/grafana/Chart.yaml
new file mode 100644
index 000000000..b5e9b92dc
--- /dev/null
+++ b/charts/kasten/k10/7.0.1401/charts/grafana/Chart.yaml
@@ -0,0 +1,35 @@
+annotations:
+ artifacthub.io/license: Apache-2.0
+ artifacthub.io/links: |
+ - name: Chart Source
+ url: https://github.com/grafana/helm-charts
+ - name: Upstream Project
+ url: https://github.com/grafana/grafana
+apiVersion: v2
+appVersion: 11.2.2-security-01
+description: The leading tool for querying and visualizing time series and metrics.
+home: https://grafana.com
+icon: https://artifacthub.io/image/b4fed1a7-6c8f-4945-b99d-096efa3e4116
+keywords:
+- monitoring
+- metric
+kubeVersion: ^1.8.0-0
+maintainers:
+- email: zanhsieh@gmail.com
+ name: zanhsieh
+- email: rluckie@cisco.com
+ name: rtluckie
+- email: maor.friedman@redhat.com
+ name: maorfr
+- email: miroslav.hadzhiev@gmail.com
+ name: Xtigyro
+- email: mail@torstenwalter.de
+ name: torstenwalter
+- email: github@jkroepke.de
+ name: jkroepke
+name: grafana
+sources:
+- https://github.com/grafana/grafana
+- https://github.com/grafana/helm-charts
+type: application
+version: 8.5.8
diff --git a/charts/kasten/k10/7.0.1401/charts/grafana/README.md b/charts/kasten/k10/7.0.1401/charts/grafana/README.md
new file mode 100644
index 000000000..4ab1a01c3
--- /dev/null
+++ b/charts/kasten/k10/7.0.1401/charts/grafana/README.md
@@ -0,0 +1,783 @@
+# Grafana Helm Chart
+
+* Installs the web dashboarding system [Grafana](http://grafana.org/)
+
+## Get Repo Info
+
+```console
+helm repo add grafana https://grafana.github.io/helm-charts
+helm repo update
+```
+
+_See [helm repo](https://helm.sh/docs/helm/helm_repo/) for command documentation._
+
+## Installing the Chart
+
+To install the chart with the release name `my-release`:
+
+```console
+helm install my-release grafana/grafana
+```
+
+## Uninstalling the Chart
+
+To uninstall/delete the my-release deployment:
+
+```console
+helm delete my-release
+```
+
+The command removes all the Kubernetes components associated with the chart and deletes the release.
+
+## Upgrading an existing Release to a new major version
+
+A major chart version change (like v1.2.3 -> v2.0.0) indicates that there is an
+incompatible breaking change needing manual actions.
+
+### To 4.0.0 (And 3.12.1)
+
+This version requires Helm >= 2.12.0.
+
+### To 5.0.0
+
+You have to add --force to your helm upgrade command as the labels of the chart have changed.
+
+### To 6.0.0
+
+This version requires Helm >= 3.1.0.
+
+### To 7.0.0
+
+For consistency with other Helm charts, the `global.image.registry` parameter was renamed
+to `global.imageRegistry`. If you were not previously setting `global.image.registry`, no action
+is required on upgrade. If you were previously setting `global.image.registry`, you will
+need to instead set `global.imageRegistry`.
+
+## Configuration
+
+| Parameter | Description | Default |
+|-------------------------------------------|-----------------------------------------------|---------------------------------------------------------|
+| `replicas` | Number of nodes | `1` |
+| `podDisruptionBudget.minAvailable` | Pod disruption minimum available | `nil` |
+| `podDisruptionBudget.maxUnavailable` | Pod disruption maximum unavailable | `nil` |
+| `podDisruptionBudget.apiVersion` | Pod disruption apiVersion | `nil` |
+| `deploymentStrategy` | Deployment strategy | `{ "type": "RollingUpdate" }` |
+| `livenessProbe` | Liveness Probe settings | `{ "httpGet": { "path": "/api/health", "port": 3000 } "initialDelaySeconds": 60, "timeoutSeconds": 30, "failureThreshold": 10 }` |
+| `readinessProbe` | Readiness Probe settings | `{ "httpGet": { "path": "/api/health", "port": 3000 } }`|
+| `securityContext` | Deployment securityContext | `{"runAsUser": 472, "runAsGroup": 472, "fsGroup": 472}` |
+| `priorityClassName` | Name of Priority Class to assign pods | `nil` |
+| `image.registry` | Image registry | `docker.io` |
+| `image.repository` | Image repository | `grafana/grafana` |
+| `image.tag` | Overrides the Grafana image tag whose default is the chart appVersion (`Must be >= 5.0.0`) | `` |
+| `image.sha` | Image sha (optional) | `` |
+| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
+| `image.pullSecrets` | Image pull secrets (can be templated) | `[]` |
+| `service.enabled` | Enable grafana service | `true` |
+| `service.ipFamilies` | Kubernetes service IP families | `[]` |
+| `service.ipFamilyPolicy` | Kubernetes service IP family policy | `""` |
+| `service.type` | Kubernetes service type | `ClusterIP` |
+| `service.port` | Kubernetes port where service is exposed | `80` |
+| `service.portName` | Name of the port on the service | `service` |
+| `service.appProtocol` | Adds the appProtocol field to the service | `` |
+| `service.targetPort` | Internal service is port | `3000` |
+| `service.nodePort` | Kubernetes service nodePort | `nil` |
+| `service.annotations` | Service annotations (can be templated) | `{}` |
+| `service.labels` | Custom labels | `{}` |
+| `service.clusterIP` | internal cluster service IP | `nil` |
+| `service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `nil` |
+| `service.loadBalancerSourceRanges` | list of IP CIDRs allowed access to lb (if supported) | `[]` |
+| `service.externalIPs` | service external IP addresses | `[]` |
+| `service.externalTrafficPolicy` | change the default externalTrafficPolicy | `nil` |
+| `headlessService` | Create a headless service | `false` |
+| `extraExposePorts` | Additional service ports for sidecar containers| `[]` |
+| `hostAliases` | adds rules to the pod's /etc/hosts | `[]` |
+| `ingress.enabled` | Enables Ingress | `false` |
+| `ingress.annotations` | Ingress annotations (values are templated) | `{}` |
+| `ingress.labels` | Custom labels | `{}` |
+| `ingress.path` | Ingress accepted path | `/` |
+| `ingress.pathType` | Ingress type of path | `Prefix` |
+| `ingress.hosts` | Ingress accepted hostnames | `["chart-example.local"]` |
+| `ingress.extraPaths` | Ingress extra paths to prepend to every host configuration. Useful when configuring [custom actions with AWS ALB Ingress Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.6/guide/ingress/annotations/#actions). Requires `ingress.hosts` to have one or more host entries. | `[]` |
+| `ingress.tls` | Ingress TLS configuration | `[]` |
+| `ingress.ingressClassName` | Ingress Class Name. MAY be required for Kubernetes versions >= 1.18 | `""` |
+| `resources` | CPU/Memory resource requests/limits | `{}` |
+| `nodeSelector` | Node labels for pod assignment | `{}` |
+| `tolerations` | Toleration labels for pod assignment | `[]` |
+| `affinity` | Affinity settings for pod assignment | `{}` |
+| `extraInitContainers` | Init containers to add to the grafana pod | `{}` |
+| `extraContainers` | Sidecar containers to add to the grafana pod | `""` |
+| `extraContainerVolumes` | Volumes that can be mounted in sidecar containers | `[]` |
+| `extraLabels` | Custom labels for all manifests | `{}` |
+| `schedulerName` | Name of the k8s scheduler (other than default) | `nil` |
+| `persistence.enabled` | Use persistent volume to store data | `false` |
+| `persistence.type` | Type of persistence (`pvc` or `statefulset`) | `pvc` |
+| `persistence.size` | Size of persistent volume claim | `10Gi` |
+| `persistence.existingClaim` | Use an existing PVC to persist data (can be templated) | `nil` |
+| `persistence.storageClassName` | Type of persistent volume claim | `nil` |
+| `persistence.accessModes` | Persistence access modes | `[ReadWriteOnce]` |
+| `persistence.annotations` | PersistentVolumeClaim annotations | `{}` |
+| `persistence.finalizers` | PersistentVolumeClaim finalizers | `[ "kubernetes.io/pvc-protection" ]` |
+| `persistence.extraPvcLabels` | Extra labels to apply to a PVC. | `{}` |
+| `persistence.subPath` | Mount a sub dir of the persistent volume (can be templated) | `nil` |
+| `persistence.inMemory.enabled` | If persistence is not enabled, whether to mount the local storage in-memory to improve performance | `false` |
+| `persistence.inMemory.sizeLimit` | SizeLimit for the in-memory local storage | `nil` |
+| `persistence.disableWarning` | Hide NOTES warning, useful when persisting to a database | `false` |
+| `initChownData.enabled` | If false, don't reset data ownership at startup | true |
+| `initChownData.image.registry` | init-chown-data container image registry | `docker.io` |
+| `initChownData.image.repository` | init-chown-data container image repository | `busybox` |
+| `initChownData.image.tag` | init-chown-data container image tag | `1.31.1` |
+| `initChownData.image.sha` | init-chown-data container image sha (optional)| `""` |
+| `initChownData.image.pullPolicy` | init-chown-data container image pull policy | `IfNotPresent` |
+| `initChownData.resources` | init-chown-data pod resource requests & limits | `{}` |
+| `schedulerName` | Alternate scheduler name | `nil` |
+| `env` | Extra environment variables passed to pods | `{}` |
+| `envValueFrom` | Environment variables from alternate sources. See the API docs on [EnvVarSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#envvarsource-v1-core) for format details. Can be templated | `{}` |
+| `envFromSecret` | Name of a Kubernetes secret (must be manually created in the same namespace) containing values to be added to the environment. Can be templated | `""` |
+| `envFromSecrets` | List of Kubernetes secrets (must be manually created in the same namespace) containing values to be added to the environment. Can be templated | `[]` |
+| `envFromConfigMaps` | List of Kubernetes ConfigMaps (must be manually created in the same namespace) containing values to be added to the environment. Can be templated | `[]` |
+| `envRenderSecret` | Sensible environment variables passed to pods and stored as secret. (passed through [tpl](https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function)) | `{}` |
+| `enableServiceLinks` | Inject Kubernetes services as environment variables. | `true` |
+| `extraSecretMounts` | Additional grafana server secret mounts | `[]` |
+| `extraVolumeMounts` | Additional grafana server volume mounts | `[]` |
+| `extraVolumes` | Additional Grafana server volumes | `[]` |
+| `automountServiceAccountToken` | Mounted the service account token on the grafana pod. Mandatory, if sidecars are enabled | `true` |
+| `createConfigmap` | Enable creating the grafana configmap | `true` |
+| `extraConfigmapMounts` | Additional grafana server configMap volume mounts (values are templated) | `[]` |
+| `extraEmptyDirMounts` | Additional grafana server emptyDir volume mounts | `[]` |
+| `plugins` | Plugins to be loaded along with Grafana | `[]` |
+| `datasources` | Configure grafana datasources (passed through tpl) | `{}` |
+| `alerting` | Configure grafana alerting (passed through tpl) | `{}` |
+| `notifiers` | Configure grafana notifiers | `{}` |
+| `dashboardProviders` | Configure grafana dashboard providers | `{}` |
+| `dashboards` | Dashboards to import | `{}` |
+| `dashboardsConfigMaps` | ConfigMaps reference that contains dashboards | `{}` |
+| `grafana.ini` | Grafana's primary configuration | `{}` |
+| `global.imageRegistry` | Global image pull registry for all images. | `null` |
+| `global.imagePullSecrets` | Global image pull secrets (can be templated). Allows either an array of {name: pullSecret} maps (k8s-style), or an array of strings (more common helm-style). | `[]` |
+| `ldap.enabled` | Enable LDAP authentication | `false` |
+| `ldap.existingSecret` | The name of an existing secret containing the `ldap.toml` file, this must have the key `ldap-toml`. | `""` |
+| `ldap.config` | Grafana's LDAP configuration | `""` |
+| `annotations` | Deployment annotations | `{}` |
+| `labels` | Deployment labels | `{}` |
+| `podAnnotations` | Pod annotations | `{}` |
+| `podLabels` | Pod labels | `{}` |
+| `podPortName` | Name of the grafana port on the pod | `grafana` |
+| `lifecycleHooks` | Lifecycle hooks for podStart and preStop [Example](https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/#define-poststart-and-prestop-handlers) | `{}` |
+| `sidecar.image.registry` | Sidecar image registry | `quay.io` |
+| `sidecar.image.repository` | Sidecar image repository | `kiwigrid/k8s-sidecar` |
+| `sidecar.image.tag` | Sidecar image tag | `1.28.0` |
+| `sidecar.image.sha` | Sidecar image sha (optional) | `""` |
+| `sidecar.imagePullPolicy` | Sidecar image pull policy | `IfNotPresent` |
+| `sidecar.resources` | Sidecar resources | `{}` |
+| `sidecar.securityContext` | Sidecar securityContext | `{}` |
+| `sidecar.enableUniqueFilenames` | Sets the kiwigrid/k8s-sidecar UNIQUE_FILENAMES environment variable. If set to `true` the sidecar will create unique filenames where duplicate data keys exist between ConfigMaps and/or Secrets within the same or multiple Namespaces. | `false` |
+| `sidecar.alerts.enabled` | Enables the cluster wide search for alerts and adds/updates/deletes them in grafana |`false` |
+| `sidecar.alerts.label` | Label that config maps with alerts should have to be added | `grafana_alert` |
+| `sidecar.alerts.labelValue` | Label value that config maps with alerts should have to be added | `""` |
+| `sidecar.alerts.searchNamespace` | Namespaces list. If specified, the sidecar will search for alerts config-maps inside these namespaces. Otherwise the namespace in which the sidecar is running will be used. It's also possible to specify ALL to search in all namespaces. | `nil` |
+| `sidecar.alerts.watchMethod` | Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. | `WATCH` |
+| `sidecar.alerts.resource` | Should the sidecar looks into secrets, configmaps or both. | `both` |
+| `sidecar.alerts.reloadURL` | Full url of datasource configuration reload API endpoint, to invoke after a config-map change | `"http://localhost:3000/api/admin/provisioning/alerting/reload"` |
+| `sidecar.alerts.skipReload` | Enabling this omits defining the REQ_URL and REQ_METHOD environment variables | `false` |
+| `sidecar.alerts.initAlerts` | Set to true to deploy the alerts sidecar as an initContainer. This is needed if skipReload is true, to load any alerts defined at startup time. | `false` |
+| `sidecar.alerts.extraMounts` | Additional alerts sidecar volume mounts. | `[]` |
+| `sidecar.dashboards.enabled` | Enables the cluster wide search for dashboards and adds/updates/deletes them in grafana | `false` |
+| `sidecar.dashboards.SCProvider` | Enables creation of sidecar provider | `true` |
+| `sidecar.dashboards.provider.name` | Unique name of the grafana provider | `sidecarProvider` |
+| `sidecar.dashboards.provider.orgid` | Id of the organisation, to which the dashboards should be added | `1` |
+| `sidecar.dashboards.provider.folder` | Logical folder in which grafana groups dashboards | `""` |
+| `sidecar.dashboards.provider.folderUid` | Allows you to specify the static UID for the logical folder above | `""` |
+| `sidecar.dashboards.provider.disableDelete` | Activate to avoid the deletion of imported dashboards | `false` |
+| `sidecar.dashboards.provider.allowUiUpdates` | Allow updating provisioned dashboards from the UI | `false` |
+| `sidecar.dashboards.provider.type` | Provider type | `file` |
+| `sidecar.dashboards.provider.foldersFromFilesStructure` | Allow Grafana to replicate dashboard structure from filesystem. | `false` |
+| `sidecar.dashboards.watchMethod` | Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. | `WATCH` |
+| `sidecar.skipTlsVerify` | Set to true to skip tls verification for kube api calls | `nil` |
+| `sidecar.dashboards.label` | Label that config maps with dashboards should have to be added | `grafana_dashboard` |
+| `sidecar.dashboards.labelValue` | Label value that config maps with dashboards should have to be added | `""` |
+| `sidecar.dashboards.folder` | Folder in the pod that should hold the collected dashboards (unless `sidecar.dashboards.defaultFolderName` is set). This path will be mounted. | `/tmp/dashboards` |
+| `sidecar.dashboards.folderAnnotation` | The annotation the sidecar will look for in configmaps to override the destination folder for files | `nil` |
+| `sidecar.dashboards.defaultFolderName` | The default folder name, it will create a subfolder under the `sidecar.dashboards.folder` and put dashboards in there instead | `nil` |
+| `sidecar.dashboards.searchNamespace` | Namespaces list. If specified, the sidecar will search for dashboards config-maps inside these namespaces. Otherwise the namespace in which the sidecar is running will be used. It's also possible to specify ALL to search in all namespaces. | `nil` |
+| `sidecar.dashboards.script` | Absolute path to shell script to execute after a configmap got reloaded. | `nil` |
+| `sidecar.dashboards.reloadURL` | Full url of dashboards configuration reload API endpoint, to invoke after a config-map change | `"http://localhost:3000/api/admin/provisioning/dashboards/reload"` |
+| `sidecar.dashboards.skipReload` | Enabling this omits defining the REQ_USERNAME, REQ_PASSWORD, REQ_URL and REQ_METHOD environment variables | `false` |
+| `sidecar.dashboards.resource` | Should the sidecar looks into secrets, configmaps or both. | `both` |
+| `sidecar.dashboards.extraMounts` | Additional dashboard sidecar volume mounts. | `[]` |
+| `sidecar.datasources.enabled` | Enables the cluster wide search for datasources and adds/updates/deletes them in grafana |`false` |
+| `sidecar.datasources.label` | Label that config maps with datasources should have to be added | `grafana_datasource` |
+| `sidecar.datasources.labelValue` | Label value that config maps with datasources should have to be added | `""` |
+| `sidecar.datasources.searchNamespace` | Namespaces list. If specified, the sidecar will search for datasources config-maps inside these namespaces. Otherwise the namespace in which the sidecar is running will be used. It's also possible to specify ALL to search in all namespaces. | `nil` |
+| `sidecar.datasources.watchMethod` | Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. | `WATCH` |
+| `sidecar.datasources.resource` | Should the sidecar looks into secrets, configmaps or both. | `both` |
+| `sidecar.datasources.reloadURL` | Full url of datasource configuration reload API endpoint, to invoke after a config-map change | `"http://localhost:3000/api/admin/provisioning/datasources/reload"` |
+| `sidecar.datasources.skipReload` | Enabling this omits defining the REQ_URL and REQ_METHOD environment variables | `false` |
+| `sidecar.datasources.initDatasources` | Set to true to deploy the datasource sidecar as an initContainer in addition to a container. This is needed if skipReload is true, to load any datasources defined at startup time. | `false` |
+| `sidecar.notifiers.enabled` | Enables the cluster wide search for notifiers and adds/updates/deletes them in grafana | `false` |
+| `sidecar.notifiers.label` | Label that config maps with notifiers should have to be added | `grafana_notifier` |
+| `sidecar.notifiers.labelValue` | Label value that config maps with notifiers should have to be added | `""` |
+| `sidecar.notifiers.searchNamespace` | Namespaces list. If specified, the sidecar will search for notifiers config-maps (or secrets) inside these namespaces. Otherwise the namespace in which the sidecar is running will be used. It's also possible to specify ALL to search in all namespaces. | `nil` |
+| `sidecar.notifiers.watchMethod` | Method to use to detect ConfigMap changes. With WATCH the sidecar will do a WATCH requests, with SLEEP it will list all ConfigMaps, then sleep for 60 seconds. | `WATCH` |
+| `sidecar.notifiers.resource` | Should the sidecar looks into secrets, configmaps or both. | `both` |
+| `sidecar.notifiers.reloadURL` | Full url of notifier configuration reload API endpoint, to invoke after a config-map change | `"http://localhost:3000/api/admin/provisioning/notifications/reload"` |
+| `sidecar.notifiers.skipReload` | Enabling this omits defining the REQ_URL and REQ_METHOD environment variables | `false` |
+| `sidecar.notifiers.initNotifiers` | Set to true to deploy the notifier sidecar as an initContainer in addition to a container. This is needed if skipReload is true, to load any notifiers defined at startup time. | `false` |
+| `smtp.existingSecret` | The name of an existing secret containing the SMTP credentials. | `""` |
+| `smtp.userKey` | The key in the existing SMTP secret containing the username. | `"user"` |
+| `smtp.passwordKey` | The key in the existing SMTP secret containing the password. | `"password"` |
+| `admin.existingSecret` | The name of an existing secret containing the admin credentials (can be templated). | `""` |
+| `admin.userKey` | The key in the existing admin secret containing the username. | `"admin-user"` |
+| `admin.passwordKey` | The key in the existing admin secret containing the password. | `"admin-password"` |
+| `serviceAccount.automountServiceAccountToken` | Automount the service account token on all pods where is service account is used | `false` |
+| `serviceAccount.annotations` | ServiceAccount annotations | |
+| `serviceAccount.create` | Create service account | `true` |
+| `serviceAccount.labels` | ServiceAccount labels | `{}` |
+| `serviceAccount.name` | Service account name to use, when empty will be set to created account if `serviceAccount.create` is set else to `default` | `` |
+| `serviceAccount.nameTest` | Service account name to use for test, when empty will be set to created account if `serviceAccount.create` is set else to `default` | `nil` |
+| `rbac.create` | Create and use RBAC resources | `true` |
+| `rbac.namespaced` | Creates Role and Rolebinding instead of the default ClusterRole and ClusteRoleBindings for the grafana instance | `false` |
+| `rbac.useExistingRole` | Set to a rolename to use existing role - skipping role creating - but still doing serviceaccount and rolebinding to the rolename set here. | `nil` |
+| `rbac.pspEnabled` | Create PodSecurityPolicy (with `rbac.create`, grant roles permissions as well) | `false` |
+| `rbac.pspUseAppArmor` | Enforce AppArmor in created PodSecurityPolicy (requires `rbac.pspEnabled`) | `false` |
+| `rbac.extraRoleRules` | Additional rules to add to the Role | [] |
+| `rbac.extraClusterRoleRules` | Additional rules to add to the ClusterRole | [] |
+| `command` | Define command to be executed by grafana container at startup | `nil` |
+| `args` | Define additional args if command is used | `nil` |
+| `testFramework.enabled` | Whether to create test-related resources | `true` |
+| `testFramework.image.registry` | `test-framework` image registry. | `docker.io` |
+| `testFramework.image.repository` | `test-framework` image repository. | `bats/bats` |
+| `testFramework.image.tag` | `test-framework` image tag. | `v1.4.1` |
+| `testFramework.imagePullPolicy` | `test-framework` image pull policy. | `IfNotPresent` |
+| `testFramework.securityContext` | `test-framework` securityContext | `{}` |
+| `downloadDashboards.env` | Environment variables to be passed to the `download-dashboards` container | `{}` |
+| `downloadDashboards.envFromSecret` | Name of a Kubernetes secret (must be manually created in the same namespace) containing values to be added to the environment. Can be templated | `""` |
+| `downloadDashboards.resources` | Resources of `download-dashboards` container | `{}` |
+| `downloadDashboardsImage.registry` | Curl docker image registry | `docker.io` |
+| `downloadDashboardsImage.repository` | Curl docker image repository | `curlimages/curl` |
+| `downloadDashboardsImage.tag` | Curl docker image tag | `7.73.0` |
+| `downloadDashboardsImage.sha` | Curl docker image sha (optional) | `""` |
+| `downloadDashboardsImage.pullPolicy` | Curl docker image pull policy | `IfNotPresent` |
+| `namespaceOverride` | Override the deployment namespace | `""` (`Release.Namespace`) |
+| `serviceMonitor.enabled` | Use servicemonitor from prometheus operator | `false` |
+| `serviceMonitor.namespace` | Namespace this servicemonitor is installed in | |
+| `serviceMonitor.interval` | How frequently Prometheus should scrape | `1m` |
+| `serviceMonitor.path` | Path to scrape | `/metrics` |
+| `serviceMonitor.scheme` | Scheme to use for metrics scraping | `http` |
+| `serviceMonitor.tlsConfig` | TLS configuration block for the endpoint | `{}` |
+| `serviceMonitor.labels` | Labels for the servicemonitor passed to Prometheus Operator | `{}` |
+| `serviceMonitor.scrapeTimeout` | Timeout after which the scrape is ended | `30s` |
+| `serviceMonitor.relabelings` | RelabelConfigs to apply to samples before scraping. | `[]` |
+| `serviceMonitor.metricRelabelings` | MetricRelabelConfigs to apply to samples before ingestion. | `[]` |
+| `revisionHistoryLimit` | Number of old ReplicaSets to retain | `10` |
+| `imageRenderer.enabled` | Enable the image-renderer deployment & service | `false` |
+| `imageRenderer.image.registry` | image-renderer Image registry | `docker.io` |
+| `imageRenderer.image.repository` | image-renderer Image repository | `grafana/grafana-image-renderer` |
+| `imageRenderer.image.tag` | image-renderer Image tag | `latest` |
+| `imageRenderer.image.sha` | image-renderer Image sha (optional) | `""` |
+| `imageRenderer.image.pullPolicy` | image-renderer ImagePullPolicy | `Always` |
+| `imageRenderer.env` | extra env-vars for image-renderer | `{}` |
+| `imageRenderer.envValueFrom` | Environment variables for image-renderer from alternate sources. See the API docs on [EnvVarSource](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#envvarsource-v1-core) for format details. Can be templated | `{}` |
+| `imageRenderer.extraConfigmapMounts` | Additional image-renderer configMap volume mounts (values are templated) | `[]` |
+| `imageRenderer.extraSecretMounts` | Additional image-renderer secret volume mounts | `[]` |
+| `imageRenderer.extraVolumeMounts` | Additional image-renderer volume mounts | `[]` |
+| `imageRenderer.extraVolumes` | Additional image-renderer volumes | `[]` |
+| `imageRenderer.serviceAccountName` | image-renderer deployment serviceAccountName | `""` |
+| `imageRenderer.securityContext` | image-renderer deployment securityContext | `{}` |
+| `imageRenderer.podAnnotations` | image-renderer image-renderer pod annotation | `{}` |
+| `imageRenderer.hostAliases` | image-renderer deployment Host Aliases | `[]` |
+| `imageRenderer.priorityClassName` | image-renderer deployment priority class | `''` |
+| `imageRenderer.service.enabled` | Enable the image-renderer service | `true` |
+| `imageRenderer.service.portName` | image-renderer service port name | `http` |
+| `imageRenderer.service.port` | image-renderer port used by deployment | `8081` |
+| `imageRenderer.service.targetPort` | image-renderer service port used by service | `8081` |
+| `imageRenderer.appProtocol` | Adds the appProtocol field to the service | `` |
+| `imageRenderer.grafanaSubPath` | Grafana sub path to use for image renderer callback url | `''` |
+| `imageRenderer.serverURL` | Remote image renderer url | `''` |
+| `imageRenderer.renderingCallbackURL` | Callback url for the Grafana image renderer | `''` |
+| `imageRenderer.podPortName` | name of the image-renderer port on the pod | `http` |
+| `imageRenderer.revisionHistoryLimit` | number of image-renderer replica sets to keep | `10` |
+| `imageRenderer.networkPolicy.limitIngress` | Enable a NetworkPolicy to limit inbound traffic from only the created grafana pods | `true` |
+| `imageRenderer.networkPolicy.limitEgress` | Enable a NetworkPolicy to limit outbound traffic to only the created grafana pods | `false` |
+| `imageRenderer.resources` | Set resource limits for image-renderer pods | `{}` |
+| `imageRenderer.nodeSelector` | Node labels for pod assignment | `{}` |
+| `imageRenderer.tolerations` | Toleration labels for pod assignment | `[]` |
+| `imageRenderer.affinity` | Affinity settings for pod assignment | `{}` |
+| `networkPolicy.enabled` | Enable creation of NetworkPolicy resources. | `false` |
+| `networkPolicy.allowExternal` | Don't require client label for connections | `true` |
+| `networkPolicy.explicitNamespacesSelector` | A Kubernetes LabelSelector to explicitly select namespaces from which traffic could be allowed | `{}` |
+| `networkPolicy.ingress` | Enable the creation of an ingress network policy | `true` |
+| `networkPolicy.egress.enabled` | Enable the creation of an egress network policy | `false` |
+| `networkPolicy.egress.ports` | An array of ports to allow for the egress | `[]` |
+| `enableKubeBackwardCompatibility` | Enable backward compatibility of kubernetes where pod's defintion version below 1.13 doesn't have the enableServiceLinks option | `false` |
+
+### Example ingress with path
+
+With grafana 6.3 and above
+
+```yaml
+grafana.ini:
+ server:
+ domain: monitoring.example.com
+ root_url: "%(protocol)s://%(domain)s/grafana"
+ serve_from_sub_path: true
+ingress:
+ enabled: true
+ hosts:
+ - "monitoring.example.com"
+ path: "/grafana"
+```
+
+### Example of extraVolumeMounts and extraVolumes
+
+Configure additional volumes with `extraVolumes` and volume mounts with `extraVolumeMounts`.
+
+Example for `extraVolumeMounts` and corresponding `extraVolumes`:
+
+```yaml
+extraVolumeMounts:
+ - name: plugins
+ mountPath: /var/lib/grafana/plugins
+ subPath: configs/grafana/plugins
+ readOnly: false
+ - name: dashboards
+ mountPath: /var/lib/grafana/dashboards
+ hostPath: /usr/shared/grafana/dashboards
+ readOnly: false
+
+extraVolumes:
+ - name: plugins
+ existingClaim: existing-grafana-claim
+ - name: dashboards
+ hostPath: /usr/shared/grafana/dashboards
+```
+
+Volumes default to `emptyDir`. Set to `persistentVolumeClaim`,
+`hostPath`, `csi`, or `configMap` for other types. For a
+`persistentVolumeClaim`, specify an existing claim name with
+`existingClaim`.
+
+## Import dashboards
+
+There are a few methods to import dashboards to Grafana. Below are some examples and explanations as to how to use each method:
+
+```yaml
+dashboards:
+ default:
+ some-dashboard:
+ json: |
+ {
+ "annotations":
+
+ ...
+ # Complete json file here
+ ...
+
+ "title": "Some Dashboard",
+ "uid": "abcd1234",
+ "version": 1
+ }
+ custom-dashboard:
+ # This is a path to a file inside the dashboards directory inside the chart directory
+ file: dashboards/custom-dashboard.json
+ prometheus-stats:
+ # Ref: https://grafana.com/dashboards/2
+ gnetId: 2
+ revision: 2
+ datasource: Prometheus
+ loki-dashboard-quick-search:
+ gnetId: 12019
+ revision: 2
+ datasource:
+ - name: DS_PROMETHEUS
+ value: Prometheus
+ - name: DS_LOKI
+ value: Loki
+ local-dashboard:
+ url: https://raw.githubusercontent.com/user/repository/master/dashboards/dashboard.json
+```
+
+## BASE64 dashboards
+
+Dashboards could be stored on a server that does not return JSON directly and instead of it returns a Base64 encoded file (e.g. Gerrit)
+A new parameter has been added to the url use case so if you specify a b64content value equals to true after the url entry a Base64 decoding is applied before save the file to disk.
+If this entry is not set or is equals to false not decoding is applied to the file before saving it to disk.
+
+### Gerrit use case
+
+Gerrit API for download files has the following schema: where {project-name} and
+{file-id} usually has '/' in their values and so they MUST be replaced by %2F so if project-name is user/repo, branch-id is master and file-id is equals to dir1/dir2/dashboard
+the url value is
+
+## Sidecar for dashboards
+
+If the parameter `sidecar.dashboards.enabled` is set, a sidecar container is deployed in the grafana
+pod. This container watches all configmaps (or secrets) in the cluster and filters out the ones with
+a label as defined in `sidecar.dashboards.label`. The files defined in those configmaps are written
+to a folder and accessed by grafana. Changes to the configmaps are monitored and the imported
+dashboards are deleted/updated.
+
+A recommendation is to use one configmap per dashboard, as a reduction of multiple dashboards inside
+one configmap is currently not properly mirrored in grafana.
+
+Example dashboard config:
+
+```yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: sample-grafana-dashboard
+ labels:
+ grafana_dashboard: "1"
+data:
+ k8s-dashboard.json: |-
+ [...]
+```
+
+## Sidecar for datasources
+
+If the parameter `sidecar.datasources.enabled` is set, an init container is deployed in the grafana
+pod. This container lists all secrets (or configmaps, though not recommended) in the cluster and
+filters out the ones with a label as defined in `sidecar.datasources.label`. The files defined in
+those secrets are written to a folder and accessed by grafana on startup. Using these yaml files,
+the data sources in grafana can be imported.
+
+Should you aim for reloading datasources in Grafana each time the config is changed, set `sidecar.datasources.skipReload: false` and adjust `sidecar.datasources.reloadURL` to `http://..svc.cluster.local/api/admin/provisioning/datasources/reload`.
+
+Secrets are recommended over configmaps for this usecase because datasources usually contain private
+data like usernames and passwords. Secrets are the more appropriate cluster resource to manage those.
+
+Example values to add a postgres datasource as a kubernetes secret:
+
+```yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: grafana-datasources
+ labels:
+ grafana_datasource: 'true' # default value for: sidecar.datasources.label
+stringData:
+ pg-db.yaml: |-
+ apiVersion: 1
+ datasources:
+ - name: My pg db datasource
+ type: postgres
+ url: my-postgresql-db:5432
+ user: db-readonly-user
+ secureJsonData:
+ password: 'SUperSEcretPa$$word'
+ jsonData:
+ database: my_datase
+ sslmode: 'disable' # disable/require/verify-ca/verify-full
+ maxOpenConns: 0 # Grafana v5.4+
+ maxIdleConns: 2 # Grafana v5.4+
+ connMaxLifetime: 14400 # Grafana v5.4+
+ postgresVersion: 1000 # 903=9.3, 904=9.4, 905=9.5, 906=9.6, 1000=10
+ timescaledb: false
+ # allow users to edit datasources from the UI.
+ editable: false
+```
+
+Example values to add a datasource adapted from [Grafana](http://docs.grafana.org/administration/provisioning/#example-datasource-config-file):
+
+```yaml
+datasources:
+ datasources.yaml:
+ apiVersion: 1
+ datasources:
+ # name of the datasource. Required
+ - name: Graphite
+ # datasource type. Required
+ type: graphite
+ # access mode. proxy or direct (Server or Browser in the UI). Required
+ access: proxy
+ # org id. will default to orgId 1 if not specified
+ orgId: 1
+ # url
+ url: http://localhost:8080
+ # database password, if used
+ password:
+ # database user, if used
+ user:
+ # database name, if used
+ database:
+ # enable/disable basic auth
+ basicAuth:
+ # basic auth username
+ basicAuthUser:
+ # basic auth password
+ basicAuthPassword:
+ # enable/disable with credentials headers
+ withCredentials:
+ # mark as default datasource. Max one per org
+ isDefault:
+ #