committed by
GitHub
167 changed files with 15637 additions and 1 deletions
@ -0,0 +1 @@ |
|||
.DS_Store |
@ -0,0 +1,16 @@ |
|||
apiVersion: argoproj.io/v1alpha1 |
|||
kind: Application |
|||
metadata: |
|||
name: cert-manager |
|||
namespace: argocd |
|||
finalizers: |
|||
- resources-finalizer.argocd.argoproj.io |
|||
spec: |
|||
destination: |
|||
namespace: cert-manager |
|||
server: {{ .Values.spec.destination.server }} |
|||
project: default |
|||
source: |
|||
path: cert-manager |
|||
repoURL: {{ .Values.spec.source.repoURL }} |
|||
targetRevision: {{ .Values.spec.source.targetRevision }} |
@ -0,0 +1,16 @@ |
|||
apiVersion: argoproj.io/v1alpha1 |
|||
kind: Application |
|||
metadata: |
|||
name: metal-lb |
|||
namespace: argocd |
|||
finalizers: |
|||
- resources-finalizer.argocd.argoproj.io |
|||
spec: |
|||
destination: |
|||
namespace: metal-lb |
|||
server: {{ .Values.spec.destination.server }} |
|||
project: default |
|||
source: |
|||
path: metal-lb |
|||
repoURL: {{ .Values.spec.source.repoURL }} |
|||
targetRevision: {{ .Values.spec.source.targetRevision }} |
@ -0,0 +1,16 @@ |
|||
apiVersion: argoproj.io/v1alpha1 |
|||
kind: Application |
|||
metadata: |
|||
name: my-bloody-jenkins |
|||
namespace: argocd |
|||
finalizers: |
|||
- resources-finalizer.argocd.argoproj.io |
|||
spec: |
|||
destination: |
|||
namespace: my-bloody-jenkins |
|||
server: {{ .Values.spec.destination.server }} |
|||
project: default |
|||
source: |
|||
path: my-bloody-jenkins |
|||
repoURL: {{ .Values.spec.source.repoURL }} |
|||
targetRevision: {{ .Values.spec.source.targetRevision }} |
@ -0,0 +1,16 @@ |
|||
apiVersion: argoproj.io/v1alpha1 |
|||
kind: Application |
|||
metadata: |
|||
name: nginx-ingress |
|||
namespace: argocd |
|||
finalizers: |
|||
- resources-finalizer.argocd.argoproj.io |
|||
spec: |
|||
destination: |
|||
namespace: nginx-ingress |
|||
server: {{ .Values.spec.destination.server }} |
|||
project: default |
|||
source: |
|||
path: nginx-ingress |
|||
repoURL: {{ .Values.spec.source.repoURL }} |
|||
targetRevision: {{ .Values.spec.source.targetRevision }} |
@ -0,0 +1,22 @@ |
|||
annotations: |
|||
artifacthub.io/prerelease: "false" |
|||
artifacthub.io/signKey: | |
|||
fingerprint: 1020CF3C033D4F35BAE1C19E1226061C665DF13E |
|||
url: https://cert-manager.io/public-keys/cert-manager-keyring-2021-09-20-1020CF3C033D4F35BAE1C19E1226061C665DF13E.gpg |
|||
apiVersion: v1 |
|||
appVersion: v1.8.1 |
|||
description: A Helm chart for cert-manager |
|||
home: https://github.com/cert-manager/cert-manager |
|||
icon: https://raw.githubusercontent.com/cert-manager/cert-manager/master/logo/logo.png |
|||
keywords: |
|||
- cert-manager |
|||
- kube-lego |
|||
- letsencrypt |
|||
- tls |
|||
maintainers: |
|||
- email: cert-manager-maintainers@googlegroups.com |
|||
name: cert-manager-maintainers |
|||
name: cert-manager |
|||
sources: |
|||
- https://github.com/cert-manager/cert-manager |
|||
version: v1.8.1 |
@ -0,0 +1,220 @@ |
|||
# cert-manager |
|||
|
|||
cert-manager is a Kubernetes addon to automate the management and issuance of |
|||
TLS certificates from various issuing sources. |
|||
|
|||
It will ensure certificates are valid and up to date periodically, and attempt |
|||
to renew certificates at an appropriate time before expiry. |
|||
|
|||
## Prerequisites |
|||
|
|||
- Kubernetes 1.18+ |
|||
|
|||
## Installing the Chart |
|||
|
|||
Full installation instructions, including details on how to configure extra |
|||
functionality in cert-manager can be found in the [installation docs](https://cert-manager.io/docs/installation/kubernetes/). |
|||
|
|||
Before installing the chart, you must first install the cert-manager CustomResourceDefinition resources. |
|||
This is performed in a separate step to allow you to easily uninstall and reinstall cert-manager without deleting your installed custom resources. |
|||
|
|||
```bash |
|||
$ kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.1/cert-manager.crds.yaml |
|||
``` |
|||
|
|||
To install the chart with the release name `my-release`: |
|||
|
|||
```console |
|||
## Add the Jetstack Helm repository |
|||
$ helm repo add jetstack https://charts.jetstack.io |
|||
|
|||
## Install the cert-manager helm chart |
|||
$ helm install my-release --namespace cert-manager --version v1.8.1 jetstack/cert-manager |
|||
``` |
|||
|
|||
In order to begin issuing certificates, you will need to set up a ClusterIssuer |
|||
or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer). |
|||
|
|||
More information on the different types of issuers and how to configure them |
|||
can be found in [our documentation](https://cert-manager.io/docs/configuration/). |
|||
|
|||
For information on how to configure cert-manager to automatically provision |
|||
Certificates for Ingress resources, take a look at the |
|||
[Securing Ingresses documentation](https://cert-manager.io/docs/usage/ingress/). |
|||
|
|||
> **Tip**: List all releases using `helm list` |
|||
|
|||
## Upgrading the Chart |
|||
|
|||
Special considerations may be required when upgrading the Helm chart, and these |
|||
are documented in our full [upgrading guide](https://cert-manager.io/docs/installation/upgrading/). |
|||
|
|||
**Please check here before performing upgrades!** |
|||
|
|||
## 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. |
|||
|
|||
If you want to completely uninstall cert-manager from your cluster, you will also need to |
|||
delete the previously installed CustomResourceDefinition resources: |
|||
|
|||
```console |
|||
$ kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.1/cert-manager.crds.yaml |
|||
``` |
|||
|
|||
## Configuration |
|||
|
|||
The following table lists the configurable parameters of the cert-manager chart and their default values. |
|||
|
|||
| Parameter | Description | Default | |
|||
| --------- | ----------- | ------- | |
|||
| `global.imagePullSecrets` | Reference to one or more secrets to be used when pulling images | `[]` | |
|||
| `global.rbac.create` | If `true`, create and use RBAC resources (includes sub-charts) | `true` | |
|||
| `global.priorityClassName`| Priority class name for cert-manager and webhook pods | `""` | |
|||
| `global.podSecurityPolicy.enabled` | If `true`, create and use PodSecurityPolicy (includes sub-charts) | `false` | |
|||
| `global.podSecurityPolicy.useAppArmor` | If `true`, use Apparmor seccomp profile in PSP | `true` | |
|||
| `global.leaderElection.namespace` | Override the namespace used to store the ConfigMap for leader election | `kube-system` | |
|||
| `global.leaderElection.leaseDuration` | The duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate | | |
|||
| `global.leaderElection.renewDeadline` | The interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration | | |
|||
| `global.leaderElection.retryPeriod` | The duration the clients should wait between attempting acquisition and renewal of a leadership | | |
|||
| `installCRDs` | If true, CRD resources will be installed as part of the Helm chart. If enabled, when uninstalling CRD resources will be deleted causing all installed custom resources to be DELETED | `false` | |
|||
| `image.repository` | Image repository | `quay.io/jetstack/cert-manager-controller` | |
|||
| `image.tag` | Image tag | `v1.8.1` | |
|||
| `image.pullPolicy` | Image pull policy | `IfNotPresent` | |
|||
| `replicaCount` | Number of cert-manager replicas | `1` | |
|||
| `clusterResourceNamespace` | Override the namespace used to store DNS provider credentials etc. for ClusterIssuer resources | Same namespace as cert-manager pod | |
|||
| `featureGates` | Set of comma-separated key=value pairs that describe feature gates on the controller. Some feature gates may also have to be enabled on other components, and can be set supplying the `feature-gate` flag to `<component>.extraArgs` | `` | |
|||
| `extraArgs` | Optional flags for cert-manager | `[]` | |
|||
| `extraEnv` | Optional environment variables for cert-manager | `[]` | |
|||
| `serviceAccount.create` | If `true`, create a new service account | `true` | |
|||
| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template | | |
|||
| `serviceAccount.annotations` | Annotations to add to the service account | | |
|||
| `serviceAccount.automountServiceAccountToken` | Automount API credentials for the Service Account | `true` | |
|||
| `volumes` | Optional volumes for cert-manager | `[]` | |
|||
| `volumeMounts` | Optional volume mounts for cert-manager | `[]` | |
|||
| `resources` | CPU/memory resource requests/limits | `{}` | |
|||
| `securityContext` | Optional security context. The yaml block should adhere to the [SecurityContext spec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#securitycontext-v1-core) | `{}` | |
|||
| `securityContext.enabled` | Deprecated (use `securityContext`) - Enable security context | `false` | |
|||
| `containerSecurityContext` | Security context to be set on the controller component container | `{}` | |
|||
| `nodeSelector` | Node labels for pod assignment | `{}` | |
|||
| `affinity` | Node affinity for pod assignment | `{}` | |
|||
| `tolerations` | Node tolerations for pod assignment | `[]` | |
|||
| `ingressShim.defaultIssuerName` | Optional default issuer to use for ingress resources | | |
|||
| `ingressShim.defaultIssuerKind` | Optional default issuer kind to use for ingress resources | | |
|||
| `ingressShim.defaultIssuerGroup` | Optional default issuer group to use for ingress resources | | |
|||
| `prometheus.enabled` | Enable Prometheus monitoring | `true` | |
|||
| `prometheus.servicemonitor.enabled` | Enable Prometheus Operator ServiceMonitor monitoring | `false` | |
|||
| `prometheus.servicemonitor.namespace` | Define namespace where to deploy the ServiceMonitor resource | (namespace where you are deploying) | |
|||
| `prometheus.servicemonitor.prometheusInstance` | Prometheus Instance definition | `default` | |
|||
| `prometheus.servicemonitor.targetPort` | Prometheus scrape port | `9402` | |
|||
| `prometheus.servicemonitor.path` | Prometheus scrape path | `/metrics` | |
|||
| `prometheus.servicemonitor.interval` | Prometheus scrape interval | `60s` | |
|||
| `prometheus.servicemonitor.labels` | Add custom labels to ServiceMonitor | | |
|||
| `prometheus.servicemonitor.scrapeTimeout` | Prometheus scrape timeout | `30s` | |
|||
| `prometheus.servicemonitor.honorLabels` | Enable label honoring for metrics scraped by Prometheus (see [Prometheus scrape config docs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) for details). By setting `honorLabels` to `true`, Prometheus will prefer label contents given by cert-manager on conflicts. Can be used to remove the "exported_namespace" label for example. | `false` | |
|||
| `podAnnotations` | Annotations to add to the cert-manager pod | `{}` | |
|||
| `deploymentAnnotations` | Annotations to add to the cert-manager deployment | `{}` | |
|||
| `podDnsPolicy` | Optional cert-manager pod [DNS policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods-dns-policy) | | |
|||
| `podDnsConfig` | Optional cert-manager pod [DNS configurations](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods-dns-config) | | |
|||
| `podLabels` | Labels to add to the cert-manager pod | `{}` | |
|||
| `serviceLabels` | Labels to add to the cert-manager controller service | `{}` | |
|||
| `serviceAnnotations` | Annotations to add to the cert-manager service | `{}` | |
|||
| `http_proxy` | Value of the `HTTP_PROXY` environment variable in the cert-manager pod | | |
|||
| `https_proxy` | Value of the `HTTPS_PROXY` environment variable in the cert-manager pod | | |
|||
| `no_proxy` | Value of the `NO_PROXY` environment variable in the cert-manager pod | | |
|||
| `webhook.replicaCount` | Number of cert-manager webhook replicas | `1` | |
|||
| `webhook.timeoutSeconds` | Seconds the API server should wait the webhook to respond before treating the call as a failure. | `10` | |
|||
| `webhook.podAnnotations` | Annotations to add to the webhook pods | `{}` | |
|||
| `webhook.podLabels` | Labels to add to the cert-manager webhook pod | `{}` | |
|||
| `webhook.serviceLabels` | Labels to add to the cert-manager webhook service | `{}` | |
|||
| `webhook.deploymentAnnotations` | Annotations to add to the webhook deployment | `{}` | |
|||
| `webhook.mutatingWebhookConfigurationAnnotations` | Annotations to add to the mutating webhook configuration | `{}` | |
|||
| `webhook.validatingWebhookConfigurationAnnotations` | Annotations to add to the validating webhook configuration | `{}` | |
|||
| `webhook.serviceAnnotations` | Annotations to add to the webhook service | `{}` | |
|||
| `webhook.config` | WebhookConfiguration YAML used to configure flags for the webhook. Generates a ConfigMap containing contents of the field. See `values.yaml` for example. | `{}` | |
|||
| `webhook.extraArgs` | Optional flags for cert-manager webhook component | `[]` | |
|||
| `webhook.serviceAccount.create` | If `true`, create a new service account for the webhook component | `true` | |
|||
| `webhook.serviceAccount.name` | Service account for the webhook component to be used. If not set and `webhook.serviceAccount.create` is `true`, a name is generated using the fullname template | | |
|||
| `webhook.serviceAccount.annotations` | Annotations to add to the service account for the webhook component | | |
|||
| `webhook.serviceAccount.automountServiceAccountToken` | Automount API credentials for the webhook Service Account | | |
|||
| `webhook.resources` | CPU/memory resource requests/limits for the webhook pods | `{}` | |
|||
| `webhook.nodeSelector` | Node labels for webhook pod assignment | `{}` | |
|||
| `webhook.affinity` | Node affinity for webhook pod assignment | `{}` | |
|||
| `webhook.tolerations` | Node tolerations for webhook pod assignment | `[]` | |
|||
| `webhook.image.repository` | Webhook image repository | `quay.io/jetstack/cert-manager-webhook` | |
|||
| `webhook.image.tag` | Webhook image tag | `v1.8.1` | |
|||
| `webhook.image.pullPolicy` | Webhook image pull policy | `IfNotPresent` | |
|||
| `webhook.securePort` | The port that the webhook should listen on for requests. | `10250` | |
|||
| `webhook.securityContext` | Security context for webhook pod assignment | `{}` | |
|||
| `webhook.containerSecurityContext` | Security context to be set on the webhook component container | `{}` | |
|||
| `webhook.hostNetwork` | If `true`, run the Webhook on the host network. | `false` | |
|||
| `webhook.serviceType` | The type of the `Service`. | `ClusterIP` | |
|||
| `webhook.loadBalancerIP` | The specific load balancer IP to use (when `serviceType` is `LoadBalancer`). | | |
|||
| `webhook.url.host` | The host to use to reach the webhook, instead of using internal cluster DNS for the service. | | |
|||
| `webhook.livenessProbe.failureThreshold` | The liveness probe failure threshold | `3` | |
|||
| `webhook.livenessProbe.initialDelaySeconds` | The liveness probe initial delay (in seconds) | `60` | |
|||
| `webhook.livenessProbe.periodSeconds` | The liveness probe period (in seconds) | `10` | |
|||
| `webhook.livenessProbe.successThreshold` | The liveness probe success threshold | `1` | |
|||
| `webhook.livenessProbe.timeoutSeconds` | The liveness probe timeout (in seconds) | `1` | |
|||
| `webhook.readinessProbe.failureThreshold` | The readiness probe failure threshold | `3` | |
|||
| `webhook.readinessProbe.initialDelaySeconds` | The readiness probe initial delay (in seconds) | `5` | |
|||
| `webhook.readinessProbe.periodSeconds` | The readiness probe period (in seconds) | `5` | |
|||
| `webhook.readinessProbe.successThreshold` | The readiness probe success threshold | `1` | |
|||
| `webhook.readinessProbe.timeoutSeconds` | The readiness probe timeout (in seconds) | `1` | |
|||
| `cainjector.enabled` | Toggles whether the cainjector component should be installed (required for the webhook component to work) | `true` | |
|||
| `cainjector.replicaCount` | Number of cert-manager cainjector replicas | `1` | |
|||
| `cainjector.podAnnotations` | Annotations to add to the cainjector pods | `{}` | |
|||
| `cainjector.podLabels` | Labels to add to the cert-manager cainjector pod | `{}` | |
|||
| `cainjector.deploymentAnnotations` | Annotations to add to the cainjector deployment | `{}` | |
|||
| `cainjector.extraArgs` | Optional flags for cert-manager cainjector component | `[]` | |
|||
| `cainjector.serviceAccount.create` | If `true`, create a new service account for the cainjector component | `true` | |
|||
| `cainjector.serviceAccount.name` | Service account for the cainjector component to be used. If not set and `cainjector.serviceAccount.create` is `true`, a name is generated using the fullname template | | |
|||
| `cainjector.serviceAccount.annotations` | Annotations to add to the service account for the cainjector component | | |
|||
| `cainjector.serviceAccount.automountServiceAccountToken` | Automount API credentials for the cainjector Service Account | `true` | |
|||
| `cainjector.resources` | CPU/memory resource requests/limits for the cainjector pods | `{}` | |
|||
| `cainjector.nodeSelector` | Node labels for cainjector pod assignment | `{}` | |
|||
| `cainjector.affinity` | Node affinity for cainjector pod assignment | `{}` | |
|||
| `cainjector.tolerations` | Node tolerations for cainjector pod assignment | `[]` | |
|||
| `cainjector.image.repository` | cainjector image repository | `quay.io/jetstack/cert-manager-cainjector` | |
|||
| `cainjector.image.tag` | cainjector image tag | `v1.8.1` | |
|||
| `cainjector.image.pullPolicy` | cainjector image pull policy | `IfNotPresent` | |
|||
| `cainjector.securityContext` | Security context for cainjector pod assignment | `{}` | |
|||
| `cainjector.containerSecurityContext` | Security context to be set on cainjector component container | `{}` | |
|||
| `startupapicheck.enabled` | Toggles whether the startupapicheck Job should be installed | `true` | |
|||
| `startupapicheck.securityContext` | Pod Security Context to be set on the startupapicheck component Pod | `{}` | |
|||
| `startupapicheck.timeout` | Timeout for 'kubectl check api' command | `1m` | |
|||
| `startupapicheck.backoffLimit` | Job backoffLimit | `4` | |
|||
| `startupapicheck.jobAnnotations` | Optional additional annotations to add to the startupapicheck Job | `{}` | |
|||
| `startupapicheck.podAnnotations` | Optional additional annotations to add to the startupapicheck Pods | `{}` | |
|||
| `startupapicheck.extraArgs` | Optional additional arguments for startupapicheck | `[]` | |
|||
| `startupapicheck.resources` | CPU/memory resource requests/limits for the startupapicheck pod | `{}` | |
|||
| `startupapicheck.nodeSelector` | Node labels for startupapicheck pod assignment | `{}` | |
|||
| `startupapicheck.affinity` | Node affinity for startupapicheck pod assignment | `{}` | |
|||
| `startupapicheck.tolerations` | Node tolerations for startupapicheck pod assignment | `[]` | |
|||
| `startupapicheck.podLabels` | Optional additional labels to add to the startupapicheck Pods | `{}` | |
|||
| `startupapicheck.image.repository` | startupapicheck image repository | `quay.io/jetstack/cert-manager-ctl` | |
|||
| `startupapicheck.image.tag` | startupapicheck image tag | `v1.8.1` | |
|||
| `startupapicheck.image.pullPolicy` | startupapicheck image pull policy | `IfNotPresent` | |
|||
| `startupapicheck.serviceAccount.create` | If `true`, create a new service account for the startupapicheck component | `true` | |
|||
| `startupapicheck.serviceAccount.name` | Service account for the startupapicheck component to be used. If not set and `startupapicheck.serviceAccount.create` is `true`, a name is generated using the fullname template | | |
|||
| `startupapicheck.serviceAccount.annotations` | Annotations to add to the service account for the startupapicheck component | | |
|||
| `startupapicheck.serviceAccount.automountServiceAccountToken` | Automount API credentials for the startupapicheck Service Account | `true` | |
|||
|
|||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. |
|||
|
|||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example, |
|||
|
|||
```console |
|||
$ helm install my-release -f values.yaml . |
|||
``` |
|||
> **Tip**: You can use the default [values.yaml](https://github.com/cert-manager/cert-manager/blob/master/deploy/charts/cert-manager/values.yaml) |
|||
|
|||
## Contributing |
|||
|
|||
This chart is maintained at [github.com/cert-manager/cert-manager](https://github.com/cert-manager/cert-manager/tree/master/deploy/charts/cert-manager). |
@ -0,0 +1,15 @@ |
|||
cert-manager {{ .Chart.AppVersion }} has been deployed successfully! |
|||
|
|||
In order to begin issuing certificates, you will need to set up a ClusterIssuer |
|||
or Issuer resource (for example, by creating a 'letsencrypt-staging' issuer). |
|||
|
|||
More information on the different types of issuers and how to configure them |
|||
can be found in our documentation: |
|||
|
|||
https://cert-manager.io/docs/configuration/ |
|||
|
|||
For information on how to configure cert-manager to automatically provision |
|||
Certificates for Ingress resources, take a look at the `ingress-shim` |
|||
documentation: |
|||
|
|||
https://cert-manager.io/docs/usage/ingress/ |
@ -0,0 +1,159 @@ |
|||
{{/* vim: set filetype=mustache: */}} |
|||
{{/* |
|||
Expand the name of the chart. |
|||
*/}} |
|||
{{- define "cert-manager.name" -}} |
|||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create a default fully qualified app name. |
|||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). |
|||
*/}} |
|||
{{- define "cert-manager.fullname" -}} |
|||
{{- if .Values.fullnameOverride -}} |
|||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} |
|||
{{- else -}} |
|||
{{- $name := default .Chart.Name .Values.nameOverride -}} |
|||
{{- if contains $name .Release.Name -}} |
|||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}} |
|||
{{- else -}} |
|||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create the name of the service account to use |
|||
*/}} |
|||
{{- define "cert-manager.serviceAccountName" -}} |
|||
{{- if .Values.serviceAccount.create -}} |
|||
{{ default (include "cert-manager.fullname" .) .Values.serviceAccount.name }} |
|||
{{- else -}} |
|||
{{ default "default" .Values.serviceAccount.name }} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Webhook templates |
|||
*/}} |
|||
|
|||
{{/* |
|||
Expand the name of the chart. |
|||
Manually fix the 'app' and 'name' labels to 'webhook' to maintain |
|||
compatibility with the v0.9 deployment selector. |
|||
*/}} |
|||
{{- define "webhook.name" -}} |
|||
{{- printf "webhook" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create a default fully qualified app name. |
|||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). |
|||
If release name contains chart name it will be used as a full name. |
|||
*/}} |
|||
{{- define "webhook.fullname" -}} |
|||
{{- $trimmedName := printf "%s" (include "cert-manager.fullname" .) | trunc 55 | trimSuffix "-" -}} |
|||
{{- printf "%s-webhook" $trimmedName | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
{{- define "webhook.caRef" -}} |
|||
{{ .Release.Namespace }}/{{ template "webhook.fullname" . }}-ca |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create the name of the service account to use |
|||
*/}} |
|||
{{- define "webhook.serviceAccountName" -}} |
|||
{{- if .Values.webhook.serviceAccount.create -}} |
|||
{{ default (include "webhook.fullname" .) .Values.webhook.serviceAccount.name }} |
|||
{{- else -}} |
|||
{{ default "default" .Values.webhook.serviceAccount.name }} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
cainjector templates |
|||
*/}} |
|||
|
|||
{{/* |
|||
Expand the name of the chart. |
|||
Manually fix the 'app' and 'name' labels to 'cainjector' to maintain |
|||
compatibility with the v0.9 deployment selector. |
|||
*/}} |
|||
{{- define "cainjector.name" -}} |
|||
{{- printf "cainjector" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create a default fully qualified app name. |
|||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). |
|||
If release name contains chart name it will be used as a full name. |
|||
*/}} |
|||
{{- define "cainjector.fullname" -}} |
|||
{{- $trimmedName := printf "%s" (include "cert-manager.fullname" .) | trunc 52 | trimSuffix "-" -}} |
|||
{{- printf "%s-cainjector" $trimmedName | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create the name of the service account to use |
|||
*/}} |
|||
{{- define "cainjector.serviceAccountName" -}} |
|||
{{- if .Values.cainjector.serviceAccount.create -}} |
|||
{{ default (include "cainjector.fullname" .) .Values.cainjector.serviceAccount.name }} |
|||
{{- else -}} |
|||
{{ default "default" .Values.cainjector.serviceAccount.name }} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
startupapicheck templates |
|||
*/}} |
|||
|
|||
{{/* |
|||
Expand the name of the chart. |
|||
Manually fix the 'app' and 'name' labels to 'startupapicheck' to maintain |
|||
compatibility with the v0.9 deployment selector. |
|||
*/}} |
|||
{{- define "startupapicheck.name" -}} |
|||
{{- printf "startupapicheck" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create a default fully qualified app name. |
|||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). |
|||
If release name contains chart name it will be used as a full name. |
|||
*/}} |
|||
{{- define "startupapicheck.fullname" -}} |
|||
{{- $trimmedName := printf "%s" (include "cert-manager.fullname" .) | trunc 52 | trimSuffix "-" -}} |
|||
{{- printf "%s-startupapicheck" $trimmedName | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create the name of the service account to use |
|||
*/}} |
|||
{{- define "startupapicheck.serviceAccountName" -}} |
|||
{{- if .Values.startupapicheck.serviceAccount.create -}} |
|||
{{ default (include "startupapicheck.fullname" .) .Values.startupapicheck.serviceAccount.name }} |
|||
{{- else -}} |
|||
{{ default "default" .Values.startupapicheck.serviceAccount.name }} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create chart name and version as used by the chart label. |
|||
*/}} |
|||
{{- define "chartName" -}} |
|||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Labels that should be added on each resource |
|||
*/}} |
|||
{{- define "labels" -}} |
|||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} |
|||
{{- if eq (default "helm" .Values.creator) "helm" }} |
|||
app.kubernetes.io/managed-by: {{ .Release.Service }} |
|||
helm.sh/chart: {{ include "chartName" . }} |
|||
{{- end -}} |
|||
{{- end -}} |
@ -0,0 +1,102 @@ |
|||
{{- if .Values.cainjector.enabled }} |
|||
apiVersion: apps/v1 |
|||
kind: Deployment |
|||
metadata: |
|||
name: {{ include "cainjector.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.cainjector.deploymentAnnotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
replicas: {{ .Values.cainjector.replicaCount }} |
|||
selector: |
|||
matchLabels: |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- with .Values.cainjector.strategy }} |
|||
strategy: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 8 }} |
|||
{{- with .Values.cainjector.podLabels }} |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.cainjector.podAnnotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
spec: |
|||
serviceAccountName: {{ template "cainjector.serviceAccountName" . }} |
|||
{{- with .Values.global.priorityClassName }} |
|||
priorityClassName: {{ . | quote }} |
|||
{{- end }} |
|||
{{- with .Values.cainjector.securityContext }} |
|||
securityContext: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
containers: |
|||
- name: {{ .Chart.Name }} |
|||
{{- with .Values.cainjector.image }} |
|||
image: "{{- if .registry -}}{{ .registry }}/{{- end -}}{{ .repository }}{{- if (.digest) -}} @{{ .digest }}{{- else -}}:{{ default $.Chart.AppVersion .tag }} {{- end -}}" |
|||
{{- end }} |
|||
imagePullPolicy: {{ .Values.cainjector.image.pullPolicy }} |
|||
args: |
|||
{{- if .Values.global.logLevel }} |
|||
- --v={{ .Values.global.logLevel }} |
|||
{{- end }} |
|||
{{- with .Values.global.leaderElection }} |
|||
- --leader-election-namespace={{ .namespace }} |
|||
{{- if .leaseDuration }} |
|||
- --leader-election-lease-duration={{ .leaseDuration }} |
|||
{{- end }} |
|||
{{- if .renewDeadline }} |
|||
- --leader-election-renew-deadline={{ .renewDeadline }} |
|||
{{- end }} |
|||
{{- if .retryPeriod }} |
|||
- --leader-election-retry-period={{ .retryPeriod }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- with .Values.cainjector.extraArgs }} |
|||
{{- toYaml . | nindent 10 }} |
|||
{{- end }} |
|||
env: |
|||
- name: POD_NAMESPACE |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: metadata.namespace |
|||
{{- with .Values.cainjector.containerSecurityContext }} |
|||
securityContext: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
{{- with .Values.cainjector.resources }} |
|||
resources: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
{{- with .Values.cainjector.nodeSelector }} |
|||
nodeSelector: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.cainjector.affinity }} |
|||
affinity: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.cainjector.tolerations }} |
|||
tolerations: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,20 @@ |
|||
{{- if .Values.cainjector.enabled }} |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
kind: ClusterRole |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: {{ template "cainjector.fullname" . }}-psp |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ['policy'] |
|||
resources: ['podsecuritypolicies'] |
|||
verbs: ['use'] |
|||
resourceNames: |
|||
- {{ template "cainjector.fullname" . }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,22 @@ |
|||
{{- if .Values.cainjector.enabled }} |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cainjector.fullname" . }}-psp |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cainjector.fullname" . }}-psp |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ template "cainjector.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,51 @@ |
|||
{{- if .Values.cainjector.enabled }} |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
apiVersion: policy/v1beta1 |
|||
kind: PodSecurityPolicy |
|||
metadata: |
|||
name: {{ template "cainjector.fullname" . }} |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
annotations: |
|||
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default' |
|||
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default' |
|||
{{- if .Values.global.podSecurityPolicy.useAppArmor }} |
|||
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default' |
|||
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default' |
|||
{{- end }} |
|||
spec: |
|||
privileged: false |
|||
allowPrivilegeEscalation: false |
|||
allowedCapabilities: [] # default set of capabilities are implicitly allowed |
|||
volumes: |
|||
- 'configMap' |
|||
- 'emptyDir' |
|||
- 'projected' |
|||
- 'secret' |
|||
- 'downwardAPI' |
|||
hostNetwork: false |
|||
hostIPC: false |
|||
hostPID: false |
|||
runAsUser: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
seLinux: |
|||
rule: 'RunAsAny' |
|||
supplementalGroups: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
fsGroup: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,103 @@ |
|||
{{- if .Values.cainjector.enabled }} |
|||
{{- if .Values.global.rbac.create }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cainjector.fullname" . }} |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["get", "create", "update", "patch"] |
|||
- apiGroups: ["admissionregistration.k8s.io"] |
|||
resources: ["validatingwebhookconfigurations", "mutatingwebhookconfigurations"] |
|||
verbs: ["get", "list", "watch", "update"] |
|||
- apiGroups: ["apiregistration.k8s.io"] |
|||
resources: ["apiservices"] |
|||
verbs: ["get", "list", "watch", "update"] |
|||
- apiGroups: ["apiextensions.k8s.io"] |
|||
resources: ["customresourcedefinitions"] |
|||
verbs: ["get", "list", "watch", "update"] |
|||
--- |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cainjector.fullname" . }} |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cainjector.fullname" . }} |
|||
subjects: |
|||
- name: {{ template "cainjector.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
|
|||
--- |
|||
# leader election rules |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: Role |
|||
metadata: |
|||
name: {{ template "cainjector.fullname" . }}:leaderelection |
|||
namespace: {{ .Values.global.leaderElection.namespace }} |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
# Used for leader election by the controller |
|||
# cert-manager-cainjector-leader-election is used by the CertificateBased injector controller |
|||
# see cmd/cainjector/start.go#L113 |
|||
# cert-manager-cainjector-leader-election-core is used by the SecretBased injector controller |
|||
# see cmd/cainjector/start.go#L137 |
|||
- apiGroups: ["coordination.k8s.io"] |
|||
resources: ["leases"] |
|||
resourceNames: ["cert-manager-cainjector-leader-election", "cert-manager-cainjector-leader-election-core"] |
|||
verbs: ["get", "update", "patch"] |
|||
- apiGroups: ["coordination.k8s.io"] |
|||
resources: ["leases"] |
|||
verbs: ["create"] |
|||
|
|||
--- |
|||
|
|||
# grant cert-manager permission to manage the leaderelection configmap in the |
|||
# leader election namespace |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: RoleBinding |
|||
metadata: |
|||
name: {{ include "cainjector.fullname" . }}:leaderelection |
|||
namespace: {{ .Values.global.leaderElection.namespace }} |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: Role |
|||
name: {{ template "cainjector.fullname" . }}:leaderelection |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ template "cainjector.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,27 @@ |
|||
{{- if .Values.cainjector.enabled }} |
|||
{{- if .Values.cainjector.serviceAccount.create }} |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
automountServiceAccountToken: {{ .Values.cainjector.serviceAccount.automountServiceAccountToken }} |
|||
metadata: |
|||
name: {{ template "cainjector.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
{{- with .Values.cainjector.serviceAccount.annotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
labels: |
|||
app: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/name: {{ include "cainjector.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cainjector" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.cainjector.serviceAccount.labels }} |
|||
{{ toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
{{- with .Values.global.imagePullSecrets }} |
|||
imagePullSecrets: |
|||
{{- toYaml . | nindent 2 }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- end }} |
File diff suppressed because it is too large
@ -0,0 +1,170 @@ |
|||
apiVersion: apps/v1 |
|||
kind: Deployment |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ template "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ template "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.deploymentAnnotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
replicas: {{ .Values.replicaCount }} |
|||
selector: |
|||
matchLabels: |
|||
app.kubernetes.io/name: {{ template "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- with .Values.strategy }} |
|||
strategy: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: {{ template "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ template "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 8 }} |
|||
{{- with .Values.podLabels }} |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.podAnnotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- if and .Values.prometheus.enabled (not .Values.prometheus.servicemonitor.enabled) }} |
|||
{{- if not .Values.podAnnotations }} |
|||
annotations: |
|||
{{- end }} |
|||
prometheus.io/path: "/metrics" |
|||
prometheus.io/scrape: 'true' |
|||
prometheus.io/port: '9402' |
|||
{{- end }} |
|||
spec: |
|||
serviceAccountName: {{ template "cert-manager.serviceAccountName" . }} |
|||
{{- with .Values.global.priorityClassName }} |
|||
priorityClassName: {{ . | quote }} |
|||
{{- end }} |
|||
{{- $enabledDefined := gt (len (keys (pick .Values.securityContext "enabled"))) 0 }} |
|||
{{- $legacyEnabledExplicitlyOff := and $enabledDefined (not .Values.securityContext.enabled) }} |
|||
{{- if and .Values.securityContext (not $legacyEnabledExplicitlyOff) }} |
|||
securityContext: |
|||
{{- if .Values.securityContext.enabled }} |
|||
{{/* support legacy securityContext.enabled and its two parameters */}} |
|||
fsGroup: {{ default 1001 .Values.securityContext.fsGroup }} |
|||
runAsUser: {{ default 1001 .Values.securityContext.runAsUser }} |
|||
{{- else }} |
|||
{{/* this is the way forward: support an arbitrary yaml block */}} |
|||
{{- toYaml .Values.securityContext | nindent 8 }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- with .Values.volumes }} |
|||
volumes: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
containers: |
|||
- name: {{ .Chart.Name }} |
|||
{{- with .Values.image }} |
|||
image: "{{- if .registry -}}{{ .registry }}/{{- end -}}{{ .repository }}{{- if (.digest) -}} @{{ .digest }}{{- else -}}:{{ default $.Chart.AppVersion .tag }} {{- end -}}" |
|||
{{- end }} |
|||
imagePullPolicy: {{ .Values.image.pullPolicy }} |
|||
args: |
|||
{{- if .Values.global.logLevel }} |
|||
- --v={{ .Values.global.logLevel }} |
|||
{{- end }} |
|||
{{- if .Values.clusterResourceNamespace }} |
|||
- --cluster-resource-namespace={{ .Values.clusterResourceNamespace }} |
|||
{{- else }} |
|||
- --cluster-resource-namespace=$(POD_NAMESPACE) |
|||
{{- end }} |
|||
{{- with .Values.global.leaderElection }} |
|||
- --leader-election-namespace={{ .namespace }} |
|||
{{- if .leaseDuration }} |
|||
- --leader-election-lease-duration={{ .leaseDuration }} |
|||
{{- end }} |
|||
{{- if .renewDeadline }} |
|||
- --leader-election-renew-deadline={{ .renewDeadline }} |
|||
{{- end }} |
|||
{{- if .retryPeriod }} |
|||
- --leader-election-retry-period={{ .retryPeriod }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- with .Values.extraArgs }} |
|||
{{- toYaml . | nindent 10 }} |
|||
{{- end }} |
|||
{{- with .Values.ingressShim }} |
|||
{{- if .defaultIssuerName }} |
|||
- --default-issuer-name={{ .defaultIssuerName }} |
|||
{{- end }} |
|||
{{- if .defaultIssuerKind }} |
|||
- --default-issuer-kind={{ .defaultIssuerKind }} |
|||
{{- end }} |
|||
{{- if .defaultIssuerGroup }} |
|||
- --default-issuer-group={{ .defaultIssuerGroup }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- if .Values.featureGates }} |
|||
- --feature-gates={{ .Values.featureGates }} |
|||
{{- end }} |
|||
ports: |
|||
- containerPort: 9402 |
|||
name: http-metrics |
|||
protocol: TCP |
|||
{{- with .Values.containerSecurityContext }} |
|||
securityContext: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
{{- with .Values.volumeMounts }} |
|||
volumeMounts: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
env: |
|||
- name: POD_NAMESPACE |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: metadata.namespace |
|||
{{- with .Values.extraEnv }} |
|||
{{- toYaml . | nindent 10 }} |
|||
{{- end }} |
|||
{{- with .Values.http_proxy }} |
|||
- name: HTTP_PROXY |
|||
value: {{ . }} |
|||
{{- end }} |
|||
{{- with .Values.https_proxy }} |
|||
- name: HTTPS_PROXY |
|||
value: {{ . }} |
|||
{{- end }} |
|||
{{- with .Values.no_proxy }} |
|||
- name: NO_PROXY |
|||
value: {{ . }} |
|||
{{- end }} |
|||
{{- with .Values.resources }} |
|||
resources: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
{{- with .Values.nodeSelector }} |
|||
nodeSelector: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.affinity }} |
|||
affinity: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.tolerations }} |
|||
tolerations: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.podDnsPolicy }} |
|||
dnsPolicy: {{ . }} |
|||
{{- end }} |
|||
{{- with .Values.podDnsConfig }} |
|||
dnsConfig: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
@ -0,0 +1,18 @@ |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
kind: ClusterRole |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-psp |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ['policy'] |
|||
resources: ['podsecuritypolicies'] |
|||
verbs: ['use'] |
|||
resourceNames: |
|||
- {{ template "cert-manager.fullname" . }} |
|||
{{- end }} |
@ -0,0 +1,20 @@ |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-psp |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-psp |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
{{- end }} |
@ -0,0 +1,49 @@ |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
apiVersion: policy/v1beta1 |
|||
kind: PodSecurityPolicy |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }} |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
annotations: |
|||
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default' |
|||
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default' |
|||
{{- if .Values.global.podSecurityPolicy.useAppArmor }} |
|||
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default' |
|||
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default' |
|||
{{- end }} |
|||
spec: |
|||
privileged: false |
|||
allowPrivilegeEscalation: false |
|||
allowedCapabilities: [] # default set of capabilities are implicitly allowed |
|||
volumes: |
|||
- 'configMap' |
|||
- 'emptyDir' |
|||
- 'projected' |
|||
- 'secret' |
|||
- 'downwardAPI' |
|||
hostNetwork: false |
|||
hostIPC: false |
|||
hostPID: false |
|||
runAsUser: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
seLinux: |
|||
rule: 'RunAsAny' |
|||
supplementalGroups: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
fsGroup: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
{{- end }} |
@ -0,0 +1,545 @@ |
|||
{{- if .Values.global.rbac.create }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: Role |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}:leaderelection |
|||
namespace: {{ .Values.global.leaderElection.namespace }} |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["coordination.k8s.io"] |
|||
resources: ["leases"] |
|||
resourceNames: ["cert-manager-controller"] |
|||
verbs: ["get", "update", "patch"] |
|||
- apiGroups: ["coordination.k8s.io"] |
|||
resources: ["leases"] |
|||
verbs: ["create"] |
|||
|
|||
--- |
|||
|
|||
# grant cert-manager permission to manage the leaderelection configmap in the |
|||
# leader election namespace |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: RoleBinding |
|||
metadata: |
|||
name: {{ include "cert-manager.fullname" . }}:leaderelection |
|||
namespace: {{ .Values.global.leaderElection.namespace }} |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: Role |
|||
name: {{ template "cert-manager.fullname" . }}:leaderelection |
|||
subjects: |
|||
- apiGroup: "" |
|||
kind: ServiceAccount |
|||
name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
|
|||
--- |
|||
|
|||
# Issuer controller role |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-issuers |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["issuers", "issuers/status"] |
|||
verbs: ["update", "patch"] |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["issuers"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["get", "list", "watch", "create", "update", "delete"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["create", "patch"] |
|||
|
|||
--- |
|||
|
|||
# ClusterIssuer controller role |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["clusterissuers", "clusterissuers/status"] |
|||
verbs: ["update", "patch"] |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["clusterissuers"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["get", "list", "watch", "create", "update", "delete"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["create", "patch"] |
|||
|
|||
--- |
|||
|
|||
# Certificates controller role |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-certificates |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates", "certificates/status", "certificaterequests", "certificaterequests/status"] |
|||
verbs: ["update", "patch"] |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates", "certificaterequests", "clusterissuers", "issuers"] |
|||
verbs: ["get", "list", "watch"] |
|||
# We require these rules to support users with the OwnerReferencesPermissionEnforcement |
|||
# admission controller enabled: |
|||
# https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates/finalizers", "certificaterequests/finalizers"] |
|||
verbs: ["update"] |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["orders"] |
|||
verbs: ["create", "delete", "get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["get", "list", "watch", "create", "update", "delete", "patch"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["create", "patch"] |
|||
|
|||
--- |
|||
|
|||
# Orders controller role |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-orders |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["orders", "orders/status"] |
|||
verbs: ["update", "patch"] |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["orders", "challenges"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["clusterissuers", "issuers"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["challenges"] |
|||
verbs: ["create", "delete"] |
|||
# We require these rules to support users with the OwnerReferencesPermissionEnforcement |
|||
# admission controller enabled: |
|||
# https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["orders/finalizers"] |
|||
verbs: ["update"] |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["create", "patch"] |
|||
|
|||
--- |
|||
|
|||
# Challenges controller role |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-challenges |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
# Use to update challenge resource status |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["challenges", "challenges/status"] |
|||
verbs: ["update", "patch"] |
|||
# Used to watch challenge resources |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["challenges"] |
|||
verbs: ["get", "list", "watch"] |
|||
# Used to watch challenges, issuer and clusterissuer resources |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["issuers", "clusterissuers"] |
|||
verbs: ["get", "list", "watch"] |
|||
# Need to be able to retrieve ACME account private key to complete challenges |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["get", "list", "watch"] |
|||
# Used to create events |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["create", "patch"] |
|||
# HTTP01 rules |
|||
- apiGroups: [""] |
|||
resources: ["pods", "services"] |
|||
verbs: ["get", "list", "watch", "create", "delete"] |
|||
- apiGroups: ["networking.k8s.io"] |
|||
resources: ["ingresses"] |
|||
verbs: ["get", "list", "watch", "create", "delete", "update"] |
|||
- apiGroups: [ "gateway.networking.k8s.io" ] |
|||
resources: [ "httproutes" ] |
|||
verbs: ["get", "list", "watch", "create", "delete", "update"] |
|||
# We require the ability to specify a custom hostname when we are creating |
|||
# new ingress resources. |
|||
# See: https://github.com/openshift/origin/blob/21f191775636f9acadb44fa42beeb4f75b255532/pkg/route/apiserver/admission/ingress_admission.go#L84-L148 |
|||
- apiGroups: ["route.openshift.io"] |
|||
resources: ["routes/custom-host"] |
|||
verbs: ["create"] |
|||
# We require these rules to support users with the OwnerReferencesPermissionEnforcement |
|||
# admission controller enabled: |
|||
# https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["challenges/finalizers"] |
|||
verbs: ["update"] |
|||
# DNS01 rules (duplicated above) |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["get", "list", "watch"] |
|||
|
|||
--- |
|||
|
|||
# ingress-shim controller role |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates", "certificaterequests"] |
|||
verbs: ["create", "update", "delete"] |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates", "certificaterequests", "issuers", "clusterissuers"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: ["networking.k8s.io"] |
|||
resources: ["ingresses"] |
|||
verbs: ["get", "list", "watch"] |
|||
# We require these rules to support users with the OwnerReferencesPermissionEnforcement |
|||
# admission controller enabled: |
|||
# https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement |
|||
- apiGroups: ["networking.k8s.io"] |
|||
resources: ["ingresses/finalizers"] |
|||
verbs: ["update"] |
|||
- apiGroups: ["gateway.networking.k8s.io"] |
|||
resources: ["gateways", "httproutes"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: ["gateway.networking.k8s.io"] |
|||
resources: ["gateways/finalizers", "httproutes/finalizers"] |
|||
verbs: ["update"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["create", "patch"] |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-issuers |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-controller-issuers |
|||
subjects: |
|||
- name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-controller-clusterissuers |
|||
subjects: |
|||
- name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-certificates |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-controller-certificates |
|||
subjects: |
|||
- name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-orders |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-controller-orders |
|||
subjects: |
|||
- name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-challenges |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-controller-challenges |
|||
subjects: |
|||
- name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-controller-ingress-shim |
|||
subjects: |
|||
- name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-view |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- if .Values.global.rbac.aggregateClusterRoles }} |
|||
rbac.authorization.k8s.io/aggregate-to-view: "true" |
|||
rbac.authorization.k8s.io/aggregate-to-edit: "true" |
|||
rbac.authorization.k8s.io/aggregate-to-admin: "true" |
|||
{{- end }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates", "certificaterequests", "issuers"] |
|||
verbs: ["get", "list", "watch"] |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["challenges", "orders"] |
|||
verbs: ["get", "list", "watch"] |
|||
|
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-edit |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- if .Values.global.rbac.aggregateClusterRoles }} |
|||
rbac.authorization.k8s.io/aggregate-to-edit: "true" |
|||
rbac.authorization.k8s.io/aggregate-to-admin: "true" |
|||
{{- end }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates", "certificaterequests", "issuers"] |
|||
verbs: ["create", "delete", "deletecollection", "patch", "update"] |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates/status"] |
|||
verbs: ["update"] |
|||
- apiGroups: ["acme.cert-manager.io"] |
|||
resources: ["challenges", "orders"] |
|||
verbs: ["create", "delete", "deletecollection", "patch", "update"] |
|||
|
|||
--- |
|||
|
|||
# Permission to approve CertificateRequests referencing cert-manager.io Issuers and ClusterIssuers |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cert-manager" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["signers"] |
|||
verbs: ["approve"] |
|||
resourceNames: ["issuers.cert-manager.io/*", "clusterissuers.cert-manager.io/*"] |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cert-manager" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-controller-approve:cert-manager-io |
|||
subjects: |
|||
- name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
|
|||
--- |
|||
|
|||
# Permission to: |
|||
# - Update and sign CertificatSigningeRequests referencing cert-manager.io Issuers and ClusterIssuers |
|||
# - Perform SubjectAccessReviews to test whether users are able to reference Namespaced Issuers |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cert-manager" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["certificates.k8s.io"] |
|||
resources: ["certificatesigningrequests"] |
|||
verbs: ["get", "list", "watch", "update"] |
|||
- apiGroups: ["certificates.k8s.io"] |
|||
resources: ["certificatesigningrequests/status"] |
|||
verbs: ["update", "patch"] |
|||
- apiGroups: ["certificates.k8s.io"] |
|||
resources: ["signers"] |
|||
resourceNames: ["issuers.cert-manager.io/*", "clusterissuers.cert-manager.io/*"] |
|||
verbs: ["sign"] |
|||
- apiGroups: ["authorization.k8s.io"] |
|||
resources: ["subjectaccessreviews"] |
|||
verbs: ["create"] |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "cert-manager" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "cert-manager.fullname" . }}-controller-certificatesigningrequests |
|||
subjects: |
|||
- name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
kind: ServiceAccount |
|||
{{- end }} |
@ -0,0 +1,31 @@ |
|||
{{- if .Values.prometheus.enabled }} |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
{{- with .Values.serviceAnnotations }} |
|||
annotations: |
|||
{{ toYaml . | indent 4 }} |
|||
{{- end }} |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.serviceLabels }} |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
type: ClusterIP |
|||
ports: |
|||
- protocol: TCP |
|||
port: 9402 |
|||
name: tcp-prometheus-servicemonitor |
|||
targetPort: {{ .Values.prometheus.servicemonitor.targetPort }} |
|||
selector: |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- end }} |
@ -0,0 +1,25 @@ |
|||
{{- if .Values.serviceAccount.create }} |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
{{- with .Values.global.imagePullSecrets }} |
|||
imagePullSecrets: |
|||
{{- toYaml . | nindent 2 }} |
|||
{{- end }} |
|||
automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }} |
|||
metadata: |
|||
name: {{ template "cert-manager.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
{{- with .Values.serviceAccount.annotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.serviceAccount.labels }} |
|||
{{ toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,39 @@ |
|||
{{- if and .Values.prometheus.enabled .Values.prometheus.servicemonitor.enabled }} |
|||
apiVersion: monitoring.coreos.com/v1 |
|||
kind: ServiceMonitor |
|||
metadata: |
|||
name: {{ template "cert-manager.fullname" . }} |
|||
{{- if .Values.prometheus.servicemonitor.namespace }} |
|||
namespace: {{ .Values.prometheus.servicemonitor.namespace }} |
|||
{{- else }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
{{- end }} |
|||
labels: |
|||
app: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/name: {{ include "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- include "labels" . | nindent 4 }} |
|||
prometheus: {{ .Values.prometheus.servicemonitor.prometheusInstance }} |
|||
{{- with .Values.prometheus.servicemonitor.labels }} |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
jobLabel: {{ template "cert-manager.fullname" . }} |
|||
selector: |
|||
matchLabels: |
|||
app.kubernetes.io/name: {{ template "cert-manager.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "controller" |
|||
{{- if .Values.prometheus.servicemonitor.namespace }} |
|||
namespaceSelector: |
|||
matchNames: |
|||
- {{ .Release.Namespace }} |
|||
{{- end }} |
|||
endpoints: |
|||
- targetPort: {{ .Values.prometheus.servicemonitor.targetPort }} |
|||
path: {{ .Values.prometheus.servicemonitor.path }} |
|||
interval: {{ .Values.prometheus.servicemonitor.interval }} |
|||
scrapeTimeout: {{ .Values.prometheus.servicemonitor.scrapeTimeout }} |
|||
honorLabels: {{ .Values.prometheus.servicemonitor.honorLabels }} |
|||
{{- end }} |
@ -0,0 +1,77 @@ |
|||
{{- if .Values.startupapicheck.enabled }} |
|||
apiVersion: batch/v1 |
|||
kind: Job |
|||
metadata: |
|||
name: {{ include "startupapicheck.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "startupapicheck" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.startupapicheck.jobAnnotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
backoffLimit: {{ .Values.startupapicheck.backoffLimit }} |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "startupapicheck" |
|||
{{- include "labels" . | nindent 8 }} |
|||
{{- with .Values.startupapicheck.podLabels }} |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.startupapicheck.podAnnotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
spec: |
|||
restartPolicy: OnFailure |
|||
serviceAccountName: {{ template "startupapicheck.serviceAccountName" . }} |
|||
{{- with .Values.global.priorityClassName }} |
|||
priorityClassName: {{ . | quote }} |
|||
{{- end }} |
|||
{{- with .Values.startupapicheck.securityContext }} |
|||
securityContext: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
containers: |
|||
- name: {{ .Chart.Name }} |
|||
{{- with .Values.startupapicheck.image }} |
|||
image: "{{- if .registry -}}{{ .registry }}/{{- end -}}{{ .repository }}{{- if (.digest) -}} @{{ .digest }}{{- else -}}:{{ default $.Chart.AppVersion .tag }} {{- end -}}" |
|||
{{- end }} |
|||
imagePullPolicy: {{ .Values.startupapicheck.image.pullPolicy }} |
|||
args: |
|||
- check |
|||
- api |
|||
- --wait={{ .Values.startupapicheck.timeout }} |
|||
{{- with .Values.startupapicheck.extraArgs }} |
|||
{{- toYaml . | nindent 10 }} |
|||
{{- end }} |
|||
{{- with .Values.startupapicheck.containerSecurityContext }} |
|||
securityContext: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
{{- with .Values.startupapicheck.resources }} |
|||
resources: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
{{- with .Values.startupapicheck.nodeSelector }} |
|||
nodeSelector: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.startupapicheck.affinity }} |
|||
affinity: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.startupapicheck.tolerations }} |
|||
tolerations: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,24 @@ |
|||
{{- if .Values.startupapicheck.enabled }} |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
kind: ClusterRole |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: {{ template "startupapicheck.fullname" . }}-psp |
|||
labels: |
|||
app: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "startupapicheck" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.startupapicheck.rbac.annotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
rules: |
|||
- apiGroups: ['policy'] |
|||
resources: ['podsecuritypolicies'] |
|||
verbs: ['use'] |
|||
resourceNames: |
|||
- {{ template "startupapicheck.fullname" . }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,26 @@ |
|||
{{- if .Values.startupapicheck.enabled }} |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "startupapicheck.fullname" . }}-psp |
|||
labels: |
|||
app: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "startupapicheck" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.startupapicheck.rbac.annotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "startupapicheck.fullname" . }}-psp |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ template "startupapicheck.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,51 @@ |
|||
{{- if .Values.startupapicheck.enabled }} |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
apiVersion: policy/v1beta1 |
|||
kind: PodSecurityPolicy |
|||
metadata: |
|||
name: {{ template "startupapicheck.fullname" . }} |
|||
labels: |
|||
app: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "startupapicheck" |
|||
{{- include "labels" . | nindent 4 }} |
|||
annotations: |
|||
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default' |
|||
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default' |
|||
{{- if .Values.global.podSecurityPolicy.useAppArmor }} |
|||
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default' |
|||
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default' |
|||
{{- end }} |
|||
{{- with .Values.startupapicheck.rbac.annotations }} |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
privileged: false |
|||
allowPrivilegeEscalation: false |
|||
allowedCapabilities: [] # default set of capabilities are implicitly allowed |
|||
volumes: |
|||
- 'projected' |
|||
- 'secret' |
|||
hostNetwork: false |
|||
hostIPC: false |
|||
hostPID: false |
|||
runAsUser: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
seLinux: |
|||
rule: 'RunAsAny' |
|||
supplementalGroups: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
fsGroup: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,48 @@ |
|||
{{- if .Values.startupapicheck.enabled }} |
|||
{{- if .Values.global.rbac.create }} |
|||
# create certificate role |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: Role |
|||
metadata: |
|||
name: {{ template "startupapicheck.fullname" . }}:create-cert |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "startupapicheck" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.startupapicheck.rbac.annotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
rules: |
|||
- apiGroups: ["cert-manager.io"] |
|||
resources: ["certificates"] |
|||
verbs: ["create"] |
|||
--- |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: RoleBinding |
|||
metadata: |
|||
name: {{ include "startupapicheck.fullname" . }}:create-cert |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "startupapicheck" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.startupapicheck.rbac.annotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: Role |
|||
name: {{ template "startupapicheck.fullname" . }}:create-cert |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ template "startupapicheck.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,27 @@ |
|||
{{- if .Values.startupapicheck.enabled }} |
|||
{{- if .Values.startupapicheck.serviceAccount.create }} |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
automountServiceAccountToken: {{ .Values.startupapicheck.serviceAccount.automountServiceAccountToken }} |
|||
metadata: |
|||
name: {{ template "startupapicheck.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
{{- with .Values.startupapicheck.serviceAccount.annotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
labels: |
|||
app: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/name: {{ include "startupapicheck.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "startupapicheck" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.startupapicheck.serviceAccount.labels }} |
|||
{{ toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
{{- with .Values.global.imagePullSecrets }} |
|||
imagePullSecrets: |
|||
{{- toYaml . | nindent 2 }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,24 @@ |
|||
{{- if .Values.webhook.config -}} |
|||
{{- if not .Values.webhook.config.apiVersion -}} |
|||
{{- fail "webhook.config.apiVersion must be set" -}} |
|||
{{- end -}} |
|||
|
|||
{{- if not .Values.webhook.config.kind -}} |
|||
{{- fail "webhook.config.kind must be set" -}} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
apiVersion: v1 |
|||
kind: ConfigMap |
|||
metadata: |
|||
name: {{ include "webhook.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
data: |
|||
{{- if .Values.webhook.config }} |
|||
config.yaml: | |
|||
{{ .Values.webhook.config | toYaml | nindent 4 }} |
|||
{{- end }} |
@ -0,0 +1,153 @@ |
|||
apiVersion: apps/v1 |
|||
kind: Deployment |
|||
metadata: |
|||
name: {{ include "webhook.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.webhook.deploymentAnnotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
replicas: {{ .Values.webhook.replicaCount }} |
|||
selector: |
|||
matchLabels: |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- with .Values.webhook.strategy }} |
|||
strategy: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 8 }} |
|||
{{- with .Values.webhook.podLabels }} |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.webhook.podAnnotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
spec: |
|||
serviceAccountName: {{ template "webhook.serviceAccountName" . }} |
|||
{{- with .Values.global.priorityClassName }} |
|||
priorityClassName: {{ . | quote }} |
|||
{{- end }} |
|||
{{- with .Values.webhook.securityContext }} |
|||
securityContext: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.webhook.hostNetwork }} |
|||
hostNetwork: true |
|||
{{- end }} |
|||
containers: |
|||
- name: {{ .Chart.Name }} |
|||
{{- with .Values.webhook.image }} |
|||
image: "{{- if .registry -}}{{ .registry }}/{{- end -}}{{ .repository }}{{- if (.digest) -}} @{{ .digest }}{{- else -}}:{{ default $.Chart.AppVersion .tag }} {{- end -}}" |
|||
{{- end }} |
|||
imagePullPolicy: {{ .Values.webhook.image.pullPolicy }} |
|||
args: |
|||
{{- if .Values.global.logLevel }} |
|||
- --v={{ .Values.global.logLevel }} |
|||
{{- end }} |
|||
{{- if .Values.webhook.config }} |
|||
- --config=/var/cert-manager/config/config.yaml |
|||
{{- end }} |
|||
{{- $config := default .Values.webhook.config "" }} |
|||
{{ if not $config.securePort -}} |
|||
- --secure-port={{ .Values.webhook.securePort }} |
|||
{{- end }} |
|||
{{- $tlsConfig := default $config.tlsConfig "" }} |
|||
{{ if or (not $config.tlsConfig) (and (not $tlsConfig.dynamic) (not $tlsConfig.filesystem) ) -}} |
|||
- --dynamic-serving-ca-secret-namespace=$(POD_NAMESPACE) |
|||
- --dynamic-serving-ca-secret-name={{ template "webhook.fullname" . }}-ca |
|||
- --dynamic-serving-dns-names={{ template "webhook.fullname" . }},{{ template "webhook.fullname" . }}.{{ .Release.Namespace }},{{ template "webhook.fullname" . }}.{{ .Release.Namespace }}.svc{{ if .Values.webhook.url.host }},{{ .Values.webhook.url.host }}{{ end }} |
|||
{{- end }} |
|||
{{- with .Values.webhook.extraArgs }} |
|||
{{- toYaml . | nindent 10 }} |
|||
{{- end }} |
|||
ports: |
|||
- name: https |
|||
protocol: TCP |
|||
{{- if $config.securePort }} |
|||
containerPort: {{ $config.securePort }} |
|||
{{- else if .Values.webhook.securePort }} |
|||
containerPort: {{ .Values.webhook.securePort }} |
|||
{{- else }} |
|||
containerPort: 6443 |
|||
{{- end }} |
|||
livenessProbe: |
|||
httpGet: |
|||
path: /livez |
|||
{{- if $config.healthzPort }} |
|||
port: {{ $config.healthzPort }} |
|||
{{- else }} |
|||
port: 6080 |
|||
{{- end }} |
|||
scheme: HTTP |
|||
initialDelaySeconds: {{ .Values.webhook.livenessProbe.initialDelaySeconds }} |
|||
periodSeconds: {{ .Values.webhook.livenessProbe.periodSeconds }} |
|||
timeoutSeconds: {{ .Values.webhook.livenessProbe.timeoutSeconds }} |
|||
successThreshold: {{ .Values.webhook.livenessProbe.successThreshold }} |
|||
failureThreshold: {{ .Values.webhook.livenessProbe.failureThreshold }} |
|||
readinessProbe: |
|||
httpGet: |
|||
path: /healthz |
|||
{{- if $config.healthzPort }} |
|||
port: {{ $config.healthzPort }} |
|||
{{- else }} |
|||
port: 6080 |
|||
{{- end }} |
|||
scheme: HTTP |
|||
initialDelaySeconds: {{ .Values.webhook.readinessProbe.initialDelaySeconds }} |
|||
periodSeconds: {{ .Values.webhook.readinessProbe.periodSeconds }} |
|||
timeoutSeconds: {{ .Values.webhook.readinessProbe.timeoutSeconds }} |
|||
successThreshold: {{ .Values.webhook.readinessProbe.successThreshold }} |
|||
failureThreshold: {{ .Values.webhook.readinessProbe.failureThreshold }} |
|||
{{- with .Values.webhook.containerSecurityContext }} |
|||
securityContext: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
env: |
|||
- name: POD_NAMESPACE |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: metadata.namespace |
|||
{{- with .Values.webhook.resources }} |
|||
resources: |
|||
{{- toYaml . | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.webhook.config }} |
|||
volumeMounts: |
|||
- name: config |
|||
mountPath: /var/cert-manager/config |
|||
{{- end }} |
|||
{{- with .Values.webhook.nodeSelector }} |
|||
nodeSelector: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.webhook.affinity }} |
|||
affinity: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.webhook.tolerations }} |
|||
tolerations: |
|||
{{- toYaml . | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.webhook.config }} |
|||
volumes: |
|||
- name: config |
|||
configMap: |
|||
name: {{ include "webhook.fullname" . }} |
|||
{{- end }} |
@ -0,0 +1,46 @@ |
|||
apiVersion: admissionregistration.k8s.io/v1 |
|||
kind: MutatingWebhookConfiguration |
|||
metadata: |
|||
name: {{ include "webhook.fullname" . }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
annotations: |
|||
cert-manager.io/inject-ca-from-secret: "{{ .Release.Namespace }}/{{ template "webhook.fullname" . }}-ca" |
|||
{{- with .Values.webhook.mutatingWebhookConfigurationAnnotations }} |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
webhooks: |
|||
- name: webhook.cert-manager.io |
|||
rules: |
|||
- apiGroups: |
|||
- "cert-manager.io" |
|||
- "acme.cert-manager.io" |
|||
apiVersions: |
|||
- "v1" |
|||
operations: |
|||
- CREATE |
|||
- UPDATE |
|||
resources: |
|||
- "*/*" |
|||
admissionReviewVersions: ["v1"] |
|||
# This webhook only accepts v1 cert-manager resources. |
|||
# Equivalent matchPolicy ensures that non-v1 resource requests are sent to |
|||
# this webhook (after the resources have been converted to v1). |
|||
matchPolicy: Equivalent |
|||
timeoutSeconds: {{ .Values.webhook.timeoutSeconds }} |
|||
failurePolicy: Fail |
|||
# Only include 'sideEffects' field in Kubernetes 1.12+ |
|||
sideEffects: None |
|||
clientConfig: |
|||
{{- if .Values.webhook.url.host }} |
|||
url: https://{{ .Values.webhook.url.host }}/mutate |
|||
{{- else }} |
|||
service: |
|||
name: {{ template "webhook.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
path: /mutate |
|||
{{- end }} |
@ -0,0 +1,18 @@ |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
kind: ClusterRole |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
metadata: |
|||
name: {{ template "webhook.fullname" . }}-psp |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ['policy'] |
|||
resources: ['podsecuritypolicies'] |
|||
verbs: ['use'] |
|||
resourceNames: |
|||
- {{ template "webhook.fullname" . }} |
|||
{{- end }} |
@ -0,0 +1,20 @@ |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "webhook.fullname" . }}-psp |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "webhook.fullname" . }}-psp |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ template "webhook.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
{{- end }} |
@ -0,0 +1,54 @@ |
|||
{{- if .Values.global.podSecurityPolicy.enabled }} |
|||
apiVersion: policy/v1beta1 |
|||
kind: PodSecurityPolicy |
|||
metadata: |
|||
name: {{ template "webhook.fullname" . }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
annotations: |
|||
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default' |
|||
seccomp.security.alpha.kubernetes.io/defaultProfileName: 'docker/default' |
|||
{{- if .Values.global.podSecurityPolicy.useAppArmor }} |
|||
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default' |
|||
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default' |
|||
{{- end }} |
|||
spec: |
|||
privileged: false |
|||
allowPrivilegeEscalation: false |
|||
allowedCapabilities: [] # default set of capabilities are implicitly allowed |
|||
volumes: |
|||
- 'configMap' |
|||
- 'emptyDir' |
|||
- 'projected' |
|||
- 'secret' |
|||
- 'downwardAPI' |
|||
hostNetwork: {{ .Values.webhook.hostNetwork }} |
|||
{{- if .Values.webhook.hostNetwork }} |
|||
hostPorts: |
|||
- max: {{ .Values.webhook.securePort }} |
|||
min: {{ .Values.webhook.securePort }} |
|||
{{- end }} |
|||
hostIPC: false |
|||
hostPID: false |
|||
runAsUser: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
seLinux: |
|||
rule: 'RunAsAny' |
|||
supplementalGroups: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
fsGroup: |
|||
rule: 'MustRunAs' |
|||
ranges: |
|||
- min: 1000 |
|||
max: 1000 |
|||
{{- end }} |
@ -0,0 +1,83 @@ |
|||
{{- if .Values.global.rbac.create }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: Role |
|||
metadata: |
|||
name: {{ template "webhook.fullname" . }}:dynamic-serving |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
resourceNames: |
|||
- '{{ template "webhook.fullname" . }}-ca' |
|||
verbs: ["get", "list", "watch", "update"] |
|||
# It's not possible to grant CREATE permission on a single resourceName. |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["create"] |
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: RoleBinding |
|||
metadata: |
|||
name: {{ template "webhook.fullname" . }}:dynamic-serving |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: Role |
|||
name: {{ template "webhook.fullname" . }}:dynamic-serving |
|||
subjects: |
|||
- apiGroup: "" |
|||
kind: ServiceAccount |
|||
name: {{ template "webhook.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
|
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ template "webhook.fullname" . }}:subjectaccessreviews |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
rules: |
|||
- apiGroups: ["authorization.k8s.io"] |
|||
resources: ["subjectaccessreviews"] |
|||
verbs: ["create"] |
|||
--- |
|||
|
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ template "webhook.fullname" . }}:subjectaccessreviews |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ template "webhook.fullname" . }}:subjectaccessreviews |
|||
subjects: |
|||
- apiGroup: "" |
|||
kind: ServiceAccount |
|||
name: {{ template "webhook.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace }} |
|||
{{- end }} |
@ -0,0 +1,32 @@ |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: {{ template "webhook.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
{{- with .Values.webhook.serviceAnnotations }} |
|||
annotations: |
|||
{{ toYaml . | indent 4 }} |
|||
{{- end }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.webhook.serviceLabels }} |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
type: {{ .Values.webhook.serviceType }} |
|||
{{- with .Values.webhook.loadBalancerIP }} |
|||
loadBalancerIP: {{ . }} |
|||
{{- end }} |
|||
ports: |
|||
- name: https |
|||
port: 443 |
|||
protocol: TCP |
|||
targetPort: "https" |
|||
selector: |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
@ -0,0 +1,25 @@ |
|||
{{- if .Values.webhook.serviceAccount.create }} |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
automountServiceAccountToken: {{ .Values.webhook.serviceAccount.automountServiceAccountToken }} |
|||
metadata: |
|||
name: {{ template "webhook.serviceAccountName" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
{{- with .Values.webhook.serviceAccount.annotations }} |
|||
annotations: |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
{{- with .Values.webhook.serviceAccount.labels }} |
|||
{{ toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
{{- with .Values.global.imagePullSecrets }} |
|||
imagePullSecrets: |
|||
{{- toYaml . | nindent 2 }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,55 @@ |
|||
apiVersion: admissionregistration.k8s.io/v1 |
|||
kind: ValidatingWebhookConfiguration |
|||
metadata: |
|||
name: {{ include "webhook.fullname" . }} |
|||
labels: |
|||
app: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/name: {{ include "webhook.name" . }} |
|||
app.kubernetes.io/instance: {{ .Release.Name }} |
|||
app.kubernetes.io/component: "webhook" |
|||
{{- include "labels" . | nindent 4 }} |
|||
annotations: |
|||
cert-manager.io/inject-ca-from-secret: "{{ .Release.Namespace }}/{{ template "webhook.fullname" . }}-ca" |
|||
{{- with .Values.webhook.validatingWebhookConfigurationAnnotations }} |
|||
{{- toYaml . | nindent 4 }} |
|||
{{- end }} |
|||
webhooks: |
|||
- name: webhook.cert-manager.io |
|||
namespaceSelector: |
|||
matchExpressions: |
|||
- key: "cert-manager.io/disable-validation" |
|||
operator: "NotIn" |
|||
values: |
|||
- "true" |
|||
- key: "name" |
|||
operator: "NotIn" |
|||
values: |
|||
- {{ .Release.Namespace }} |
|||
rules: |
|||
- apiGroups: |
|||
- "cert-manager.io" |
|||
- "acme.cert-manager.io" |
|||
apiVersions: |
|||
- "v1" |
|||
operations: |
|||
- CREATE |
|||
- UPDATE |
|||
resources: |
|||
- "*/*" |
|||
admissionReviewVersions: ["v1"] |
|||
# This webhook only accepts v1 cert-manager resources. |
|||
# Equivalent matchPolicy ensures that non-v1 resource requests are sent to |
|||
# this webhook (after the resources have been converted to v1). |
|||
matchPolicy: Equivalent |
|||
timeoutSeconds: {{ .Values.webhook.timeoutSeconds }} |
|||
failurePolicy: Fail |
|||
sideEffects: None |
|||
clientConfig: |
|||
{{- if .Values.webhook.url.host }} |
|||
url: https://{{ .Values.webhook.url.host }}/validate |
|||
{{- else }} |
|||
service: |
|||
name: {{ template "webhook.fullname" . }} |
|||
namespace: {{ .Release.Namespace | quote }} |
|||
path: /validate |
|||
{{- end }} |
@ -0,0 +1,543 @@ |
|||
# Default values for cert-manager. |
|||
# This is a YAML-formatted file. |
|||
# Declare variables to be passed into your templates. |
|||
global: |
|||
## Reference to one or more secrets to be used when pulling images |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ |
|||
## |
|||
imagePullSecrets: [] |
|||
# - name: "image-pull-secret" |
|||
|
|||
# Optional priority class to be used for the cert-manager pods |
|||
priorityClassName: "" |
|||
rbac: |
|||
create: true |
|||
# Aggregate ClusterRoles to Kubernetes default user-facing roles. Ref: https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles |
|||
aggregateClusterRoles: true |
|||
|
|||
podSecurityPolicy: |
|||
enabled: false |
|||
useAppArmor: true |
|||
|
|||
# Set the verbosity of cert-manager. Range of 0 - 6 with 6 being the most verbose. |
|||
logLevel: 2 |
|||
|
|||
leaderElection: |
|||
# Override the namespace used to store the ConfigMap for leader election |
|||
namespace: "kube-system" |
|||
|
|||
# The duration that non-leader candidates will wait after observing a |
|||
# leadership renewal until attempting to acquire leadership of a led but |
|||
# unrenewed leader slot. This is effectively the maximum duration that a |
|||
# leader can be stopped before it is replaced by another candidate. |
|||
# leaseDuration: 60s |
|||
|
|||
# The interval between attempts by the acting master to renew a leadership |
|||
# slot before it stops leading. This must be less than or equal to the |
|||
# lease duration. |
|||
# renewDeadline: 40s |
|||
|
|||
# The duration the clients should wait between attempting acquisition and |
|||
# renewal of a leadership. |
|||
# retryPeriod: 15s |
|||
|
|||
installCRDs: true |
|||
|
|||
replicaCount: 1 |
|||
|
|||
strategy: {} |
|||
# type: RollingUpdate |
|||
# rollingUpdate: |
|||
# maxSurge: 0 |
|||
# maxUnavailable: 1 |
|||
|
|||
# Comma separated list of feature gates that should be enabled on the |
|||
# controller pod. |
|||
featureGates: "" |
|||
|
|||
image: |
|||
repository: quay.io/jetstack/cert-manager-controller |
|||
# You can manage a registry with |
|||
# registry: quay.io |
|||
# repository: jetstack/cert-manager-controller |
|||
|
|||
# Override the image tag to deploy by setting this variable. |
|||
# If no value is set, the chart's appVersion will be used. |
|||
# tag: canary |
|||
|
|||
# Setting a digest will override any tag |
|||
# digest: sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20 |
|||
pullPolicy: IfNotPresent |
|||
|
|||
# Override the namespace used to store DNS provider credentials etc. for ClusterIssuer |
|||
# resources. By default, the same namespace as cert-manager is deployed within is |
|||
# used. This namespace will not be automatically created by the Helm chart. |
|||
clusterResourceNamespace: "" |
|||
|
|||
serviceAccount: |
|||
# Specifies whether a service account should be created |
|||
create: true |
|||
# The name of the service account to use. |
|||
# If not set and create is true, a name is generated using the fullname template |
|||
# name: "" |
|||
# Optional additional annotations to add to the controller's ServiceAccount |
|||
# annotations: {} |
|||
# Automount API credentials for a Service Account. |
|||
# Optional additional labels to add to the controller's ServiceAccount |
|||
# labels: {} |
|||
automountServiceAccountToken: true |
|||
|
|||
# Additional command line flags to pass to cert-manager controller binary. |
|||
# To see all available flags run docker run quay.io/jetstack/cert-manager-controller:<version> --help |
|||
extraArgs: [] |
|||
# When this flag is enabled, secrets will be automatically removed when the certificate resource is deleted |
|||
# - --enable-certificate-owner-ref=true |
|||
# Use this flag to enabled or disable arbitrary controllers, for example, disable the CertificiateRequests approver |
|||
# - --controllers=*,-certificaterequests-approver |
|||
|
|||
extraEnv: [] |
|||
# - name: SOME_VAR |
|||
# value: 'some value' |
|||
|
|||
resources: {} |
|||
# requests: |
|||
# cpu: 10m |
|||
# memory: 32Mi |
|||
|
|||
# Pod Security Context |
|||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
|||
securityContext: |
|||
runAsNonRoot: true |
|||
# legacy securityContext parameter format: if enabled is set to true, only fsGroup and runAsUser are supported |
|||
# securityContext: |
|||
# enabled: false |
|||
# fsGroup: 1001 |
|||
# runAsUser: 1001 |
|||
# to support additional securityContext parameters, omit the `enabled` parameter and simply specify the parameters |
|||
# you want to set, e.g. |
|||
# securityContext: |
|||
# fsGroup: 1000 |
|||
# runAsUser: 1000 |
|||
# runAsNonRoot: true |
|||
|
|||
# Container Security Context to be set on the controller component container |
|||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
|||
containerSecurityContext: |
|||
allowPrivilegeEscalation: false |
|||
# capabilities: |
|||
# drop: |
|||
# - ALL |
|||
# readOnlyRootFilesystem: true |
|||
# runAsNonRoot: true |
|||
|
|||
|
|||
volumes: [] |
|||
|
|||
volumeMounts: [] |
|||
|
|||
# Optional additional annotations to add to the controller Deployment |
|||
# deploymentAnnotations: {} |
|||
|
|||
# Optional additional annotations to add to the controller Pods |
|||
# podAnnotations: {} |
|||
|
|||
podLabels: {} |
|||
|
|||
# Optional annotations to add to the controller Service |
|||
# serviceAnnotations: {} |
|||
|
|||
# Optional additional labels to add to the controller Service |
|||
# serviceLabels: {} |
|||
|
|||
# Optional DNS settings, useful if you have a public and private DNS zone for |
|||
# the same domain on Route 53. What follows is an example of ensuring |
|||
# cert-manager can access an ingress or DNS TXT records at all times. |
|||
# NOTE: This requires Kubernetes 1.10 or `CustomPodDNS` feature gate enabled for |
|||
# the cluster to work. |
|||
# podDnsPolicy: "None" |
|||
# podDnsConfig: |
|||
# nameservers: |
|||
# - "1.1.1.1" |
|||
# - "8.8.8.8" |
|||
|
|||
nodeSelector: |
|||
kubernetes.io/os: linux |
|||
|
|||
ingressShim: {} |
|||
# defaultIssuerName: "" |
|||
# defaultIssuerKind: "" |
|||
# defaultIssuerGroup: "" |
|||
|
|||
prometheus: |
|||
enabled: true |
|||
servicemonitor: |
|||
enabled: false |
|||
prometheusInstance: default |
|||
targetPort: 9402 |
|||
path: /metrics |
|||
interval: 60s |
|||
scrapeTimeout: 30s |
|||
labels: {} |
|||
honorLabels: false |
|||
|
|||
# Use these variables to configure the HTTP_PROXY environment variables |
|||
# http_proxy: "http://proxy:8080" |
|||
# https_proxy: "https://proxy:8080" |
|||
# no_proxy: 127.0.0.1,localhost |
|||
|
|||
# expects input structure as per specification https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#affinity-v1-core |
|||
# for example: |
|||
# affinity: |
|||
# nodeAffinity: |
|||
# requiredDuringSchedulingIgnoredDuringExecution: |
|||
# nodeSelectorTerms: |
|||
# - matchExpressions: |
|||
# - key: foo.bar.com/role |
|||
# operator: In |
|||
# values: |
|||
# - master |
|||
affinity: {} |
|||
|
|||
# expects input structure as per specification https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#toleration-v1-core |
|||
# for example: |
|||
# tolerations: |
|||
# - key: foo.bar.com/role |
|||
# operator: Equal |
|||
# value: master |
|||
# effect: NoSchedule |
|||
tolerations: [] |
|||
|
|||
webhook: |
|||
replicaCount: 1 |
|||
timeoutSeconds: 10 |
|||
|
|||
# Used to configure options for the webhook pod. |
|||
# This allows setting options that'd usually be provided via flags. |
|||
# An APIVersion and Kind must be specified in your values.yaml file. |
|||
# Flags will override options that are set here. |
|||
config: |
|||
# apiVersion: webhook.config.cert-manager.io/v1alpha1 |
|||
# kind: WebhookConfiguration |
|||
|
|||
# The port that the webhook should listen on for requests. |
|||
# In GKE private clusters, by default kubernetes apiservers are allowed to |
|||
# talk to the cluster nodes only on 443 and 10250. so configuring |
|||
# securePort: 10250, will work out of the box without needing to add firewall |
|||
# rules or requiring NET_BIND_SERVICE capabilities to bind port numbers <1000. |
|||
# This should be uncommented and set as a default by the chart once we graduate |
|||
# the apiVersion of WebhookConfiguration past v1alpha1. |
|||
# securePort: 10250 |
|||
|
|||
strategy: {} |
|||
# type: RollingUpdate |
|||
# rollingUpdate: |
|||
# maxSurge: 0 |
|||
# maxUnavailable: 1 |
|||
|
|||
# Pod Security Context to be set on the webhook component Pod |
|||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
|||
securityContext: |
|||
runAsNonRoot: true |
|||
|
|||
# Container Security Context to be set on the webhook component container |
|||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
|||
containerSecurityContext: |
|||
allowPrivilegeEscalation: false |
|||
# capabilities: |
|||
# drop: |
|||
# - ALL |
|||
# readOnlyRootFilesystem: true |
|||
# runAsNonRoot: true |
|||
|
|||
# Optional additional annotations to add to the webhook Deployment |
|||
# deploymentAnnotations: {} |
|||
|
|||
# Optional additional annotations to add to the webhook Pods |
|||
# podAnnotations: {} |
|||
|
|||
# Optional additional annotations to add to the webhook Service |
|||
# serviceAnnotations: {} |
|||
|
|||
# Optional additional annotations to add to the webhook MutatingWebhookConfiguration |
|||
# mutatingWebhookConfigurationAnnotations: {} |
|||
|
|||
# Optional additional annotations to add to the webhook ValidatingWebhookConfiguration |
|||
# validatingWebhookConfigurationAnnotations: {} |
|||
|
|||
# Additional command line flags to pass to cert-manager webhook binary. |
|||
# To see all available flags run docker run quay.io/jetstack/cert-manager-webhook:<version> --help |
|||
extraArgs: [] |
|||
# Path to a file containing a WebhookConfiguration object used to configure the webhook |
|||
# - --config=<path-to-config-file> |
|||
|
|||
resources: {} |
|||
# requests: |
|||
# cpu: 10m |
|||
# memory: 32Mi |
|||
|
|||
## Liveness and readiness probe values |
|||
## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes |
|||
## |
|||
livenessProbe: |
|||
failureThreshold: 3 |
|||
initialDelaySeconds: 60 |
|||
periodSeconds: 10 |
|||
successThreshold: 1 |
|||
timeoutSeconds: 1 |
|||
readinessProbe: |
|||
failureThreshold: 3 |
|||
initialDelaySeconds: 5 |
|||
periodSeconds: 5 |
|||
successThreshold: 1 |
|||
timeoutSeconds: 1 |
|||
|
|||
nodeSelector: |
|||
kubernetes.io/os: linux |
|||
|
|||
affinity: {} |
|||
|
|||
tolerations: [] |
|||
|
|||
# Optional additional labels to add to the Webhook Pods |
|||
podLabels: {} |
|||
|
|||
# Optional additional labels to add to the Webhook Service |
|||
serviceLabels: {} |
|||
|
|||
image: |
|||
repository: quay.io/jetstack/cert-manager-webhook |
|||
# You can manage a registry with |
|||
# registry: quay.io |
|||
# repository: jetstack/cert-manager-webhook |
|||
|
|||
# Override the image tag to deploy by setting this variable. |
|||
# If no value is set, the chart's appVersion will be used. |
|||
# tag: canary |
|||
|
|||
# Setting a digest will override any tag |
|||
# digest: sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20 |
|||
|
|||
pullPolicy: IfNotPresent |
|||
|
|||
serviceAccount: |
|||
# Specifies whether a service account should be created |
|||
create: true |
|||
# The name of the service account to use. |
|||
# If not set and create is true, a name is generated using the fullname template |
|||
# name: "" |
|||
# Optional additional annotations to add to the controller's ServiceAccount |
|||
# annotations: {} |
|||
# Optional additional labels to add to the webhook's ServiceAccount |
|||
# labels: {} |
|||
# Automount API credentials for a Service Account. |
|||
automountServiceAccountToken: true |
|||
|
|||
# The port that the webhook should listen on for requests. |
|||
# In GKE private clusters, by default kubernetes apiservers are allowed to |
|||
# talk to the cluster nodes only on 443 and 10250. so configuring |
|||
# securePort: 10250, will work out of the box without needing to add firewall |
|||
# rules or requiring NET_BIND_SERVICE capabilities to bind port numbers <1000 |
|||
securePort: 10250 |
|||
|
|||
# Specifies if the webhook should be started in hostNetwork mode. |
|||
# |
|||
# Required for use in some managed kubernetes clusters (such as AWS EKS) with custom |
|||
# CNI (such as calico), because control-plane managed by AWS cannot communicate |
|||
# with pods' IP CIDR and admission webhooks are not working |
|||
# |
|||
# Since the default port for the webhook conflicts with kubelet on the host |
|||
# network, `webhook.securePort` should be changed to an available port if |
|||
# running in hostNetwork mode. |
|||
hostNetwork: false |
|||
|
|||
# Specifies how the service should be handled. Useful if you want to expose the |
|||
# webhook to outside of the cluster. In some cases, the control plane cannot |
|||
# reach internal services. |
|||
serviceType: ClusterIP |
|||
# loadBalancerIP: |
|||
|
|||
# Overrides the mutating webhook and validating webhook so they reach the webhook |
|||
# service using the `url` field instead of a service. |
|||
url: {} |
|||
# host: |
|||
|
|||
cainjector: |
|||
enabled: true |
|||
replicaCount: 1 |
|||
|
|||
strategy: {} |
|||
# type: RollingUpdate |
|||
# rollingUpdate: |
|||
# maxSurge: 0 |
|||
# maxUnavailable: 1 |
|||
|
|||
# Pod Security Context to be set on the cainjector component Pod |
|||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
|||
securityContext: |
|||
runAsNonRoot: true |
|||
|
|||
# Container Security Context to be set on the cainjector component container |
|||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
|||
containerSecurityContext: |
|||
allowPrivilegeEscalation: false |
|||
# capabilities: |
|||
# drop: |
|||
# - ALL |
|||
# readOnlyRootFilesystem: true |
|||
# runAsNonRoot: true |
|||
|
|||
|
|||
# Optional additional annotations to add to the cainjector Deployment |
|||
# deploymentAnnotations: {} |
|||
|
|||
# Optional additional annotations to add to the cainjector Pods |
|||
# podAnnotations: {} |
|||
|
|||
# Additional command line flags to pass to cert-manager cainjector binary. |
|||
# To see all available flags run docker run quay.io/jetstack/cert-manager-cainjector:<version> --help |
|||
extraArgs: [] |
|||
# Enable profiling for cainjector |
|||
# - --enable-profiling=true |
|||
|
|||
resources: {} |
|||
# requests: |
|||
# cpu: 10m |
|||
# memory: 32Mi |
|||
|
|||
nodeSelector: |
|||
kubernetes.io/os: linux |
|||
|
|||
affinity: {} |
|||
|
|||
tolerations: [] |
|||
|
|||
# Optional additional labels to add to the CA Injector Pods |
|||
podLabels: {} |
|||
|
|||
image: |
|||
repository: quay.io/jetstack/cert-manager-cainjector |
|||
# You can manage a registry with |
|||
# registry: quay.io |
|||
# repository: jetstack/cert-manager-cainjector |
|||
|
|||
# Override the image tag to deploy by setting this variable. |
|||
# If no value is set, the chart's appVersion will be used. |
|||
# tag: canary |
|||
|
|||
# Setting a digest will override any tag |
|||
# digest: sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20 |
|||
|
|||
pullPolicy: IfNotPresent |
|||
|
|||
serviceAccount: |
|||
# Specifies whether a service account should be created |
|||
create: true |
|||
# The name of the service account to use. |
|||
# If not set and create is true, a name is generated using the fullname template |
|||
# name: "" |
|||
# Optional additional annotations to add to the controller's ServiceAccount |
|||
# annotations: {} |
|||
# Automount API credentials for a Service Account. |
|||
# Optional additional labels to add to the cainjector's ServiceAccount |
|||
# labels: {} |
|||
automountServiceAccountToken: true |
|||
|
|||
# This startupapicheck is a Helm post-install hook that waits for the webhook |
|||
# endpoints to become available. |
|||
# The check is implemented using a Kubernetes Job- if you are injecting mesh |
|||
# sidecar proxies into cert-manager pods, you probably want to ensure that they |
|||
# are not injected into this Job's pod. Otherwise the installation may time out |
|||
# due to the Job never being completed because the sidecar proxy does not exit. |
|||
# See https://github.com/cert-manager/cert-manager/pull/4414 for context. |
|||
startupapicheck: |
|||
enabled: true |
|||
|
|||
# Pod Security Context to be set on the startupapicheck component Pod |
|||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
|||
securityContext: |
|||
runAsNonRoot: true |
|||
|
|||
# Container Security Context to be set on the controller component container |
|||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ |
|||
containerSecurityContext: |
|||
allowPrivilegeEscalation: false |
|||
# capabilities: |
|||
# drop: |
|||
# - ALL |
|||
# readOnlyRootFilesystem: true |
|||
# runAsNonRoot: true |
|||
|
|||
# Timeout for 'kubectl check api' command |
|||
timeout: 1m |
|||
|
|||
# Job backoffLimit |
|||
backoffLimit: 4 |
|||
|
|||
# Optional additional annotations to add to the startupapicheck Job |
|||
jobAnnotations: |
|||
helm.sh/hook: post-install |
|||
helm.sh/hook-weight: "1" |
|||
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded |
|||
|
|||
# Optional additional annotations to add to the startupapicheck Pods |
|||
# podAnnotations: {} |
|||
|
|||
# Additional command line flags to pass to startupapicheck binary. |
|||
# To see all available flags run docker run quay.io/jetstack/cert-manager-ctl:<version> --help |
|||
extraArgs: [] |
|||
|
|||
resources: {} |
|||
# requests: |
|||
# cpu: 10m |
|||
# memory: 32Mi |
|||
|
|||
nodeSelector: {} |
|||
|
|||
affinity: {} |
|||
|
|||
tolerations: [] |
|||
|
|||
# Optional additional labels to add to the startupapicheck Pods |
|||
podLabels: {} |
|||
|
|||
image: |
|||
repository: quay.io/jetstack/cert-manager-ctl |
|||
# You can manage a registry with |
|||
# registry: quay.io |
|||
# repository: jetstack/cert-manager-ctl |
|||
|
|||
# Override the image tag to deploy by setting this variable. |
|||
# If no value is set, the chart's appVersion will be used. |
|||
# tag: canary |
|||
|
|||
# Setting a digest will override any tag |
|||
# digest: sha256:0e072dddd1f7f8fc8909a2ca6f65e76c5f0d2fcfb8be47935ae3457e8bbceb20 |
|||
|
|||
pullPolicy: IfNotPresent |
|||
|
|||
rbac: |
|||
# annotations for the startup API Check job RBAC and PSP resources |
|||
annotations: |
|||
helm.sh/hook: post-install |
|||
helm.sh/hook-weight: "-5" |
|||
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded |
|||
|
|||
serviceAccount: |
|||
# Specifies whether a service account should be created |
|||
create: true |
|||
|
|||
# The name of the service account to use. |
|||
# If not set and create is true, a name is generated using the fullname template |
|||
# name: "" |
|||
|
|||
# Optional additional annotations to add to the Job's ServiceAccount |
|||
annotations: |
|||
helm.sh/hook: post-install |
|||
helm.sh/hook-weight: "-5" |
|||
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded |
|||
|
|||
# Automount API credentials for a Service Account. |
|||
automountServiceAccountToken: true |
|||
|
|||
# Optional additional labels to add to the startupapicheck's ServiceAccount |
|||
# labels: {} |
@ -0,0 +1,6 @@ |
|||
dependencies: |
|||
- name: common |
|||
repository: https://charts.bitnami.com/bitnami |
|||
version: 1.16.0 |
|||
digest: sha256:f41cb9ff725b7c9fa2725634196a6813566d630342f86a74903ed114b282c8c0 |
|||
generated: "2022-06-06T11:37:37.250846899Z" |
@ -0,0 +1,33 @@ |
|||
annotations: |
|||
category: Infrastructure |
|||
apiVersion: v2 |
|||
appVersion: 0.12.1 |
|||
dependencies: |
|||
- name: common |
|||
repository: https://charts.bitnami.com/bitnami |
|||
tags: |
|||
- bitnami-common |
|||
version: 1.x.x |
|||
description: MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols. |
|||
engine: gotpl |
|||
home: https://github.com/bitnami/charts/tree/master/bitnami/metallb |
|||
icon: https://bitnami.com/assets/stacks/metallb-speaker/img/metallb-speaker-stack-220x234.png |
|||
keywords: |
|||
- load-balancer |
|||
- balancer |
|||
- lb |
|||
- bgp |
|||
- arp |
|||
- vrrp |
|||
- vip |
|||
maintainers: |
|||
- name: cellebyte |
|||
email: cellebyte@gmail.com |
|||
- name: Bitnami |
|||
url: https://github.com/bitnami/charts |
|||
name: metallb |
|||
sources: |
|||
- https://github.com/metallb/metallb |
|||
- https://github.com/bitnami/bitnami-docker-metallb |
|||
- https://metallb.universe.tf |
|||
version: 3.0.9 |
@ -0,0 +1,405 @@ |
|||
<!--- app-name: MetalLB --> |
|||
|
|||
# MetalLB packaged by Bitnami |
|||
|
|||
MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols. |
|||
|
|||
[Overview of MetalLB](https://metallb.universe.tf/) |
|||
|
|||
Trademarks: This software listing is packaged by Bitnami. The respective trademarks mentioned in the offering are owned by the respective companies, and use of them does not imply any affiliation or endorsement. |
|||
|
|||
## TL;DR |
|||
|
|||
```console |
|||
$ helm repo add bitnami https://charts.bitnami.com/bitnami |
|||
$ helm install my-release bitnami/metallb |
|||
``` |
|||
|
|||
## Introduction |
|||
Bitnami charts for Helm are carefully engineered, actively maintained and are the quickest and easiest way to deploy containers on a Kubernetes cluster that are ready to handle production workloads. |
|||
|
|||
This chart bootstraps a [MetalLB Controller](https://metallb.universe.tf/community/) Controller Deployment and a [MetalLB Speaker](https://metallb.universe.tf/community/) Daemonset on a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. |
|||
|
|||
Bitnami charts can be used with [Kubeapps](https://kubeapps.dev/) for deployment and management of Helm Charts in clusters. |
|||
|
|||
## Prerequisites |
|||
|
|||
- Kubernetes 1.19+ |
|||
- Helm 3.2.0+ |
|||
- Virtual IPs for Layer 2 or Route Reflector for BGP setup. |
|||
|
|||
## Installing the Chart |
|||
|
|||
To install the chart with the release name `my-release`: |
|||
|
|||
```console |
|||
$ helm repo add bitnami https://charts.bitnami.com/bitnami |
|||
$ helm install my-release bitnami/metallb |
|||
``` |
|||
|
|||
These commands deploy metallb on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation. |
|||
|
|||
> **Tip**: List all releases using `helm list` |
|||
|
|||
## Uninstalling the Chart |
|||
|
|||
To uninstall/delete the `my-release` helm release: |
|||
|
|||
```console |
|||
$ helm uninstall my-release |
|||
``` |
|||
|
|||
The command removes all the Kubernetes components associated with the chart and deletes the release. |
|||
|
|||
## Parameters |
|||
|
|||
### Global parameters |
|||
|
|||
| Name | Description | Value | |
|||
| ------------------------- | ----------------------------------------------- | ----- | |
|||
| `global.imageRegistry` | Global Docker image registry | `""` | |
|||
| `global.imagePullSecrets` | Global Docker registry secret names as an array | `[]` | |
|||
|
|||
|
|||
### Common parameters |
|||
|
|||
| Name | Description | Value | |
|||
| ------------------------ | --------------------------------------------------------------------------------------- | -------------- | |
|||
| `kubeVersion` | Force target Kubernetes version (using Helm capabilities if not set) | `""` | |
|||
| `nameOverride` | String to partially override metallb.fullname include (will maintain the release name) | `""` | |
|||
| `fullnameOverride` | String to fully override metallb.fullname template | `""` | |
|||
| `commonLabels` | Add labels to all the deployed resources | `{}` | |
|||
| `commonAnnotations` | Add annotations to all the deployed resources | `{}` | |
|||
| `extraDeploy` | Array of extra objects to deploy with the release | `[]` | |
|||
| `diagnosticMode.enabled` | Enable diagnostic mode (all probes will be disabled and the command will be overridden) | `false` | |
|||
| `diagnosticMode.command` | Command to override all containers in the the deployment(s)/statefulset(s) | `["sleep"]` | |
|||
| `diagnosticMode.args` | Args to override all containers in the the deployment(s)/statefulset(s) | `["infinity"]` | |
|||
|
|||
|
|||
### MetalLB parameters |
|||
|
|||
| Name | Description | Value | |
|||
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------- | |
|||
| `existingConfigMap` | Specify the name of an externally-defined ConfigMap to use as the configuration. This is mutually exclusive with the `configInline` option. | `""` | |
|||
| `configInline` | Specifies MetalLB's configuration directly, in yaml format. | `{}` | |
|||
| `rbac.create` | Specifies whether to install and use RBAC rules | `true` | |
|||
| `psp.create` | Whether to create a PodSecurityPolicy. WARNING: PodSecurityPolicy is deprecated in Kubernetes v1.21 or later, unavailable in v1.25 or later | `false` | |
|||
| `networkPolicy.enabled` | Enable NetworkPolicy | `false` | |
|||
| `networkPolicy.ingressNSMatchLabels` | Allow connections from other namespaces | `{}` | |
|||
| `networkPolicy.ingressNSPodMatchLabels` | For other namespaces match by pod labels and namespace labels | `{}` | |
|||
| `prometheusRule.enabled` | Prometheus Operator alertmanager alerts are created | `false` | |
|||
|
|||
|
|||
### Controller parameters |
|||
|
|||
| Name | Description | Value | |
|||
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | |
|||
| `controller.image.registry` | MetalLB Controller image registry | `docker.io` | |
|||
| `controller.image.repository` | MetalLB Controller image repository | `bitnami/metallb-controller` | |
|||
| `controller.image.tag` | MetalLB Controller image tag (immutable tags are recommended) | `0.12.1-debian-10-r59` | |
|||
| `controller.image.pullPolicy` | MetalLB Controller image pull policy | `IfNotPresent` | |
|||
| `controller.image.pullSecrets` | Specify docker-registry secret names as an array | `[]` | |
|||
| `controller.updateStrategy.type` | Metallb controller deployment strategy type. | `RollingUpdate` | |
|||
| `controller.hostAliases` | Deployment pod host aliases | `[]` | |
|||
| `controller.rbac.create` | create specifies whether to install and use RBAC rules. | `true` | |
|||
| `controller.psp.create` | Whether to create a PodSecurityPolicy. WARNING: PodSecurityPolicy is deprecated in Kubernetes v1.21 or later, unavailable in v1.25 or later | `true` | |
|||
| `controller.priorityClassName` | Metallb controller pods' priorityClassName | `""` | |
|||
| `controller.schedulerName` | Name of the k8s scheduler (other than default) | `""` | |
|||
| `controller.terminationGracePeriodSeconds` | In seconds, time the given to the Metallb controller pod needs to terminate gracefully | `0` | |
|||
| `controller.topologySpreadConstraints` | Topology Spread Constraints for pod assignment | `[]` | |
|||
| `controller.resources.limits` | The resources limits for the container | `{}` | |
|||
| `controller.resources.requests` | The requested resources for the container | `{}` | |
|||
| `controller.nodeSelector` | Node labels for controller pod assignment | `{}` | |
|||
| `controller.tolerations` | Tolerations for controller pod assignment | `[]` | |
|||
| `controller.affinity` | Affinity for controller pod assignment | `{}` | |
|||
| `controller.podAnnotations` | Controller Pod annotations | `{}` | |
|||
| `controller.podLabels` | Controller Pod labels | `{}` | |
|||
| `controller.podAffinityPreset` | Controller Pod affinitypreset. Allowed values: soft, hard | `""` | |
|||
| `controller.podAntiAffinityPreset` | Controller Pod anti affinitypreset. Allowed values: soft, hard | `soft` | |
|||
| `controller.nodeAffinityPreset.type` | Controller Pod Node affinity preset. Allowed values: soft, hard | `""` | |
|||
| `controller.nodeAffinityPreset.key` | Controller Pod Node affinity label key to match | `""` | |
|||
| `controller.nodeAffinityPreset.values` | Controller Pod Node affinity label values to match | `[]` | |
|||
| `controller.podSecurityContext.enabled` | Enabled Metallb Controller pods' Security Context | `true` | |
|||
| `controller.podSecurityContext.fsGroup` | Set Metallb Controller pod's Security Context fsGroup | `1001` | |
|||
| `controller.containerSecurityContext.enabled` | Enabled Metallb Controller containers' Security Context | `true` | |
|||
| `controller.containerSecurityContext.runAsUser` | Set Metallb Controller containers' Security Context runAsUser | `1001` | |
|||
| `controller.containerSecurityContext.runAsNonRoot` | Set Metallb Controller container's Security Context runAsNonRoot | `true` | |
|||
| `controller.containerSecurityContext.allowPrivilegeEscalation` | Enables privilege Escalation context for the pod. | `false` | |
|||
| `controller.containerSecurityContext.readOnlyRootFilesystem` | Allows the pod to mount the RootFS as ReadOnly | `true` | |
|||
| `controller.containerSecurityContext.capabilities.drop` | Drop capabilities for the securityContext | `[]` | |
|||
| `controller.command` | Override default container command (useful when using custom images) | `[]` | |
|||
| `controller.args` | Override default container args (useful when using custom images) | `[]` | |
|||
| `controller.lifecycleHooks` | for the Metallb Controller container(s) to automate configuration before or after startup | `{}` | |
|||
| `controller.extraEnvVars` | Extra environment variable to pass to the running container. | `[]` | |
|||
| `controller.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for Metallb controller nodes | `""` | |
|||
| `controller.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for Metallb controller nodes | `""` | |
|||
| `controller.extraVolumes` | Optionally specify extra list of additional volumes for the Metallb controller pod(s) | `[]` | |
|||
| `controller.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the Metallb controller container(s) | `[]` | |
|||
| `controller.sidecars` | Add additional sidecar containers to the Metallb Controller pod(s) | `[]` | |
|||
| `controller.initContainers` | Add additional init containers to the Metallb Controller pod(s) | `[]` | |
|||
| `controller.serviceAccount.create` | Specifies whether a ServiceAccount should be created | `true` | |
|||
| `controller.serviceAccount.name` | Name of the service account to use. If not set and create is true, a name is generated using the fullname template. | `""` | |
|||
| `controller.serviceAccount.automountServiceAccountToken` | Automount service account token for the server service account | `true` | |
|||
| `controller.serviceAccount.annotations` | Annotations for service account. Evaluated as a template. Only used if `create` is `true`. | `{}` | |
|||
| `controller.revisionHistoryLimit` | Configure the revisionHistoryLimit of the Controller deployment | `3` | |
|||
| `controller.containerPorts.metrics` | Configures the ports the MetalLB Controller listens on for metrics | `7472` | |
|||
| `controller.livenessProbe.enabled` | Enable livenessProbe | `true` | |
|||
| `controller.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` | |
|||
| `controller.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` | |
|||
| `controller.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` | |
|||
| `controller.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` | |
|||
| `controller.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` | |
|||
| `controller.readinessProbe.enabled` | Enable readinessProbe | `true` | |
|||
| `controller.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` | |
|||
| `controller.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` | |
|||
| `controller.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` | |
|||
| `controller.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` | |
|||
| `controller.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` | |
|||
| `controller.startupProbe.enabled` | Enable startupProbe | `false` | |
|||
| `controller.startupProbe.initialDelaySeconds` | Initial delay seconds for startupProbe | `10` | |
|||
| `controller.startupProbe.periodSeconds` | Period seconds for startupProbe | `10` | |
|||
| `controller.startupProbe.timeoutSeconds` | Timeout seconds for startupProbe | `1` | |
|||
| `controller.startupProbe.failureThreshold` | Failure threshold for startupProbe | `3` | |
|||
| `controller.startupProbe.successThreshold` | Success threshold for startupProbe | `1` | |
|||
| `controller.customStartupProbe` | Custom liveness probe for the Web component | `{}` | |
|||
| `controller.customLivenessProbe` | Custom liveness probe for the Web component | `{}` | |
|||
| `controller.customReadinessProbe` | Custom readiness probe for the Web component | `{}` | |
|||
|
|||
|
|||
### Metallb controller Prometheus metrics export |
|||
|
|||
| Name | Description | Value | |
|||
| ----------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------ | |
|||
| `controller.metrics.enabled` | Enable the export of Prometheus metrics | `false` | |
|||
| `controller.metrics.service.port` | Prometheus metrics service port | `7472` | |
|||
| `controller.metrics.service.annotations` | Annotations for the Prometheus Exporter service service | `{}` | |
|||
| `controller.metrics.serviceMonitor.enabled` | Specify if a servicemonitor will be deployed for prometheus-operator | `false` | |
|||
| `controller.metrics.serviceMonitor.namespace` | Namespace which Prometheus is running in | `""` | |
|||
| `controller.metrics.serviceMonitor.jobLabel` | Specify the jobLabel to use for the prometheus-operator | `app.kubernetes.io/name` | |
|||
| `controller.metrics.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `""` | |
|||
| `controller.metrics.serviceMonitor.scrapeTimeout` | Timeout after which the scrape is ended | `""` | |
|||
| `controller.metrics.serviceMonitor.metricRelabelings` | Specify additional relabeling of metrics | `[]` | |
|||
| `controller.metrics.serviceMonitor.relabelings` | Specify general relabeling | `[]` | |
|||
| `controller.metrics.serviceMonitor.selector` | ServiceMonitor selector labels | `{}` | |
|||
| `controller.metrics.serviceMonitor.labels` | Extra labels for the ServiceMonitor | `{}` | |
|||
| `controller.metrics.serviceMonitor.honorLabels` | honorLabels chooses the metric's labels on collisions with target labels | `false` | |
|||
|
|||
|
|||
### Speaker parameters |
|||
|
|||
| Name | Description | Value | |
|||
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | |
|||
| `speaker.image.registry` | MetalLB Speaker image registry | `docker.io` | |
|||
| `speaker.image.repository` | MetalLB Speaker image repository | `bitnami/metallb-speaker` | |
|||
| `speaker.image.tag` | MetalLB Speaker image tag (immutable tags are recommended) | `0.12.1-debian-10-r59` | |
|||
| `speaker.image.pullPolicy` | MetalLB Speaker image pull policy | `IfNotPresent` | |
|||
| `speaker.image.pullSecrets` | Specify docker-registry secret names as an array | `[]` | |
|||
| `speaker.updateStrategy.type` | Speaker daemonset strategy type | `RollingUpdate` | |
|||
| `speaker.rbac.create` | create specifies whether to install and use RBAC rules. | `true` | |
|||
| `speaker.hostAliases` | Deployment pod host aliases | `[]` | |
|||
| `speaker.psp.create` | Whether to create a PodSecurityPolicy. WARNING: PodSecurityPolicy is deprecated in Kubernetes v1.21 or later, unavailable in v1.25 or later | `true` | |
|||
| `speaker.priorityClassName` | Speaker pods' priorityClassName | `""` | |
|||
| `speaker.terminationGracePeriodSeconds` | In seconds, time the given to the Speaker pod needs to terminate gracefully | `2` | |
|||
| `speaker.resources.limits` | The resources limits for the container | `{}` | |
|||
| `speaker.resources.requests` | The requested resources for the container | `{}` | |
|||
| `speaker.nodeSelector` | Node labels for speaker pod assignment | `{}` | |
|||
| `speaker.tolerations` | Tolerations for speaker pod assignment | `[]` | |
|||
| `speaker.affinity` | Affinity for speaker pod assignment | `{}` | |
|||
| `speaker.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `speaker.affinity` is set. Allowed values: `soft` or `hard` | `""` | |
|||
| `speaker.nodeAffinityPreset.key` | Node label key to match. Ignored if `speaker.affinity` is set | `""` | |
|||
| `speaker.nodeAffinityPreset.values` | Node label values to match. Ignored if `speaker.affinity` is set | `[]` | |
|||
| `speaker.podAffinityPreset` | Pod affinity preset. Ignored if `speaker.affinity` is set. Allowed values: `soft` or `hard` | `""` | |
|||
| `speaker.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `speaker.affinity` is set. Allowed values: `soft` or `hard` | `soft` | |
|||
| `speaker.podAnnotations` | Speaker Pod annotations | `{}` | |
|||
| `speaker.podLabels` | Speaker Pod labels | `{}` | |
|||
| `speaker.podSecurityContext.enabled` | Enabled Speaker pods' Security Context | `true` | |
|||
| `speaker.podSecurityContext.fsGroup` | Set Speaker pod's Security Context fsGroup | `0` | |
|||
| `speaker.containerSecurityContext.enabled` | Enabled Speaker containers' Security Context | `true` | |
|||
| `speaker.containerSecurityContext.runAsUser` | Set Speaker containers' Security Context runAsUser | `0` | |
|||
| `speaker.containerSecurityContext.allowPrivilegeEscalation` | Enables privilege Escalation context for the pod. | `false` | |
|||
| `speaker.containerSecurityContext.readOnlyRootFilesystem` | Allows the pod to mount the RootFS as ReadOnly | `true` | |
|||
| `speaker.containerSecurityContext.capabilities.drop` | Drop capabilities for the securityContext | `[]` | |
|||
| `speaker.containerSecurityContext.capabilities.add` | Add capabilities for the securityContext | `[]` | |
|||
| `speaker.command` | Override default container command (useful when using custom images) | `[]` | |
|||
| `speaker.args` | Override default container args (useful when using custom images) | `[]` | |
|||
| `speaker.lifecycleHooks` | for the Speaker container(s) to automate configuration before or after startup | `{}` | |
|||
| `speaker.sidecars` | Add additional sidecar containers to the Speaker pod(s) | `[]` | |
|||
| `speaker.initContainers` | Add additional init containers to the Speaker pod(s) | `[]` | |
|||
| `speaker.serviceAccount.create` | Specifies whether a ServiceAccount should be created | `true` | |
|||
| `speaker.serviceAccount.name` | Name of the service account to use. If not set and create is true, a name is generated using the fullname template. | `""` | |
|||
| `speaker.serviceAccount.automountServiceAccountToken` | Automount service account token for the server service account | `true` | |
|||
| `speaker.serviceAccount.annotations` | Annotations for service account. Evaluated as a template. Only used if `create` is `true`. | `{}` | |
|||
| `speaker.secretName` | References a Secret name for the member secret outside of the helm chart | `""` | |
|||
| `speaker.secretKey` | References a Secret key the member secret outside of the helm chart | `""` | |
|||
| `speaker.secretValue` | Custom value for `speaker.secretKey` | `""` | |
|||
| `speaker.extraEnvVars` | Extra environment variable to pass to the running container. | `[]` | |
|||
| `speaker.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for Speaker nodes | `""` | |
|||
| `speaker.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for Speaker nodes | `""` | |
|||
| `speaker.extraVolumes` | Optionally specify extra list of additional volumes for the Speaker pod(s) | `[]` | |
|||
| `speaker.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the Speaker container(s) | `[]` | |
|||
| `speaker.containerPorts.metrics` | HTTP Metrics Endpoint | `7472` | |
|||
| `speaker.livenessProbe.enabled` | Enable livenessProbe | `true` | |
|||
| `speaker.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` | |
|||
| `speaker.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` | |
|||
| `speaker.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` | |
|||
| `speaker.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` | |
|||
| `speaker.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` | |
|||
| `speaker.readinessProbe.enabled` | Enable readinessProbe | `true` | |
|||
| `speaker.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` | |
|||
| `speaker.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` | |
|||
| `speaker.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` | |
|||
| `speaker.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` | |
|||
| `speaker.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` | |
|||
| `speaker.startupProbe.enabled` | Enable startupProbe | `false` | |
|||
| `speaker.startupProbe.initialDelaySeconds` | Initial delay seconds for startupProbe | `10` | |
|||
| `speaker.startupProbe.periodSeconds` | Period seconds for startupProbe | `10` | |
|||
| `speaker.startupProbe.timeoutSeconds` | Timeout seconds for startupProbe | `1` | |
|||
| `speaker.startupProbe.failureThreshold` | Failure threshold for startupProbe | `3` | |
|||
| `speaker.startupProbe.successThreshold` | Success threshold for startupProbe | `1` | |
|||
| `speaker.customStartupProbe` | Custom liveness probe for the Web component | `{}` | |
|||
| `speaker.customLivenessProbe` | Custom liveness probe for the Web component | `{}` | |
|||
| `speaker.customReadinessProbe` | Custom readiness probe for the Web component | `{}` | |
|||
|
|||
|
|||
### Speaker Prometheus metrics export |
|||
|
|||
| Name | Description | Value | |
|||
| -------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------ | |
|||
| `speaker.metrics.enabled` | Enable the export of Prometheus metrics | `false` | |
|||
| `speaker.metrics.service.port` | Prometheus metrics service port | `7472` | |
|||
| `speaker.metrics.service.annotations` | Annotations for the Prometheus Exporter service service | `{}` | |
|||
| `speaker.metrics.serviceMonitor.enabled` | Enable support for Prometheus Operator | `false` | |
|||
| `speaker.metrics.serviceMonitor.namespace` | Namespace which Prometheus is running in | `""` | |
|||
| `speaker.metrics.serviceMonitor.jobLabel` | Job label for scrape target | `app.kubernetes.io/name` | |
|||
| `speaker.metrics.serviceMonitor.interval` | Scrape interval. If not set, the Prometheus default scrape interval is used | `""` | |
|||
| `speaker.metrics.serviceMonitor.scrapeTimeout` | Timeout after which the scrape is ended | `""` | |
|||
| `speaker.metrics.serviceMonitor.metricRelabelings` | Specify additional relabeling of metrics | `[]` | |
|||
| `speaker.metrics.serviceMonitor.relabelings` | Specify general relabeling | `[]` | |
|||
| `speaker.metrics.serviceMonitor.selector` | ServiceMonitor selector labels | `{}` | |
|||
| `speaker.metrics.serviceMonitor.labels` | Extra labels for the ServiceMonitor | `{}` | |
|||
| `speaker.metrics.serviceMonitor.honorLabels` | honorLabels chooses the metric's labels on collisions with target labels | `false` | |
|||
|
|||
|
|||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, |
|||
|
|||
```console |
|||
$ helm install my-release \ |
|||
--set readinessProbe.successThreshold=5 \ |
|||
bitnami/metallb |
|||
``` |
|||
The above command sets the `readinessProbe.successThreshold` to `5`. |
|||
|
|||
## Configuration and installation details |
|||
|
|||
### [Rolling VS Immutable tags](https://docs.bitnami.com/containers/how-to/understand-rolling-tags-containers/) |
|||
|
|||
It is strongly recommended to use immutable tags in a production environment. This ensures your deployment does not change automatically if the same tag is updated with a different image. |
|||
|
|||
Bitnami will release a new chart updating its containers if a new version of the main container, significant changes, or critical vulnerabilities exist. |
|||
|
|||
To configure [MetalLB](https://metallb.universe.tf) please look into the configuration section [MetalLB Configuration](https://metallb.universe.tf/configuration/). |
|||
|
|||
### Example Layer 2 configuration |
|||
|
|||
```yaml |
|||
configInline: |
|||
# The address-pools section lists the IP addresses that MetalLB is |
|||
# allowed to allocate, along with settings for how to advertise |
|||
# those addresses over BGP once assigned. You can have as many |
|||
# address pools as you want. |
|||
address-pools: |
|||
- # A name for the address pool. Services can request allocation |
|||
# from a specific address pool using this name, by listing this |
|||
# name under the 'metallb.universe.tf/address-pool' annotation. |
|||
name: generic-cluster-pool |
|||
# Protocol can be used to select how the announcement is done. |
|||
# Supported values are bgp and layer2. |
|||
protocol: layer2 |
|||
# A list of IP address ranges over which MetalLB has |
|||
# authority. You can list multiple ranges in a single pool, they |
|||
# will all share the same settings. Each range can be either a |
|||
# CIDR prefix, or an explicit start-end range of IPs. |
|||
addresses: |
|||
- 10.27.50.30-10.27.50.35 |
|||
``` |
|||
|
|||
## Troubleshooting |
|||
|
|||
Find more information about how to deal with common errors related to Bitnami's Helm charts in [this troubleshooting guide](https://docs.bitnami.com/general/how-to/troubleshoot-helm-chart-issues). |
|||
|
|||
## Upgrading |
|||
|
|||
### To 3.0.0 |
|||
|
|||
This major release renames several values in this chart and adds missing features, in order to be aligned with the rest of the assets in the Bitnami charts repository. |
|||
|
|||
Affected values: |
|||
|
|||
- `<controller/speaker>.prometheus` has been renamed as `<controller/speaker>.metrics`. |
|||
- To enable the Prometheus serviceMonitors, it is necessary to enable both `<controller/speaker>.metrics.enabled` and `<controller/speaker>.metrics.serviceMonitor.enabled`. |
|||
- Added the values section `<controller/speaker>.metrics.service`. |
|||
- `<controller/speaker>.securityContext` has been split as `<controller/speaker>.podSecurityContext` and `<controller/speaker>.containerSecurityContext` |
|||
- `controller.containerPort` has been renamed as `controller.containerPorts`. |
|||
- `speaker.daemonset.hostPorts.metrics` renamed as `speaker.containerPorts.metrics` |
|||
- `speaker.daemonset.terminationGracePeriodSeconds` renamed as speaker.terminationGracePeriodSeconds |
|||
|
|||
### To 2.0.0 |
|||
|
|||
**What changes were introduced in this major version?** |
|||
|
|||
- The `.Values.prometheus` section was moved into the components `.Values.controller.prometheus` and `.Values.speaker.prometheus` |
|||
- The `prometheus.prometheusRule` which is used to toggle the deployment of the metallb alerts is moved under the root of the `.Values.prometheusRule` |
|||
- A globel `.Values.psp.create` and `.Values.rbac.create` was introduced together with the option of toggeling for each component. (global option overwrites component options) |
|||
- `Values.controller.rbac.create` and `Values.controller.psp.create` |
|||
- `Values.speaker.rbac.create` and `Values.speaker.psp.create` |
|||
|
|||
**Considerations when upgrading to this version** |
|||
|
|||
- Check if you used the `prometheus` section in you deployment. |
|||
- If you do so, place the configuration you made into the sections `controller.prometheus` and `speaker.prometheus`. |
|||
- `prometheusRule` should stay under the root of your values. |
|||
|
|||
### To 1.0.0 |
|||
|
|||
[On November 13, 2020, Helm v2 support was formally finished](https://github.com/helm/charts#status-of-the-project), this major version is the result of the required changes applied to the Helm Chart to be able to incorporate the different features added in Helm v3 and to be consistent with the Helm project itself regarding the Helm v2 EOL. |
|||
|
|||
**What changes were introduced in this major version?** |
|||
|
|||
- Previous versions of this Helm Chart use `apiVersion: v1` (installable by both Helm 2 and 3), this Helm Chart was updated to `apiVersion: v2` (installable by Helm 3 only). [Here](https://helm.sh/docs/topics/charts/#the-apiversion-field) you can find more information about the `apiVersion` field. |
|||
- The different fields present in the *Chart.yaml* file has been ordered alphabetically in a homogeneous way for all the Bitnami Helm Charts |
|||
|
|||
**Considerations when upgrading to this version** |
|||
|
|||
- If you want to upgrade to this version from a previous one installed with Helm v3, you shouldn't face any issues |
|||
- If you want to upgrade to this version using Helm v2, this scenario is not supported as this version doesn't support Helm v2 anymore |
|||
- If you installed the previous version with Helm v2 and wants to upgrade to this version with Helm v3, please refer to the [official Helm documentation](https://helm.sh/docs/topics/v2_v3_migration/#migration-use-cases) about migrating from Helm v2 to v3 |
|||
|
|||
**Useful links** |
|||
|
|||
- https://docs.bitnami.com/tutorials/resolve-helm2-helm3-post-migration-issues/ |
|||
- https://helm.sh/docs/topics/v2_v3_migration/ |
|||
- https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/ |
|||
|
|||
## Community supported solution |
|||
|
|||
Please, note this Helm chart is a community-supported solution. This means that the Bitnami team is not actively working on new features/improvements nor providing support through GitHub Issues for this Helm chart. Any new issue will stay open for 20 days to allow the community to contribute, after 15 days without activity the issue will be marked as stale being closed after 5 days. |
|||
|
|||
The Bitnami team will review any PR that is created, feel free to create a PR if you find any issue or want to implement a new feature. |
|||
|
|||
New versions are not going to be affected. Once a new version is released in the upstream project, the Bitnami container image will be updated to use the latest version. |
|||
|
|||
## License |
|||
|
|||
Copyright © 2022 Bitnami |
|||
|
|||
Licensed under the Apache License, Version 2.0 (the "License"); |
|||
you may not use this file except in compliance with the License. |
|||
You may obtain a copy of the License at |
|||
|
|||
http://www.apache.org/licenses/LICENSE-2.0 |
|||
|
|||
Unless required by applicable law or agreed to in writing, software |
|||
distributed under the License is distributed on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
See the License for the specific language governing permissions and |
|||
limitations under the License. |
@ -0,0 +1,67 @@ |
|||
CHART NAME: {{ .Chart.Name }} |
|||
CHART VERSION: {{ .Chart.Version }} |
|||
APP VERSION: {{ .Chart.AppVersion }} |
|||
|
|||
** Please be patient while the chart is being deployed ** |
|||
|
|||
{{- if .Values.diagnosticMode.enabled }} |
|||
The chart has been deployed in diagnostic mode. All probes have been disabled and the command has been overwritten with: |
|||
|
|||
command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 4 }} |
|||
args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 4 }} |
|||
|
|||
Get the list of pods by executing: |
|||
|
|||
kubectl get pods --namespace {{ include "common.names.namespace" . }} -l app.kubernetes.io/instance={{ .Release.Name }} |
|||
|
|||
Access the pod you want to debug by executing |
|||
|
|||
kubectl exec --namespace {{ include "common.names.namespace" . }} -ti <NAME OF THE POD> -- bash |
|||
|
|||
In order to replicate the container startup scripts execute these commands in their respective pods: |
|||
|
|||
speaker --port={{ .Values.speaker.containerPorts.metrics }} --config={{ include "metallb.configMapName" . }} |
|||
controller --port={{ .Values.controller.containerPorts.metrics }} --config={{ include "metallb.configMapName" . }} |
|||
|
|||
{{- else }} |
|||
|
|||
MetalLB is now running in the cluster |
|||
|
|||
LoadBalancer Services in your cluster are now available on the IPs you |
|||
defined in MetalLB's configuration. To see IP assignments, |
|||
|
|||
kubectl get services -o wide --all-namespaces | grep --color=never -E 'LoadBalancer|NAMESPACE' |
|||
|
|||
should be executed. |
|||
|
|||
To see the currently configured configuration for metallb run |
|||
|
|||
kubectl get configmaps --namespace {{ include "common.names.namespace" . }} {{ include "metallb.configMapName" . }} -o yaml |
|||
|
|||
in your preferred shell. |
|||
|
|||
{{- if .Values.existingConfigMap }} |
|||
WARNING: you specified a ConfigMap that isn't managed by |
|||
Helm. LoadBalancer services will not function until you add that |
|||
ConfigMap to your cluster yourself. |
|||
|
|||
Ensure you put the configmap in place |
|||
|
|||
kubectl get configmaps --namespace {{ include "common.names.namespace" . }} | grep --color=never -E "{{ include "metallb.configMapName" . }}|NAME" |
|||
|
|||
If it is missing create it with: |
|||
|
|||
kubectl create configmap {{ include "metallb.configMapName" . }} --namespace {{ include "common.names.namespace" . }} --from-file=config |
|||
{{- end }} |
|||
|
|||
{{- if .Values.speaker.secretName }} |
|||
WARNING: you specified a secretName that isn't managed by |
|||
Helm. The MetalLB speakers will not join without the secret in place. |
|||
|
|||
kubectl get secrets --namespace {{ include "common.names.namespace" . }} | grep --color=never -E "{{ include "metallb.speaker.secretName" . }}|NAME" |
|||
|
|||
If it is missing create it with: |
|||
|
|||
kubectl create secret {{ include "metallb.speaker.secretName" . }} --from-file={{ include "metallb.speaker.secretKey" . }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,37 @@ |
|||
{{/* vim: set filetype=mustache: */}} |
|||
|
|||
{{/* |
|||
Create the name of the controller service account to use |
|||
*/}} |
|||
{{- define "metallb.controller.serviceAccountName" -}} |
|||
{{ include "common.secrets.name" (dict "existingSecret" .Values.controller.serviceAccount.name "defaultNameSuffix" "controller" "context" $) }} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create the name of the speaker service account to use |
|||
*/}} |
|||
{{- define "metallb.speaker.serviceAccountName" -}} |
|||
{{ include "common.secrets.name" (dict "existingSecret" .Values.speaker.serviceAccount.name "defaultNameSuffix" "speaker" "context" $) }} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create the name of the settings ConfigMap to use. |
|||
*/}} |
|||
{{- define "metallb.configMapName" -}} |
|||
{{ include "common.secrets.name" (dict "existingSecret" .Values.existingConfigMap "defaultNameSuffix" "config" "context" $) }} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create the name of the member Secret to use. |
|||
*/}} |
|||
{{- define "metallb.speaker.secretName" -}} |
|||
{{ include "common.secrets.name" (dict "existingSecret" .Values.speaker.secretName "defaultNameSuffix" "memberlist" "context" $) }} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create the key of the member Secret to use. |
|||
*/}} |
|||
{{- define "metallb.speaker.secretKey" -}} |
|||
{{ include "common.secrets.key" (dict "existingSecret" .Values.speaker.secretKey "key" "secretkey") }} |
|||
{{- end -}} |
|||
|
@ -0,0 +1,17 @@ |
|||
{{- if not .Values.existingConfigMap }} |
|||
apiVersion: v1 |
|||
kind: ConfigMap |
|||
metadata: |
|||
name: {{ include "metallb.configMapName" . }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
data: |
|||
config: | |
|||
{{ include "common.tplvalues.render" ( dict "value" .Values.configInline "context" $) | indent 4 }} |
|||
{{- end -}} |
@ -0,0 +1,149 @@ |
|||
apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }} |
|||
kind: Deployment |
|||
metadata: |
|||
name: {{ printf "%s-controller" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
replicas: 1 |
|||
{{- if .Values.controller.updateStrategy }} |
|||
strategy: {{- toYaml .Values.controller.updateStrategy | nindent 4 }} |
|||
{{- end }} |
|||
revisionHistoryLimit: {{ .Values.controller.revisionHistoryLimit }} |
|||
selector: |
|||
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} |
|||
app.kubernetes.io/component: controller |
|||
template: |
|||
metadata: |
|||
labels: {{- include "common.labels.standard" . | nindent 8 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.controller.podLabels }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.controller.podLabels "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.podAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.controller.podAnnotations "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
spec: |
|||
{{- include "common.images.pullSecrets" (dict "images" (list .Values.speaker.image .Values.controller.image) "global" .Values.global) | nindent 6 }} |
|||
{{- if .Values.controller.hostAliases }} |
|||
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.controller.hostAliases "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
serviceAccountName: {{ include "metallb.controller.serviceAccountName" . }} |
|||
nodeSelector: |
|||
"kubernetes.io/os": linux |
|||
{{- if .Values.controller.nodeSelector }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.controller.nodeSelector "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.affinity }} |
|||
affinity: {{- include "common.tplvalues.render" (dict "value" .Values.controller.affinity "context" $) | nindent 8 }} |
|||
{{- else }} |
|||
affinity: |
|||
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.controller.podAffinityPreset "component" "controller" "context" $) | nindent 10 }} |
|||
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.controller.podAntiAffinityPreset "component" "controller" "context" $) | nindent 10 }} |
|||
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.controller.nodeAffinityPreset.type "key" .Values.controller.nodeAffinityPreset.key "values" .Values.controller.nodeAffinityPreset.values) | nindent 10 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.tolerations }} |
|||
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.controller.tolerations "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.priorityClassName }} |
|||
priorityClassName: {{ .Values.controller.priorityClassName | quote }} |
|||
{{- end }} |
|||
{{- if .Values.controller.schedulerName }} |
|||
schedulerName: {{ .Values.controller.schedulerName | quote }} |
|||
{{- end }} |
|||
{{- if .Values.controller.topologySpreadConstraints }} |
|||
topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.controller.topologySpreadConstraints "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.podSecurityContext.enabled }} |
|||
securityContext: {{- omit .Values.controller.podSecurityContext "enabled" | toYaml | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.terminationGracePeriodSeconds }} |
|||
terminationGracePeriodSeconds: {{ .Values.controller.terminationGracePeriodSeconds }} |
|||
{{- end }} |
|||
{{- if .Values.controller.initContainers }} |
|||
initContainers: {{- include "common.tplvalues.render" (dict "value" .Values.controller.initContainers "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
containers: |
|||
- name: metallb-controller |
|||
image: {{ include "common.images.image" (dict "imageRoot" .Values.controller.image "global" .Values.global) }} |
|||
imagePullPolicy: {{ .Values.controller.image.pullPolicy }} |
|||
{{- if .Values.controller.containerSecurityContext.enabled }} |
|||
securityContext: {{- omit .Values.controller.containerSecurityContext "enabled" | toYaml | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.diagnosticMode.enabled }} |
|||
command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }} |
|||
{{- else if .Values.controller.command }} |
|||
command: {{- include "common.tplvalues.render" (dict "value" .Values.controller.command "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.diagnosticMode.enabled }} |
|||
args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }} |
|||
{{- else if .Values.controller.args }} |
|||
args: {{- include "common.tplvalues.render" (dict "value" .Values.controller.args "context" $) | nindent 12 }} |
|||
{{- else }} |
|||
args: |
|||
- --port={{ .Values.controller.containerPorts.metrics }} |
|||
- --config={{ include "metallb.configMapName" . }} |
|||
{{- end }} |
|||
{{- if .Values.controller.lifecycleHooks }} |
|||
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.controller.lifecycleHooks "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
env: |
|||
{{- if .Values.controller.extraEnvVars }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.controller.extraEnvVars "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
envFrom: |
|||
{{- if .Values.controller.extraEnvVarsCM }} |
|||
- configMapRef: |
|||
name: {{ include "common.tplvalues.render" (dict "value" .Values.controller.extraEnvVarsCM "context" $) }} |
|||
{{- end }} |
|||
{{- if .Values.controller.extraEnvVarsSecret }} |
|||
- secretRef: |
|||
name: {{ include "common.tplvalues.render" (dict "value" .Values.controller.extraEnvVarsSecret "context" $) }} |
|||
{{- end }} |
|||
ports: |
|||
- name: metrics |
|||
containerPort: {{ .Values.controller.containerPorts.metrics }} |
|||
{{- if .Values.controller.extraVolumeMounts }} |
|||
volumeMounts: {{- include "common.tplvalues.render" (dict "value" .Values.controller.extraVolumeMounts "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- if not .Values.diagnosticMode.enabled }} |
|||
{{- if .Values.controller.livenessProbe.enabled }} |
|||
livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.controller.livenessProbe "enabled") "context" $) | nindent 12 }} |
|||
httpGet: |
|||
path: /metrics |
|||
port: metrics |
|||
{{- else if .Values.controller.customLivenessProbe }} |
|||
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.controller.customLivenessProbe "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.readinessProbe.enabled }} |
|||
readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.controller.readinessProbe "enabled") "context" $) | nindent 12 }} |
|||
httpGet: |
|||
path: /metrics |
|||
port: metrics |
|||
{{- else if .Values.controller.customReadinessProbe }} |
|||
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.controller.customReadinessProbe "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.startupProbe.enabled }} |
|||
startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.controller.startupProbe "enabled") "context" $) | nindent 12 }} |
|||
tcpSocket: |
|||
port: metrics |
|||
{{- else if .Values.controller.customStartupProbe }} |
|||
startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.controller.customStartupProbe "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- if .Values.controller.resources }} |
|||
resources: {{- toYaml .Values.controller.resources | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.sidecars }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.controller.sidecars "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.extraVolumes }} |
|||
volumes: {{- include "common.tplvalues.render" (dict "value" .Values.controller.extraVolumes "context" $) | nindent 8 }} |
|||
{{- end }} |
@ -0,0 +1,49 @@ |
|||
{{- $pspAvailable := (semverCompare "<1.25-0" (include "common.capabilities.kubeVersion" .)) -}} |
|||
{{- if and $pspAvailable .Values.psp.create .Values.controller.psp.create -}} |
|||
apiVersion: policy/v1beta1 |
|||
kind: PodSecurityPolicy |
|||
metadata: |
|||
name: {{ printf "%s-controller" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
allowPrivilegeEscalation: {{ .Values.controller.containerSecurityContext.allowPrivilegeEscalation }} |
|||
allowedCapabilities: [] |
|||
allowedHostPaths: [] |
|||
defaultAddCapabilities: [] |
|||
defaultAllowPrivilegeEscalation: {{ .Values.controller.containerSecurityContext.allowPrivilegeEscalation }} |
|||
fsGroup: |
|||
ranges: |
|||
- max: {{ .Values.controller.podSecurityContext.fsGroup }} |
|||
min: {{ .Values.controller.podSecurityContext.fsGroup }} |
|||
rule: MustRunAs |
|||
hostIPC: false |
|||
hostNetwork: false |
|||
hostPID: false |
|||
privileged: false |
|||
readOnlyRootFilesystem: {{ .Values.controller.containerSecurityContext.readOnlyRootFilesystem }} |
|||
requiredDropCapabilities: {{- toYaml .Values.controller.containerSecurityContext.capabilities.drop | nindent 2 }} |
|||
runAsUser: |
|||
ranges: |
|||
- max: {{ .Values.controller.containerSecurityContext.runAsUser }} |
|||
min: {{ .Values.controller.containerSecurityContext.runAsUser }} |
|||
rule: MustRunAs |
|||
seLinux: |
|||
rule: RunAsAny |
|||
supplementalGroups: |
|||
ranges: |
|||
- max: {{ .Values.controller.containerSecurityContext.runAsUser }} |
|||
min: {{ .Values.controller.containerSecurityContext.runAsUser }} |
|||
rule: MustRunAs |
|||
volumes: |
|||
- configMap |
|||
- secret |
|||
- emptyDir |
|||
{{- end -}} |
@ -0,0 +1,69 @@ |
|||
{{- if and .Values.rbac.create .Values.controller.rbac.create -}} |
|||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ printf "%s-controller" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
rules: |
|||
- apiGroups: |
|||
- '' |
|||
resources: |
|||
- services |
|||
verbs: |
|||
- get |
|||
- list |
|||
- watch |
|||
- update |
|||
- apiGroups: |
|||
- '' |
|||
resources: |
|||
- services/status |
|||
verbs: |
|||
- update |
|||
- apiGroups: |
|||
- '' |
|||
resources: |
|||
- events |
|||
verbs: |
|||
- create |
|||
- patch |
|||
- apiGroups: |
|||
- policy |
|||
resourceNames: |
|||
- {{ printf "%s-controller" (include "common.names.fullname" .) }} |
|||
resources: |
|||
- podsecuritypolicies |
|||
verbs: |
|||
- use |
|||
--- |
|||
## Role bindings |
|||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ printf "%s-controller" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ include "metallb.controller.serviceAccountName" . }} |
|||
namespace: {{ include "common.names.namespace" . }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ printf "%s-controller" (include "common.names.fullname" .) }} |
|||
{{- end -}} |
@ -0,0 +1,29 @@ |
|||
{{- if .Values.controller.metrics.enabled }} |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: {{ printf "%s-controller-metrics" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
annotations: |
|||
{{- if .Values.commonAnnotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.metrics.service.annotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.controller.metrics.service.annotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
type: ClusterIP |
|||
clusterIP: "None" |
|||
selector: {{- include "common.labels.matchLabels" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
ports: |
|||
- name: metrics |
|||
port: {{ .Values.controller.metrics.service.port }} |
|||
protocol: TCP |
|||
targetPort: {{ .Values.controller.containerPorts.metrics }} |
|||
{{- end }} |
@ -0,0 +1,22 @@ |
|||
{{- if .Values.controller.serviceAccount.create }} |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
metadata: |
|||
name: {{ include "metallb.controller.serviceAccountName" . }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if or .Values.controller.serviceAccount.annotations .Values.commonAnnotations }} |
|||
annotations: |
|||
{{- if .Values.commonAnnotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.serviceAccount.annotations }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.controller.serviceAccount.annotations "context" $) | nindent 4 }} |
|||
{{- end }} |
|||
{{- end }} |
|||
automountServiceAccountToken: {{ .Values.controller.serviceAccount.automountServiceAccountToken }} |
|||
{{- end -}} |
@ -0,0 +1,51 @@ |
|||
{{- if and .Values.controller.metrics.enabled .Values.controller.metrics.serviceMonitor.enabled }} |
|||
apiVersion: monitoring.coreos.com/v1 |
|||
kind: ServiceMonitor |
|||
metadata: |
|||
name: {{ printf "%s-controller" (include "common.names.fullname" .) }} |
|||
{{- if .Values.controller.metrics.serviceMonitor.namespace }} |
|||
namespace: {{ .Values.controller.metrics.serviceMonitor.namespace | quote }} |
|||
{{- else }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
{{- end }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.metrics.serviceMonitor.labels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.controller.metrics.serviceMonitor.labels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
annotations: |
|||
{{- if .Values.commonAnnotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
jobLabel: {{ .Values.controller.metrics.serviceMonitor.jobLabel | quote }} |
|||
selector: |
|||
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.controller.metrics.serviceMonitor.selector }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.controller.metrics.serviceMonitor.selector "context" $) | nindent 6 }} |
|||
{{- end }} |
|||
namespaceSelector: |
|||
matchNames: |
|||
- {{ include "common.names.namespace" .| quote }} |
|||
endpoints: |
|||
- port: metrics |
|||
{{- if .Values.controller.metrics.serviceMonitor.interval }} |
|||
interval: {{ .Values.controller.metrics.serviceMonitor.interval }} |
|||
{{- end }} |
|||
{{- if .Values.controller.metrics.serviceMonitor.scrapeTimeout }} |
|||
scrapeTimeout: {{ .Values.controller.metrics.serviceMonitor.scrapeTimeout }} |
|||
{{- end }} |
|||
{{- if .Values.controller.metrics.serviceMonitor.honorLabels }} |
|||
honorLabels: {{ .Values.controller.metrics.serviceMonitor.honorLabels }} |
|||
{{- end }} |
|||
{{- if .Values.controller.metrics.serviceMonitor.metricRelabelings }} |
|||
metricRelabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.controller.metrics.serviceMonitor.metricRelabelings "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.controller.metrics.serviceMonitor.relabelings }} |
|||
relabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.controller.metrics.serviceMonitor.relabelings "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- end -}} |
@ -0,0 +1,4 @@ |
|||
{{- range .Values.extraDeploy }} |
|||
--- |
|||
{{ include "common.tplvalues.render" (dict "value" . "context" $) }} |
|||
{{- end }} |
@ -0,0 +1,41 @@ |
|||
{{- if .Values.networkPolicy.enabled }} |
|||
kind: NetworkPolicy |
|||
apiVersion: {{ include "common.capabilities.networkPolicy.apiVersion" . }} |
|||
metadata: |
|||
name: {{ printf "%s-controller" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: controller |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
podSelector: |
|||
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} |
|||
app.kubernetes.io/component: controller |
|||
policyTypes: |
|||
- Ingress |
|||
ingress: |
|||
# Allow prometheus scrapes for metrics |
|||
- ports: |
|||
- port: {{ .Values.controller.containerPorts.metrics }} |
|||
protocol: TCP |
|||
{{- if .Values.networkPolicy.ingressNSMatchLabels }} |
|||
from: |
|||
- namespaceSelector: |
|||
matchLabels: |
|||
{{- range $key, $value := .Values.networkPolicy.ingressNSMatchLabels }} |
|||
{{ $key | quote }}: {{ $value | quote }} |
|||
{{- end }} |
|||
{{- if .Values.networkPolicy.ingressNSPodMatchLabels }} |
|||
podSelector: |
|||
matchLabels: |
|||
{{- range $key, $value := .Values.networkPolicy.ingressNSPodMatchLabels }} |
|||
{{ $key | quote }}: {{ $value | quote }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,34 @@ |
|||
{{- if and .Values.prometheusRule.enabled .Values.speaker.metrics.serviceMonitor.enabled .Values.controller.metrics.serviceMonitor.enabled }} |
|||
apiVersion: monitoring.coreos.com/v1 |
|||
kind: PrometheusRule |
|||
metadata: |
|||
name: {{ include "common.names.fullname" . }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
groups: |
|||
- name: {{ include "common.names.fullname" . }}.alerts |
|||
rules: |
|||
- alert: MetalLBStaleConfig |
|||
annotations: |
|||
message: {{`'{{ $labels.job }} - MetalLB {{ $labels.container_name }} on {{ $labels.instance |
|||
}} has a stale config for > 1 minute'`}} |
|||
expr: metallb_k8s_client_config_stale_bool{job="{{ include "common.names.name" . }}"} == 1 |
|||
for: 1m |
|||
labels: |
|||
severity: warning |
|||
- alert: MetalLBConfigNotLoaded |
|||
annotations: |
|||
message: {{`'{{ $labels.job }} - MetalLB {{ $labels.container_name }} on {{ $labels.instance |
|||
}} has not loaded for > 1 minute'`}} |
|||
expr: metallb_k8s_client_config_loaded_bool{job="{{ include "common.names.name" . }}"} == 0 |
|||
for: 1m |
|||
labels: |
|||
severity: warning |
|||
{{- end }} |
@ -0,0 +1,49 @@ |
|||
{{- if and .Values.rbac.create (or .Values.controller.rbac.create .Values.speaker.rbac.create ) -}} |
|||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} |
|||
kind: Role |
|||
metadata: |
|||
name: {{ printf "%s-config-watcher" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
rules: |
|||
- apiGroups: |
|||
- '' |
|||
resources: |
|||
- configmaps |
|||
verbs: |
|||
- get |
|||
- list |
|||
- watch |
|||
--- |
|||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} |
|||
kind: RoleBinding |
|||
metadata: |
|||
name: {{ printf "%s-config-watcher" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
subjects: |
|||
{{- if .Values.controller.rbac.create }} |
|||
- kind: ServiceAccount |
|||
name: {{ include "metallb.controller.serviceAccountName" . }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.rbac.create }} |
|||
- kind: ServiceAccount |
|||
name: {{ include "metallb.speaker.serviceAccountName" . }} |
|||
{{- end }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: Role |
|||
name: {{ printf "%s-config-watcher" (include "common.names.fullname" .) }} |
|||
{{- end -}} |
@ -0,0 +1,165 @@ |
|||
apiVersion: apps/v1 |
|||
kind: DaemonSet |
|||
metadata: |
|||
name: {{ printf "%s-speaker" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
{{- if .Values.speaker.updateStrategy }} |
|||
updateStrategy: {{- toYaml .Values.speaker.updateStrategy | nindent 4 }} |
|||
{{- end }} |
|||
selector: |
|||
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} |
|||
app.kubernetes.io/component: speaker |
|||
template: |
|||
metadata: |
|||
labels: {{- include "common.labels.standard" . | nindent 8 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.speaker.podLabels }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.speaker.podLabels "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.podAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.podAnnotations "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
spec: |
|||
{{- include "common.images.pullSecrets" (dict "images" (list .Values.speaker.image .Values.controller.image) "global" .Values.global) | nindent 6 }} |
|||
{{- if .Values.speaker.hostAliases }} |
|||
hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.hostAliases "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
serviceAccountName: {{ include "metallb.speaker.serviceAccountName" . }} |
|||
{{- if .Values.speaker.affinity }} |
|||
affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.speaker.affinity "context" $) | nindent 8 }} |
|||
{{- else }} |
|||
affinity: |
|||
podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.speaker.podAffinityPreset "component" "speaker" "context" $) | nindent 10 }} |
|||
podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.speaker.podAntiAffinityPreset "component" "speaker" "context" $) | nindent 10 }} |
|||
nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.speaker.nodeAffinityPreset.type "key" .Values.speaker.nodeAffinityPreset.key "values" .Values.speaker.nodeAffinityPreset.values) | nindent 10 }} |
|||
{{- end }} |
|||
nodeSelector: |
|||
{{- if .Values.speaker.nodeSelector }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.speaker.nodeSelector "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
"kubernetes.io/os": linux |
|||
{{- if .Values.speaker.tolerations }} |
|||
tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.tolerations "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
hostNetwork: true |
|||
{{- if .Values.speaker.priorityClassName }} |
|||
priorityClassName: {{ .Values.speaker.priorityClassName | quote }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.podSecurityContext.enabled }} |
|||
securityContext: {{- omit .Values.speaker.podSecurityContext "enabled" | toYaml | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.terminationGracePeriodSeconds }} |
|||
terminationGracePeriodSeconds: {{ .Values.speaker.terminationGracePeriodSeconds }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.initContainers }} |
|||
initContainers: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.initContainers "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
containers: |
|||
- name: metallb-speaker |
|||
image: {{ include "common.images.image" (dict "imageRoot" .Values.speaker.image "global" .Values.global) }} |
|||
imagePullPolicy: {{ .Values.speaker.image.pullPolicy }} |
|||
{{- if .Values.speaker.containerSecurityContext.enabled }} |
|||
securityContext: {{- omit .Values.speaker.containerSecurityContext "enabled" | toYaml | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.diagnosticMode.enabled }} |
|||
command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }} |
|||
{{- else if .Values.speaker.command }} |
|||
command: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.command "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.diagnosticMode.enabled }} |
|||
args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }} |
|||
{{- else if .Values.speaker.args }} |
|||
args: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.args "context" $) | nindent 12 }} |
|||
{{- else }} |
|||
args: |
|||
- --port={{ .Values.speaker.containerPorts.metrics }} |
|||
- --config={{ include "metallb.configMapName" . }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.lifecycleHooks }} |
|||
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.lifecycleHooks "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
env: |
|||
- name: METALLB_NODE_NAME |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: spec.nodeName |
|||
- name: METALLB_HOST |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: status.hostIP |
|||
- name: METALLB_ML_BIND_ADDR |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: status.podIP |
|||
- name: METALLB_ML_LABELS |
|||
value: "app.kubernetes.io/name={{ include "common.names.name" . }},app.kubernetes.io/instance={{ .Release.Name }},app.kubernetes.io/component=speaker" |
|||
- name: METALLB_ML_NAMESPACE |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: metadata.namespace |
|||
- name: METALLB_ML_SECRET_KEY |
|||
valueFrom: |
|||
secretKeyRef: |
|||
name: {{ include "metallb.speaker.secretName" . }} |
|||
key: {{ include "metallb.speaker.secretKey" . }} |
|||
{{- if .Values.speaker.extraEnvVars }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.speaker.extraEnvVars "context" $ ) | nindent 12 }} |
|||
{{- end }} |
|||
envFrom: |
|||
{{- if .Values.speaker.extraEnvVarsCM }} |
|||
- configMapRef: |
|||
name: {{ include "common.tplvalues.render" (dict "value" .Values.speaker.extraEnvVarsCM "context" $) }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.extraEnvVarsSecret }} |
|||
- secretRef: |
|||
name: {{ include "common.tplvalues.render" (dict "value" .Values.speaker.extraEnvVarsSecret "context" $) }} |
|||
{{- end }} |
|||
ports: |
|||
- name: metrics |
|||
containerPort: {{ .Values.speaker.containerPorts.metrics }} |
|||
{{- if not .Values.diagnosticMode.enabled }} |
|||
{{- if .Values.speaker.livenessProbe.enabled }} |
|||
livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.speaker.livenessProbe "enabled") "context" $) | nindent 12 }} |
|||
httpGet: |
|||
path: /metrics |
|||
port: metrics |
|||
{{- else if .Values.speaker.customLivenessProbe }} |
|||
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.customLivenessProbe "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.readinessProbe.enabled }} |
|||
readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.speaker.readinessProbe "enabled") "context" $) | nindent 12 }} |
|||
httpGet: |
|||
path: /metrics |
|||
port: metrics |
|||
{{- else if .Values.speaker.customReadinessProbe }} |
|||
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.customReadinessProbe "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.startupProbe.enabled }} |
|||
startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.speaker.startupProbe "enabled") "context" $) | nindent 12 }} |
|||
tcpSocket: |
|||
port: metrics |
|||
{{- else if .Values.speaker.customStartupProbe }} |
|||
startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.customStartupProbe "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.resources }} |
|||
resources: {{- toYaml .Values.speaker.resources | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.extraVolumeMounts }} |
|||
volumeMounts: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.extraVolumeMounts "context" $) | nindent 12 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.sidecars }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.speaker.sidecars "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.extraVolumes }} |
|||
volumes: {{- include "common.tplvalues.render" (dict "value" .Values.speaker.extraVolumes "context" $) | nindent 8 }} |
|||
{{- end }} |
@ -0,0 +1,43 @@ |
|||
{{- $pspAvailable := (semverCompare "<1.25-0" (include "common.capabilities.kubeVersion" .)) -}} |
|||
{{- if and $pspAvailable .Values.psp.create .Values.speaker.psp.create -}} |
|||
apiVersion: policy/v1beta1 |
|||
kind: PodSecurityPolicy |
|||
metadata: |
|||
name: {{ printf "%s-speaker" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
allowPrivilegeEscalation: {{ .Values.speaker.containerSecurityContext.allowPrivilegeEscalation }} |
|||
allowedCapabilities: {{- toYaml .Values.speaker.containerSecurityContext.capabilities.add | nindent 2 }} |
|||
allowedHostPaths: [] |
|||
defaultAddCapabilities: {{- toYaml .Values.speaker.containerSecurityContext.capabilities.add | nindent 2 }} |
|||
defaultAllowPrivilegeEscalation: {{ .Values.speaker.containerSecurityContext.allowPrivilegeEscalation }} |
|||
fsGroup: |
|||
rule: RunAsAny |
|||
hostIPC: false |
|||
hostNetwork: true |
|||
hostPID: false |
|||
hostPorts: |
|||
- max: {{ .Values.speaker.containerPorts.metrics }} |
|||
min: {{ .Values.speaker.containerPorts.metrics }} |
|||
privileged: true |
|||
readOnlyRootFilesystem: {{ .Values.speaker.containerSecurityContext.readOnlyRootFilesystem }} |
|||
requiredDropCapabilities: {{- toYaml .Values.speaker.containerSecurityContext.capabilities.drop | nindent 2 }} |
|||
runAsUser: |
|||
rule: RunAsAny |
|||
seLinux: |
|||
rule: RunAsAny |
|||
supplementalGroups: |
|||
rule: RunAsAny |
|||
volumes: |
|||
- configMap |
|||
- secret |
|||
- emptyDir |
|||
{{- end -}} |
@ -0,0 +1,105 @@ |
|||
{{- if and .Values.rbac.create .Values.speaker.rbac.create -}} |
|||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} |
|||
kind: ClusterRole |
|||
metadata: |
|||
name: {{ printf "%s-speaker" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
rules: |
|||
- apiGroups: |
|||
- '' |
|||
resources: |
|||
- services |
|||
- endpoints |
|||
- nodes |
|||
verbs: |
|||
- get |
|||
- list |
|||
- watch |
|||
- apiGroups: |
|||
- '' |
|||
resources: |
|||
- events |
|||
verbs: |
|||
- create |
|||
- patch |
|||
- apiGroups: |
|||
- policy |
|||
resourceNames: |
|||
- {{ printf "%s-speaker" (include "common.names.fullname" .) }} |
|||
resources: |
|||
- podsecuritypolicies |
|||
verbs: |
|||
- use |
|||
--- |
|||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} |
|||
kind: Role |
|||
metadata: |
|||
name: {{ printf "%s-pod-lister" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
rules: |
|||
- apiGroups: |
|||
- '' |
|||
resources: |
|||
- pods |
|||
verbs: |
|||
- list |
|||
--- |
|||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} |
|||
kind: ClusterRoleBinding |
|||
metadata: |
|||
name: {{ printf "%s-speaker" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ include "metallb.speaker.serviceAccountName" . }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: ClusterRole |
|||
name: {{ printf "%s-speaker" (include "common.names.fullname" .) }} |
|||
--- |
|||
apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} |
|||
kind: RoleBinding |
|||
metadata: |
|||
name: {{ printf "%s-pod-lister" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.commonAnnotations }} |
|||
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: Role |
|||
name: {{ printf "%s-pod-lister" (include "common.names.fullname" .) }} |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ include "metallb.speaker.serviceAccountName" . }} |
|||
{{- end -}} |
@ -0,0 +1,20 @@ |
|||
{{- if not .Values.speaker.secretName }} |
|||
apiVersion: v1 |
|||
kind: Secret |
|||
metadata: |
|||
name: {{ include "metallb.speaker.secretName" . }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
annotations: |
|||
"helm.sh/hook": "pre-install" |
|||
"helm.sh/hook-delete-policy": "before-hook-creation" |
|||
{{- if .Values.commonAnnotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
data: |
|||
{{ include "metallb.speaker.secretKey" . }}: {{ include "common.secrets.passwords.manage" (dict "secret" ( include "metallb.speaker.secretName" .) "key" ( include "metallb.speaker.secretKey" .) "providedValues" (list "speaker.secretValue") "length" 256 "context" $) }} |
|||
{{- end }} |
@ -0,0 +1,29 @@ |
|||
{{- if .Values.speaker.metrics.enabled }} |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: {{ printf "%s-speaker-metrics" (include "common.names.fullname" .) }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
annotations: |
|||
{{- if .Values.commonAnnotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.metrics.service.annotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.speaker.metrics.service.annotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
type: ClusterIP |
|||
clusterIP: "None" |
|||
selector: {{- include "common.labels.matchLabels" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
ports: |
|||
- name: metrics |
|||
port: {{ .Values.speaker.metrics.service.port }} |
|||
protocol: TCP |
|||
targetPort: {{ .Values.speaker.containerPorts.metrics }} |
|||
{{- end }} |
@ -0,0 +1,22 @@ |
|||
{{- if .Values.speaker.serviceAccount.create }} |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
metadata: |
|||
name: {{ include "metallb.speaker.serviceAccountName" . }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if or .Values.speaker.serviceAccount.annotations .Values.commonAnnotations }} |
|||
annotations: |
|||
{{- if .Values.commonAnnotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.serviceAccount.annotations }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.speaker.serviceAccount.annotations "context" $) | nindent 4 }} |
|||
{{- end }} |
|||
{{- end }} |
|||
automountServiceAccountToken: {{ .Values.speaker.serviceAccount.automountServiceAccountToken }} |
|||
{{- end -}} |
@ -0,0 +1,51 @@ |
|||
{{- if and .Values.speaker.metrics.enabled .Values.speaker.metrics.serviceMonitor.enabled }} |
|||
apiVersion: monitoring.coreos.com/v1 |
|||
kind: ServiceMonitor |
|||
metadata: |
|||
name: {{ printf "%s-speaker" (include "common.names.fullname" .) }} |
|||
{{- if .Values.speaker.metrics.serviceMonitor.namespace }} |
|||
namespace: {{ .Values.speaker.metrics.serviceMonitor.namespace | quote }} |
|||
{{- else }} |
|||
namespace: {{ include "common.names.namespace" . | quote }} |
|||
{{- end }} |
|||
labels: {{- include "common.labels.standard" . | nindent 4 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.commonLabels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.metrics.serviceMonitor.labels }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.speaker.metrics.serviceMonitor.labels "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
annotations: |
|||
{{- if .Values.commonAnnotations }} |
|||
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
jobLabel: {{ .Values.speaker.metrics.serviceMonitor.jobLabel | quote }} |
|||
selector: |
|||
matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} |
|||
app.kubernetes.io/component: speaker |
|||
{{- if .Values.speaker.metrics.serviceMonitor.selector }} |
|||
{{- include "common.tplvalues.render" (dict "value" .Values.speaker.metrics.serviceMonitor.selector "context" $) | nindent 6 }} |
|||
{{- end }} |
|||
namespaceSelector: |
|||
matchNames: |
|||
- {{ include "common.names.namespace" .| quote }} |
|||
endpoints: |
|||
- port: metrics |
|||
{{- if .Values.speaker.metrics.serviceMonitor.interval }} |
|||
interval: {{ .Values.speaker.metrics.serviceMonitor.interval }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.metrics.serviceMonitor.scrapeTimeout }} |
|||
scrapeTimeout: {{ .Values.speaker.metrics.serviceMonitor.scrapeTimeout }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.metrics.serviceMonitor.honorLabels }} |
|||
honorLabels: {{ .Values.speaker.metrics.serviceMonitor.honorLabels }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.metrics.serviceMonitor.metricRelabelings }} |
|||
metricRelabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.speaker.metrics.serviceMonitor.metricRelabelings "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.speaker.metrics.serviceMonitor.relabelings }} |
|||
relabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.speaker.metrics.serviceMonitor.relabelings "context" $) | nindent 8 }} |
|||
{{- end }} |
|||
{{- end -}} |
@ -0,0 +1,812 @@ |
|||
## @section Global parameters |
|||
## Global Docker image parameters |
|||
## Please, note that this will override the image parameters, including dependencies, configured to use the global value |
|||
## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass |
|||
|
|||
## @param global.imageRegistry Global Docker image registry |
|||
## @param global.imagePullSecrets Global Docker registry secret names as an array |
|||
## |
|||
global: |
|||
imageRegistry: "" |
|||
## E.g. |
|||
## imagePullSecrets: |
|||
## - myRegistryKeySecretName |
|||
## |
|||
imagePullSecrets: [] |
|||
|
|||
## @section Common parameters |
|||
|
|||
## @param kubeVersion Force target Kubernetes version (using Helm capabilities if not set) |
|||
## |
|||
kubeVersion: "" |
|||
## @param nameOverride String to partially override metallb.fullname include (will maintain the release name) |
|||
## |
|||
nameOverride: "" |
|||
## @param fullnameOverride String to fully override metallb.fullname template |
|||
## |
|||
fullnameOverride: "" |
|||
## @param commonLabels Add labels to all the deployed resources |
|||
## |
|||
commonLabels: {} |
|||
## @param commonAnnotations Add annotations to all the deployed resources |
|||
## |
|||
commonAnnotations: {} |
|||
## @param extraDeploy Array of extra objects to deploy with the release |
|||
## |
|||
extraDeploy: [] |
|||
|
|||
## Enable diagnostic mode in the deployment(s)/statefulset(s) |
|||
## |
|||
diagnosticMode: |
|||
## @param diagnosticMode.enabled Enable diagnostic mode (all probes will be disabled and the command will be overridden) |
|||
## |
|||
enabled: false |
|||
## @param diagnosticMode.command Command to override all containers in the the deployment(s)/statefulset(s) |
|||
## |
|||
command: |
|||
- sleep |
|||
## @param diagnosticMode.args Args to override all containers in the the deployment(s)/statefulset(s) |
|||
## |
|||
args: |
|||
- infinity |
|||
## @section MetalLB parameters |
|||
|
|||
## To configure MetalLB, you must specify ONE of the following two |
|||
## options. |
|||
## @param existingConfigMap Specify the name of an externally-defined ConfigMap to use as the configuration. This is mutually exclusive with the `configInline` option. |
|||
## Helm will not manage the contents of this ConfigMap, it is your responsibility to create it. |
|||
## e.g: |
|||
## existingConfigMap: metallb-config |
|||
## |
|||
existingConfigMap: "" |
|||
## @param configInline Specifies MetalLB's configuration directly, in yaml format. |
|||
## When configInline is used, Helm manages MetalLB's |
|||
## configuration ConfigMap as part of the release, and |
|||
## existingConfigMap is ignored. |
|||
## Refer to https://metallb.universe.tf/configuration/ for |
|||
## available options. |
|||
## |
|||
configInline: |
|||
address-pools: |
|||
- name: default |
|||
protocol: layer2 |
|||
addresses: |
|||
- 172.18.0.241-172.18.0.246 |
|||
## RBAC creation for controller and speaker |
|||
## |
|||
rbac: |
|||
## @param rbac.create Specifies whether to install and use RBAC rules |
|||
## |
|||
create: true |
|||
## PSP creation for controller and speaker |
|||
## |
|||
psp: |
|||
## @param psp.create Whether to create a PodSecurityPolicy. WARNING: PodSecurityPolicy is deprecated in Kubernetes v1.21 or later, unavailable in v1.25 or later |
|||
## |
|||
create: false |
|||
## Prometheus Operator alertmanager alerts |
|||
## |
|||
networkPolicy: |
|||
## @param networkPolicy.enabled Enable NetworkPolicy |
|||
## Prometheus scraping of the controller |
|||
## |
|||
enabled: false |
|||
## @param networkPolicy.ingressNSMatchLabels Allow connections from other namespaces |
|||
## Set label for namespace and pods (optional). |
|||
## |
|||
ingressNSMatchLabels: {} |
|||
## @param networkPolicy.ingressNSPodMatchLabels For other namespaces match by pod labels and namespace labels |
|||
## |
|||
ingressNSPodMatchLabels: {} |
|||
## @param prometheusRule.enabled Prometheus Operator alertmanager alerts are created |
|||
## |
|||
prometheusRule: |
|||
enabled: false |
|||
|
|||
## @section Controller parameters |
|||
|
|||
## Metallb Controller deployment. |
|||
## ref: https://hub.docker.com/r/bitnami/metallb-controller/tags |
|||
## |
|||
controller: |
|||
## @param controller.image.registry MetalLB Controller image registry |
|||
## @param controller.image.repository MetalLB Controller image repository |
|||
## @param controller.image.tag MetalLB Controller image tag (immutable tags are recommended) |
|||
## @param controller.image.pullPolicy MetalLB Controller image pull policy |
|||
## @param controller.image.pullSecrets Specify docker-registry secret names as an array |
|||
## |
|||
image: |
|||
registry: docker.io |
|||
repository: bitnami/metallb-controller |
|||
tag: 0.12.1-debian-11-r3 |
|||
## Specify a imagePullPolicy |
|||
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' |
|||
## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images |
|||
## |
|||
pullPolicy: IfNotPresent |
|||
## Optionally specify an array of imagePullSecrets. |
|||
## Secrets must be manually created in the namespace. |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ |
|||
## e.g: |
|||
## pullSecrets: |
|||
## - myRegistryKeySecretName |
|||
## |
|||
pullSecrets: [] |
|||
## @param controller.updateStrategy.type Metallb controller deployment strategy type. |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy |
|||
## e.g: |
|||
## updateStrategy: |
|||
## type: RollingUpdate |
|||
## rollingUpdate: |
|||
## maxSurge: 25% |
|||
## maxUnavailable: 25% |
|||
## |
|||
updateStrategy: |
|||
type: RollingUpdate |
|||
## @param controller.hostAliases Deployment pod host aliases |
|||
## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ |
|||
## |
|||
hostAliases: [] |
|||
## If global .Values.rbac.create is disabled no rbac is created. |
|||
## This value is then meaningless |
|||
## Defines if the controller rbac should be created. |
|||
## |
|||
rbac: |
|||
## @param controller.rbac.create create specifies whether to install and use RBAC rules. |
|||
## |
|||
create: true |
|||
## If global .Values.psp.create is disabled no psp is created. |
|||
## This value is then meaningless |
|||
## Defines if the controller psp should be created. |
|||
## |
|||
psp: |
|||
## @param controller.psp.create Whether to create a PodSecurityPolicy. WARNING: PodSecurityPolicy is deprecated in Kubernetes v1.21 or later, unavailable in v1.25 or later |
|||
## |
|||
create: true |
|||
## @param controller.priorityClassName Metallb controller pods' priorityClassName |
|||
## |
|||
priorityClassName: "" |
|||
## @param controller.schedulerName Name of the k8s scheduler (other than default) |
|||
## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ |
|||
## |
|||
schedulerName: "" |
|||
## @param controller.terminationGracePeriodSeconds In seconds, time the given to the Metallb controller pod needs to terminate gracefully |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods |
|||
## |
|||
terminationGracePeriodSeconds: 0 |
|||
## @param controller.topologySpreadConstraints Topology Spread Constraints for pod assignment |
|||
## https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ |
|||
## The value is evaluated as a template |
|||
## |
|||
topologySpreadConstraints: [] |
|||
## Controller container resource requests and limits |
|||
## ref: https://kubernetes.io/docs/user-guide/compute-resources/ |
|||
## We usually recommend not to specify default resources and to leave this as a conscious |
|||
## choice for the user. This also increases chances charts run on environments with little |
|||
## resources, such as Minikube. If you do want to specify resources, uncomment the following |
|||
## lines, adjust them as necessary, and remove the curly braces after 'resources:'. |
|||
## @param controller.resources.limits The resources limits for the container |
|||
## @param controller.resources.requests The requested resources for the container |
|||
## |
|||
resources: |
|||
## Example: |
|||
## limits: |
|||
## cpu: 100m |
|||
## memory: 100Mi |
|||
limits: {} |
|||
## Examples: |
|||
## requests: |
|||
## cpu: 25m |
|||
## memory: 25Mi |
|||
requests: {} |
|||
## @param controller.nodeSelector Node labels for controller pod assignment |
|||
## ref: https://kubernetes.io/docs/user-guide/node-selection/ |
|||
## |
|||
nodeSelector: {} |
|||
## @param controller.tolerations Tolerations for controller pod assignment |
|||
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ |
|||
## |
|||
tolerations: [] |
|||
## @param controller.affinity Affinity for controller pod assignment |
|||
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity |
|||
## |
|||
affinity: {} |
|||
## @param controller.podAnnotations Controller Pod annotations |
|||
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ |
|||
## |
|||
podAnnotations: {} |
|||
## @param controller.podLabels Controller Pod labels |
|||
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ |
|||
## |
|||
podLabels: {} |
|||
## @param controller.podAffinityPreset Controller Pod affinitypreset. Allowed values: soft, hard |
|||
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity |
|||
## |
|||
podAffinityPreset: "" |
|||
## @param controller.podAntiAffinityPreset Controller Pod anti affinitypreset. Allowed values: soft, hard |
|||
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity |
|||
## |
|||
podAntiAffinityPreset: soft |
|||
## Node affinity preset |
|||
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity |
|||
## Allowed values: soft, hard |
|||
## |
|||
nodeAffinityPreset: |
|||
## @param controller.nodeAffinityPreset.type Controller Pod Node affinity preset. Allowed values: soft, hard |
|||
## |
|||
type: "" |
|||
## @param controller.nodeAffinityPreset.key Controller Pod Node affinity label key to match |
|||
## E.g. |
|||
## key: "kubernetes.io/e2e-az-name" |
|||
## |
|||
key: "" |
|||
## @param controller.nodeAffinityPreset.values Controller Pod Node affinity label values to match |
|||
## E.g. |
|||
## values: |
|||
## - e2e-az1 |
|||
## - e2e-az2 |
|||
## |
|||
values: [] |
|||
## Configure Pods Security Context |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod |
|||
## @param controller.podSecurityContext.enabled Enabled Metallb Controller pods' Security Context |
|||
## @param controller.podSecurityContext.fsGroup Set Metallb Controller pod's Security Context fsGroup |
|||
## |
|||
podSecurityContext: |
|||
enabled: true |
|||
fsGroup: 1001 |
|||
## Configure Container Security Context |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod |
|||
## @param controller.containerSecurityContext.enabled Enabled Metallb Controller containers' Security Context |
|||
## @param controller.containerSecurityContext.runAsUser Set Metallb Controller containers' Security Context runAsUser |
|||
## @param controller.containerSecurityContext.runAsNonRoot Set Metallb Controller container's Security Context runAsNonRoot |
|||
## @param controller.containerSecurityContext.allowPrivilegeEscalation Enables privilege Escalation context for the pod. |
|||
## @param controller.containerSecurityContext.readOnlyRootFilesystem Allows the pod to mount the RootFS as ReadOnly |
|||
## @param controller.containerSecurityContext.capabilities.drop [array] Drop capabilities for the securityContext |
|||
## |
|||
containerSecurityContext: |
|||
enabled: true |
|||
runAsUser: 1001 |
|||
runAsNonRoot: true |
|||
allowPrivilegeEscalation: false |
|||
readOnlyRootFilesystem: true |
|||
capabilities: |
|||
drop: |
|||
- ALL |
|||
## @param controller.command Override default container command (useful when using custom images) |
|||
## |
|||
command: [] |
|||
## @param controller.args Override default container args (useful when using custom images) |
|||
## |
|||
args: [] |
|||
## @param controller.lifecycleHooks for the Metallb Controller container(s) to automate configuration before or after startup |
|||
## |
|||
lifecycleHooks: {} |
|||
## @param controller.extraEnvVars Extra environment variable to pass to the running container. |
|||
## For example: |
|||
## extraEnvVars: |
|||
## - name: MY_ENV_VAR |
|||
## value: env_var_value |
|||
## |
|||
extraEnvVars: [] |
|||
## @param controller.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for Metallb controller nodes |
|||
## |
|||
extraEnvVarsCM: "" |
|||
## @param controller.extraEnvVarsSecret Name of existing Secret containing extra env vars for Metallb controller nodes |
|||
## |
|||
extraEnvVarsSecret: "" |
|||
## @param controller.extraVolumes Optionally specify extra list of additional volumes for the Metallb controller pod(s) |
|||
## |
|||
extraVolumes: [] |
|||
## @param controller.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the Metallb controller container(s) |
|||
## |
|||
extraVolumeMounts: [] |
|||
## @param controller.sidecars Add additional sidecar containers to the Metallb Controller pod(s) |
|||
## e.g: |
|||
## sidecars: |
|||
## - name: your-image-name |
|||
## image: your-image |
|||
## imagePullPolicy: Always |
|||
## ports: |
|||
## - name: portname |
|||
## containerPort: 1234 |
|||
## |
|||
sidecars: [] |
|||
## @param controller.initContainers Add additional init containers to the Metallb Controller pod(s) |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ |
|||
## e.g: |
|||
## initContainers: |
|||
## - name: your-image-name |
|||
## image: your-image |
|||
## imagePullPolicy: Always |
|||
## command: ['sh', '-c', 'echo "hello world"'] |
|||
## |
|||
initContainers: [] |
|||
## Pods Service Account |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
|||
## @param controller.serviceAccount.create Specifies whether a ServiceAccount should be created |
|||
## @param controller.serviceAccount.name Name of the service account to use. If not set and create is true, a name is generated using the fullname template. |
|||
## @param controller.serviceAccount.automountServiceAccountToken Automount service account token for the server service account |
|||
## @param controller.serviceAccount.annotations Annotations for service account. Evaluated as a template. Only used if `create` is `true`. |
|||
## |
|||
serviceAccount: |
|||
create: true |
|||
name: "" |
|||
automountServiceAccountToken: true |
|||
annotations: {} |
|||
## @param controller.revisionHistoryLimit Configure the revisionHistoryLimit of the Controller deployment |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#revision-history-limit |
|||
## |
|||
revisionHistoryLimit: 3 |
|||
## @param controller.containerPorts.metrics Configures the ports the MetalLB Controller listens on for metrics |
|||
## |
|||
containerPorts: |
|||
metrics: 7472 |
|||
## Liveness probe values |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes |
|||
## @param controller.livenessProbe.enabled Enable livenessProbe |
|||
## @param controller.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe |
|||
## @param controller.livenessProbe.periodSeconds Period seconds for livenessProbe |
|||
## @param controller.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe |
|||
## @param controller.livenessProbe.failureThreshold Failure threshold for livenessProbe |
|||
## @param controller.livenessProbe.successThreshold Success threshold for livenessProbe |
|||
## |
|||
livenessProbe: |
|||
enabled: true |
|||
failureThreshold: 3 |
|||
initialDelaySeconds: 10 |
|||
periodSeconds: 10 |
|||
successThreshold: 1 |
|||
timeoutSeconds: 1 |
|||
## Readiness probe values |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes |
|||
## @param controller.readinessProbe.enabled Enable readinessProbe |
|||
## @param controller.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe |
|||
## @param controller.readinessProbe.periodSeconds Period seconds for readinessProbe |
|||
## @param controller.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe |
|||
## @param controller.readinessProbe.failureThreshold Failure threshold for readinessProbe |
|||
## @param controller.readinessProbe.successThreshold Success threshold for readinessProbe |
|||
## |
|||
readinessProbe: |
|||
enabled: true |
|||
failureThreshold: 3 |
|||
initialDelaySeconds: 10 |
|||
periodSeconds: 10 |
|||
successThreshold: 1 |
|||
timeoutSeconds: 1 |
|||
## Startup probe values |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes |
|||
## @param controller.startupProbe.enabled Enable startupProbe |
|||
## @param controller.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe |
|||
## @param controller.startupProbe.periodSeconds Period seconds for startupProbe |
|||
## @param controller.startupProbe.timeoutSeconds Timeout seconds for startupProbe |
|||
## @param controller.startupProbe.failureThreshold Failure threshold for startupProbe |
|||
## @param controller.startupProbe.successThreshold Success threshold for startupProbe |
|||
## |
|||
startupProbe: |
|||
enabled: false |
|||
failureThreshold: 3 |
|||
initialDelaySeconds: 10 |
|||
periodSeconds: 10 |
|||
successThreshold: 1 |
|||
timeoutSeconds: 1 |
|||
## @param controller.customStartupProbe Custom liveness probe for the Web component |
|||
## |
|||
customStartupProbe: {} |
|||
## @param controller.customLivenessProbe Custom liveness probe for the Web component |
|||
## |
|||
customLivenessProbe: {} |
|||
## @param controller.customReadinessProbe Custom readiness probe for the Web component |
|||
## |
|||
customReadinessProbe: {} |
|||
|
|||
## @section Metallb controller Prometheus metrics export |
|||
## |
|||
metrics: |
|||
## @param controller.metrics.enabled Enable the export of Prometheus metrics |
|||
## |
|||
enabled: false |
|||
## Prometheus Exporter service parameters |
|||
## |
|||
service: |
|||
## @param controller.metrics.service.port Prometheus metrics service port |
|||
## |
|||
port: 7472 |
|||
## @param controller.metrics.service.annotations [object] Annotations for the Prometheus Exporter service service |
|||
## |
|||
annotations: |
|||
prometheus.io/scrape: "true" |
|||
prometheus.io/port: "7472" |
|||
prometheus.io/path: "/metrics" ## Prometheus Operator service monitors |
|||
## |
|||
serviceMonitor: |
|||
## @param controller.metrics.serviceMonitor.enabled Specify if a servicemonitor will be deployed for prometheus-operator |
|||
## |
|||
enabled: false |
|||
## @param controller.metrics.serviceMonitor.namespace Namespace which Prometheus is running in |
|||
## e.g: |
|||
## namespace: monitoring |
|||
## |
|||
namespace: "" |
|||
## @param controller.metrics.serviceMonitor.jobLabel Specify the jobLabel to use for the prometheus-operator |
|||
## |
|||
jobLabel: "app.kubernetes.io/name" |
|||
## @param controller.metrics.serviceMonitor.interval Scrape interval. If not set, the Prometheus default scrape interval is used |
|||
## |
|||
interval: "" |
|||
## @param controller.metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended |
|||
## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint |
|||
## |
|||
scrapeTimeout: "" |
|||
## @param controller.metrics.serviceMonitor.metricRelabelings Specify additional relabeling of metrics |
|||
## |
|||
metricRelabelings: [] |
|||
## @param controller.metrics.serviceMonitor.relabelings Specify general relabeling |
|||
## |
|||
relabelings: [] |
|||
## @param controller.metrics.serviceMonitor.selector ServiceMonitor selector labels |
|||
## ref: https://github.com/bitnami/charts/tree/master/bitnami/prometheus-operator#prometheus-configuration |
|||
## |
|||
## selector: |
|||
## prometheus: my-prometheus |
|||
## |
|||
selector: {} |
|||
## @param controller.metrics.serviceMonitor.labels Extra labels for the ServiceMonitor |
|||
## |
|||
labels: {} |
|||
## @param controller.metrics.serviceMonitor.honorLabels honorLabels chooses the metric's labels on collisions with target labels |
|||
## |
|||
honorLabels: false |
|||
|
|||
## @section Speaker parameters |
|||
|
|||
## Metallb Speaker daemonset. |
|||
## ref: https://hub.docker.com/r/bitnami/metallb-speaker/tags |
|||
## |
|||
speaker: |
|||
## @param speaker.image.registry MetalLB Speaker image registry |
|||
## @param speaker.image.repository MetalLB Speaker image repository |
|||
## @param speaker.image.tag MetalLB Speaker image tag (immutable tags are recommended) |
|||
## @param speaker.image.pullPolicy MetalLB Speaker image pull policy |
|||
## @param speaker.image.pullSecrets Specify docker-registry secret names as an array |
|||
## |
|||
image: |
|||
registry: docker.io |
|||
repository: bitnami/metallb-speaker |
|||
tag: 0.12.1-debian-11-r3 |
|||
## Specify a imagePullPolicy |
|||
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' |
|||
## ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images |
|||
## |
|||
pullPolicy: IfNotPresent |
|||
## Optionally specify an array of imagePullSecrets. |
|||
## Secrets must be manually created in the namespace. |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ |
|||
## e.g: |
|||
## pullSecrets: |
|||
## - myRegistryKeySecretName |
|||
## |
|||
pullSecrets: [] |
|||
## @param speaker.updateStrategy.type Speaker daemonset strategy type |
|||
## ref: https://kubernetes.io/docs/tasks/manage-daemon/update-daemon-set/ |
|||
## |
|||
updateStrategy: |
|||
## StrategyType |
|||
## Can be set to RollingUpdate or OnDelete |
|||
## |
|||
type: RollingUpdate |
|||
## If global .Values.rbac.create is disabled no rbac is created. |
|||
## This value is then meaningless |
|||
## Defines if the speaker rbac should be created. |
|||
## |
|||
rbac: |
|||
## @param speaker.rbac.create create specifies whether to install and use RBAC rules. |
|||
## |
|||
create: true |
|||
## @param speaker.hostAliases Deployment pod host aliases |
|||
## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ |
|||
## |
|||
hostAliases: [] |
|||
## If global .Values.psp.create is disabled no psp is created. |
|||
## This value is then meaningless |
|||
## Defines if the speaker psp should be created. |
|||
## |
|||
psp: |
|||
## @param speaker.psp.create Whether to create a PodSecurityPolicy. WARNING: PodSecurityPolicy is deprecated in Kubernetes v1.21 or later, unavailable in v1.25 or later |
|||
## |
|||
create: true |
|||
## @param speaker.priorityClassName Speaker pods' priorityClassName |
|||
## |
|||
priorityClassName: "" |
|||
## @param speaker.terminationGracePeriodSeconds In seconds, time the given to the Speaker pod needs to terminate gracefully |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods |
|||
## |
|||
terminationGracePeriodSeconds: 2 |
|||
## Speaker container resource requests and limits |
|||
## ref: https://kubernetes.io/docs/user-guide/compute-resources/ |
|||
## We usually recommend not to specify default resources and to leave this as a conscious |
|||
## choice for the user. This also increases chances charts run on environments with little |
|||
## resources, such as Minikube. If you do want to specify resources, uncomment the following |
|||
## lines, adjust them as necessary, and remove the curly braces after 'resources:'. |
|||
## @param speaker.resources.limits The resources limits for the container |
|||
## @param speaker.resources.requests The requested resources for the container |
|||
## |
|||
resources: |
|||
## Example: |
|||
## limits: |
|||
## cpu: 100m |
|||
## memory: 100Mi |
|||
limits: {} |
|||
## Examples: |
|||
## requests: |
|||
## cpu: 25m |
|||
## memory: 25Mi |
|||
requests: {} |
|||
## @param speaker.nodeSelector Node labels for speaker pod assignment |
|||
## ref: https://kubernetes.io/docs/user-guide/node-selection/ |
|||
## |
|||
nodeSelector: {} |
|||
## @param speaker.tolerations Tolerations for speaker pod assignment |
|||
## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ |
|||
## |
|||
tolerations: [] |
|||
## @param speaker.affinity Affinity for speaker pod assignment |
|||
## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity |
|||
## |
|||
affinity: {} |
|||
## Node speaker.affinity preset |
|||
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity |
|||
## |
|||
nodeAffinityPreset: |
|||
## @param speaker.nodeAffinityPreset.type Node affinity preset type. Ignored if `speaker.affinity` is set. Allowed values: `soft` or `hard` |
|||
## |
|||
type: "" |
|||
## @param speaker.nodeAffinityPreset.key Node label key to match. Ignored if `speaker.affinity` is set |
|||
## |
|||
key: "" |
|||
## @param speaker.nodeAffinityPreset.values Node label values to match. Ignored if `speaker.affinity` is set |
|||
## E.g. |
|||
## values: |
|||
## - e2e-az1 |
|||
## - e2e-az2 |
|||
## |
|||
values: [] |
|||
## @param speaker.podAffinityPreset Pod affinity preset. Ignored if `speaker.affinity` is set. Allowed values: `soft` or `hard` |
|||
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity |
|||
## |
|||
podAffinityPreset: "" |
|||
## @param speaker.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `speaker.affinity` is set. Allowed values: `soft` or `hard` |
|||
## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity |
|||
## |
|||
podAntiAffinityPreset: soft |
|||
## @param speaker.podAnnotations Speaker Pod annotations |
|||
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ |
|||
## |
|||
podAnnotations: {} |
|||
## @param speaker.podLabels Speaker Pod labels |
|||
## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ |
|||
## |
|||
podLabels: {} |
|||
## Configure Pods Security Context |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod |
|||
## @param speaker.podSecurityContext.enabled Enabled Speaker pods' Security Context |
|||
## @param speaker.podSecurityContext.fsGroup Set Speaker pod's Security Context fsGroup |
|||
## |
|||
podSecurityContext: |
|||
enabled: true |
|||
fsGroup: 0 |
|||
## Configure Container Security Context |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod |
|||
## @param speaker.containerSecurityContext.enabled Enabled Speaker containers' Security Context |
|||
## @param speaker.containerSecurityContext.runAsUser Set Speaker containers' Security Context runAsUser |
|||
## @param speaker.containerSecurityContext.allowPrivilegeEscalation Enables privilege Escalation context for the pod. |
|||
## @param speaker.containerSecurityContext.readOnlyRootFilesystem Allows the pod to mount the RootFS as ReadOnly |
|||
## @param speaker.containerSecurityContext.capabilities.drop [array] Drop capabilities for the securityContext |
|||
## @param speaker.containerSecurityContext.capabilities.add [array] Add capabilities for the securityContext |
|||
## |
|||
|
|||
containerSecurityContext: |
|||
enabled: true |
|||
runAsUser: 0 |
|||
allowPrivilegeEscalation: false |
|||
readOnlyRootFilesystem: true |
|||
capabilities: |
|||
drop: |
|||
- ALL |
|||
add: |
|||
- NET_ADMIN |
|||
- NET_RAW |
|||
- SYS_ADMIN |
|||
## @param speaker.command Override default container command (useful when using custom images) |
|||
## |
|||
command: [] |
|||
## @param speaker.args Override default container args (useful when using custom images) |
|||
## |
|||
args: [] |
|||
## @param speaker.lifecycleHooks for the Speaker container(s) to automate configuration before or after startup |
|||
## |
|||
lifecycleHooks: {} |
|||
## @param speaker.sidecars Add additional sidecar containers to the Speaker pod(s) |
|||
## e.g: |
|||
## sidecars: |
|||
## - name: your-image-name |
|||
## image: your-image |
|||
## imagePullPolicy: Always |
|||
## ports: |
|||
## - name: portname |
|||
## containerPort: 1234 |
|||
## |
|||
sidecars: [] |
|||
## @param speaker.initContainers Add additional init containers to the Speaker pod(s) |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ |
|||
## e.g: |
|||
## initContainers: |
|||
## - name: your-image-name |
|||
## image: your-image |
|||
## imagePullPolicy: Always |
|||
## command: ['sh', '-c', 'echo "hello world"'] |
|||
## |
|||
initContainers: [] |
|||
## Pods Service Account |
|||
## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ |
|||
## @param speaker.serviceAccount.create Specifies whether a ServiceAccount should be created |
|||
## @param speaker.serviceAccount.name Name of the service account to use. If not set and create is true, a name is generated using the fullname template. |
|||
## @param speaker.serviceAccount.automountServiceAccountToken Automount service account token for the server service account |
|||
## @param speaker.serviceAccount.annotations Annotations for service account. Evaluated as a template. Only used if `create` is `true`. |
|||
## |
|||
serviceAccount: |
|||
create: true |
|||
name: "" |
|||
automountServiceAccountToken: true |
|||
annotations: {} |
|||
## Defines a secret to use outside of the auto generate |
|||
## @param speaker.secretName References a Secret name for the member secret outside of the helm chart |
|||
## @param speaker.secretKey References a Secret key the member secret outside of the helm chart |
|||
## @param speaker.secretValue Custom value for `speaker.secretKey` |
|||
## Default: {{ randAlphaNum 256 | b64enc | quote }} |
|||
## The auto generated secret has: |
|||
## secretName: {{ "common.names.fullname" }}-memberlist |
|||
## secretKey: secretkey |
|||
## secretValue: random 256 character alphanumeric string |
|||
## |
|||
secretName: "" |
|||
secretKey: "" |
|||
secretValue: "" |
|||
## @param speaker.extraEnvVars Extra environment variable to pass to the running container. |
|||
## For example: |
|||
## extraEnvVars: |
|||
## - name: MY_ENV_VAR |
|||
## value: env_var_value |
|||
## |
|||
extraEnvVars: [] |
|||
## @param speaker.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for Speaker nodes |
|||
## |
|||
extraEnvVarsCM: "" |
|||
## @param speaker.extraEnvVarsSecret Name of existing Secret containing extra env vars for Speaker nodes |
|||
## |
|||
extraEnvVarsSecret: "" |
|||
## @param speaker.extraVolumes Optionally specify extra list of additional volumes for the Speaker pod(s) |
|||
## |
|||
extraVolumes: [] |
|||
## @param speaker.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the Speaker container(s) |
|||
## |
|||
extraVolumeMounts: [] |
|||
## @param speaker.containerPorts.metrics HTTP Metrics Endpoint |
|||
## |
|||
containerPorts: |
|||
metrics: 7472 |
|||
## Liveness probe values |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes |
|||
## @param speaker.livenessProbe.enabled Enable livenessProbe |
|||
## @param speaker.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe |
|||
## @param speaker.livenessProbe.periodSeconds Period seconds for livenessProbe |
|||
## @param speaker.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe |
|||
## @param speaker.livenessProbe.failureThreshold Failure threshold for livenessProbe |
|||
## @param speaker.livenessProbe.successThreshold Success threshold for livenessProbe |
|||
## |
|||
livenessProbe: |
|||
enabled: true |
|||
failureThreshold: 3 |
|||
initialDelaySeconds: 10 |
|||
periodSeconds: 10 |
|||
successThreshold: 1 |
|||
timeoutSeconds: 1 |
|||
## Readiness probe values |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes |
|||
## @param speaker.readinessProbe.enabled Enable readinessProbe |
|||
## @param speaker.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe |
|||
## @param speaker.readinessProbe.periodSeconds Period seconds for readinessProbe |
|||
## @param speaker.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe |
|||
## @param speaker.readinessProbe.failureThreshold Failure threshold for readinessProbe |
|||
## @param speaker.readinessProbe.successThreshold Success threshold for readinessProbe |
|||
## |
|||
readinessProbe: |
|||
enabled: true |
|||
failureThreshold: 3 |
|||
initialDelaySeconds: 10 |
|||
periodSeconds: 10 |
|||
successThreshold: 1 |
|||
timeoutSeconds: 1 |
|||
## Startup probe values |
|||
## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes |
|||
## @param speaker.startupProbe.enabled Enable startupProbe |
|||
## @param speaker.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe |
|||
## @param speaker.startupProbe.periodSeconds Period seconds for startupProbe |
|||
## @param speaker.startupProbe.timeoutSeconds Timeout seconds for startupProbe |
|||
## @param speaker.startupProbe.failureThreshold Failure threshold for startupProbe |
|||
## @param speaker.startupProbe.successThreshold Success threshold for startupProbe |
|||
## |
|||
startupProbe: |
|||
enabled: false |
|||
failureThreshold: 3 |
|||
initialDelaySeconds: 10 |
|||
periodSeconds: 10 |
|||
successThreshold: 1 |
|||
timeoutSeconds: 1 |
|||
## @param speaker.customStartupProbe Custom liveness probe for the Web component |
|||
## |
|||
customStartupProbe: {} |
|||
## @param speaker.customLivenessProbe Custom liveness probe for the Web component |
|||
## |
|||
customLivenessProbe: {} |
|||
## @param speaker.customReadinessProbe Custom readiness probe for the Web component |
|||
## |
|||
customReadinessProbe: {} |
|||
|
|||
## @section Speaker Prometheus metrics export |
|||
metrics: |
|||
## @param speaker.metrics.enabled Enable the export of Prometheus metrics |
|||
## |
|||
enabled: false |
|||
## Prometheus Exporter service parameters |
|||
## |
|||
service: |
|||
## @param speaker.metrics.service.port Prometheus metrics service port |
|||
## |
|||
port: 7472 |
|||
## @param speaker.metrics.service.annotations [object] Annotations for the Prometheus Exporter service service |
|||
## |
|||
annotations: |
|||
prometheus.io/scrape: "true" |
|||
prometheus.io/port: "7472" |
|||
prometheus.io/path: "/metrics" |
|||
## Prometheus Operator service monitors |
|||
## |
|||
serviceMonitor: |
|||
## @param speaker.metrics.serviceMonitor.enabled Enable support for Prometheus Operator |
|||
## |
|||
enabled: false |
|||
## @param speaker.metrics.serviceMonitor.namespace Namespace which Prometheus is running in |
|||
## e.g: |
|||
## namespace: monitoring |
|||
## |
|||
namespace: "" |
|||
## @param speaker.metrics.serviceMonitor.jobLabel Job label for scrape target |
|||
## |
|||
jobLabel: "app.kubernetes.io/name" |
|||
## @param speaker.metrics.serviceMonitor.interval Scrape interval. If not set, the Prometheus default scrape interval is used |
|||
## |
|||
interval: "" |
|||
## @param speaker.metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended |
|||
## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint |
|||
## |
|||
scrapeTimeout: "" |
|||
## @param speaker.metrics.serviceMonitor.metricRelabelings Specify additional relabeling of metrics |
|||
## |
|||
metricRelabelings: [] |
|||
## @param speaker.metrics.serviceMonitor.relabelings Specify general relabeling |
|||
## |
|||
relabelings: [] |
|||
## @param speaker.metrics.serviceMonitor.selector ServiceMonitor selector labels |
|||
## ref: https://github.com/bitnami/charts/tree/master/bitnami/prometheus-operator#prometheus-configuration |
|||
## |
|||
## selector: |
|||
## prometheus: my-prometheus |
|||
## |
|||
selector: {} |
|||
## @param speaker.metrics.serviceMonitor.labels Extra labels for the ServiceMonitor |
|||
## |
|||
labels: {} |
|||
## @param speaker.metrics.serviceMonitor.honorLabels honorLabels chooses the metric's labels on collisions with target labels |
|||
## |
|||
honorLabels: false |
@ -0,0 +1,21 @@ |
|||
# 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 |
|||
.project |
|||
.idea/ |
|||
*.tmproj |
@ -0,0 +1,17 @@ |
|||
--- |
|||
apiVersion: v1 |
|||
name: my-bloody-jenkins |
|||
version: 0.1.186 |
|||
appVersion: "2.332.3-277" |
|||
icon: https://raw.githubusercontent.com/odavid/k8s-helm-charts/master/charts/my-bloody-jenkins/logo/jenkins-logo.png |
|||
description: > |
|||
A Helm chart for my-bloody-jenkins - a self configured jenkins docker image, based on Jenkins LTS. |
|||
Inspired by https://github.com/kubernetes/charts/tree/master/stable/jenkins, but better suites https://github.com/odavid/my-bloody-jenkins |
|||
sources: |
|||
- https://github.com/odavid/my-bloody-jenkins |
|||
- https://github.com/odavid/k8s-helm-charts/tree/master/charts/my-bloody-jenkins |
|||
- https://github.com/odavid/jenkins-jnlp-slave |
|||
maintainers: |
|||
- name: odavid |
|||
email: ohad.david@gmail.com |
|||
home: https://github.com/odavid/my-bloody-jenkins |
@ -0,0 +1,192 @@ |
|||
# My Bloody Jenkins |
|||
|
|||
## Prerequisites Details |
|||
* Kubernetes 1.8+ |
|||
|
|||
## Chart Details |
|||
The chart will do the following: |
|||
* Deploy [My Bloody Jenkins](https://github.com/odavid/my-bloody-jenkins) |
|||
* Manage Configuration in a dedicated ConfigMap |
|||
* Configures Jenkins to use a default [k8s jenkins cloud](https://plugins.jenkins.io/kubernetes) |
|||
* Optionally expose Jenkins with [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) |
|||
* Manages a [Persistent Volume Claim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) for Jenkins Storage |
|||
* Optionally mount extenral [secrets](https://kubernetes.io/docs/concepts/configuration/secret/) as volumes to be used within the configuration [See docs](https://github.com/odavid/my-bloody-jenkins/pull/102) |
|||
* Optionally mount external [configMaps](https://kubernetes-v1-4.github.io/docs/user-guide/configmap/) to be used as configuration data sources [See docs](https://github.com/odavid/my-bloody-jenkins/pull/102) |
|||
* Optionally configures [rbac](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) and a dedicated [service account](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) |
|||
|
|||
|
|||
## Installing the Chart |
|||
First add the following repo: |
|||
|
|||
```shell |
|||
helm repo add odavid https://odavid.github.io/k8s-helm-charts |
|||
``` |
|||
|
|||
To install the chart with the release name `jenkins`: |
|||
```shell |
|||
helm install --name jenkins odavid/my-bloody-jenkins |
|||
``` |
|||
|
|||
To install the chart with a custom configuration values.yml |
|||
```shell |
|||
helm install --name jenkins odavid/my-bloody-jenkins -f <valueFiles> |
|||
``` |
|||
|
|||
## Upgrading the Release |
|||
To install the chart with a custom configuration values.yml |
|||
```shell |
|||
helm upgrade jenkins odavid/my-bloody-jenkins -f <valueFiles> |
|||
``` |
|||
|
|||
## Deleting the Chart |
|||
```shell |
|||
helm delete jenkins |
|||
``` |
|||
|
|||
## Docker Image |
|||
By default the chart uses the [latest release of `odavid/my-bloody-jenkins`](https://hub.docker.com/r/odavid/my-bloody-jenkins/tags/) image. |
|||
The Helm Chart provides a way to use different repo or tags: |
|||
* `image.repository` - by default `odavid/my-bloody-jenkins` |
|||
* `image.tag` |
|||
* `image.pullPolicy` - by default `IfNotPresent` |
|||
* `image.imagePullSecret` - not set by default |
|||
|
|||
|
|||
## CPU and Memory Resources |
|||
The Helm chart comes with support for configured resource requests and limits. |
|||
By default these values are commented out. |
|||
It is __highly__ recommended to change this behavior on a production deployment. Also the Helm Chart provides a way to control Jenkins Java Memory Opts. When using Jenkins in production, you will need to set the values that suites your needs. |
|||
|
|||
## Persistence |
|||
By default the helm chart allocates a 20gb volume for jenkins storage. |
|||
The chart provides the ability to control: |
|||
* `persistence.jenkinsHome.enabled` - if set to false, jenkins home will be using empty{} volume instead of persistentVolumeClaim. Default is `true` |
|||
* `persistence.jenkinsHome.size` - the managed volume size |
|||
* `persistence.jenkinsHome.storageClass` - If set to `"-"`, then storageClass: `""`, which disables dynamic provisioning. If undefined (the default) or set to null, no storageClass spec is set, choosing the default provisioner. (gp2 on AWS, standard on GKE, AWS & OpenStack) |
|||
* `persistence.jenkinsHome.existingClaim` - if provided, jenkins storage will be stored on an manually managed persistentVolumeClaim |
|||
* `persistence.jenkinsHome.annotations` - annotations that will be added to the managed persistentVolumeClaim |
|||
|
|||
## Secrets |
|||
My Bloody Jenkins natively supports [environment variable substitution](https://github.com/odavid/my-bloody-jenkins#environment-variable-substitution-and-remove-master-env-vars) within its configuration files. |
|||
The Helm Chart provides a simple way to map [k8s secrets] in dedicated folders that will be later on used as environment variables datasource. |
|||
|
|||
In order to use this feature, you will need to create external secrets and then use: `envSecrets` property to add these secrets to the search order. |
|||
For example: |
|||
```shell |
|||
echo -n 'admin' > ./username |
|||
echo -n 'password' > ./password |
|||
kubectl create secret generic my-jenkins-secret --from-file=./username --from-file=./password |
|||
``` |
|||
|
|||
Then add this secret to values.yml: |
|||
```yaml |
|||
envSecrets: |
|||
- my-jenkins-secret |
|||
``` |
|||
Now, you can refer these secrets as environmnet variables: |
|||
* `MY_JENKINS_SECRET_USERNAME` |
|||
* `MY_JENKINS_SECRET_PASSWORD` |
|||
|
|||
See [Support multiple data sources and secrets from files](https://github.com/odavid/my-bloody-jenkins/pull/102) for more details |
|||
|
|||
The chart also support creating a dedicated k8s secret, which all its keys will become `JENKINS_SECRET_<KEY>`. In order to use it, you will need to provided a key/value dict under the `secrets` value |
|||
|
|||
## Managed Configuration and additional ConfigMaps |
|||
My Bloody Jenkins natively supports watching multiple config data sources and merge them into one config top to bottom |
|||
The Helm Chart provides a way to define a `managedConfig` yaml within the chart values.yml as well as add additional external `configMaps` that will be merged/override the default configuration. |
|||
|
|||
See [Support multiple data sources and secrets from files](https://github.com/odavid/my-bloody-jenkins/pull/102) for more details |
|||
The `managedConfig` is mounted as `/var/jenkins_managed_config/jenkins-config.yml` and contains the `managedConfig` yaml contents |
|||
|
|||
Additional `configMaps` list are mounted as `/var/jenkins_config/<ConfigMapName>` within the container and are merged with the `managedConfig` |
|||
|
|||
## Default K8S Jenkins Cloud for provisioning slaves within k8s |
|||
By default the Helm Chart Configures a [kubernetes cloud](https://plugins.jenkins.io/kubernetes) with a simple jnlp slave template. |
|||
For disabling this behavior, you need to set `defaultK8sCloud.enabled` to `false` |
|||
The following attributes can control the default template: |
|||
* `defaultK8sCloud.name` - the name of the k8s cloud - default (`k8s`) |
|||
* `defaultK8sCloud.labels` - list of agent labels that are used to provision the node - e.g. ```node(labels){}``` pipeline step - default (`["generic"]`) |
|||
* `defaultK8sCloud.jvmArgs` - JVM Args for the JNLP Slave - default (`"-Xmx1g"`) |
|||
* `defaultK8sCloud.remoteFs` - JNLP Remote FS - default (`"/home/jenkins"`) |
|||
* `defaultK8sCloud.image` - JNLP Slave Image - default (`"odavid/jenkins-jnlp-slave:latest"`) |
|||
|
|||
## Configuration |
|||
|
|||
The following table lists the configurable parameters of the chart and their default values. |
|||
|
|||
| Parameter | Description | Default | |
|||
|---------------------------|-----------------------------------|----------------------------------------------------------| |
|||
| `managedConfig` | `My Bloody Jenkins` Configuration yaml - See [Configuration Reference](https://github.com/odavid/my-bloody-jenkins#configuration-reference) | |
|||
| `defaultK8sCloud.enabled` | If `true` a default k8s jenkins cloud will be configured to enable automatic slave provisioning | `true` |
|||
| `defaultK8sCloud.name` | The name of the default k8s cloud | `k8s` |
|||
| `defaultK8sCloud.labels` | List of labels that mark the k8s provisioned slaves, use `node(label){}` within pipeline | `["generic"]` |
|||
| `defaultK8sCloud.jvmArgs` | Default JVM Args to pass to the jnlp slave of the k8s cloud | `-Xmx1g` |
|||
| `defaultK8sCloud.remoteFs` | The remoteFS of the JNLP Slave | `/home/jenkins` |
|||
| `defaultK8sCloud.image` | The docker image of the JNLP Slave | `odavid/jenkins-jnlp-slave:latest` |
|||
| `image.repository` | `My Bloody Jenkins` Docker Image | `odavid/my-bloody-jenkins` |
|||
| `image.tag` | `My Bloody Jenkins` Docker Image Tag | `2.121.1-62` |
|||
| `image.pullPolicy` | Image Pull Policy | `IfNotPresent` |
|||
| `image.imagePullSecrets` | Docker registry pull secret | |
|||
| `service.type` | Service Type | `LoadBalanacer` |
|||
| `service.externalTrafficPolicy` | externalTrafficPolicy | |
|||
| `service.annotations` | Service Annotations | `{}` |
|||
| `service.loadBalancerSourceRanges` | Array Of IP CIDR ranges to whitelist (Only if service type is `LoadBalancer`) | |
|||
| `service.loadBalancerIP` | Service Load Balancer IP Address (Only if service type is `LoadBalancer`) | |
|||
| `ingress.enabled` | If `true` Ingress will be created | `false` |
|||
| `ingress.httpProtocol` | Change to https if the ingress uses tls or you are using external tls termination using annotations | `http` |
|||
| `ingress.path` | Ingress Path (Only if ingress is enabled)| `/` |
|||
| `ingress.additionalRules` | Additional Ingress Rules| `[]` that will be appended to the actual ingress rule. |
|||
| `ingress.preAdditionalRules` | Additional Ingress Rules| `[]` that will be pre-appended to the actual ingress rule. Useful when using alb ingress class with [actions](https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/#actions) |
|||
| `ingress.annotations` | Ingress Annoations| `{}` |
|||
| `ingress.labels` | Ingress Labels| `{}` |
|||
| `ingress.hostname` | Ingress Hostname | |
|||
| `ingress.ingressClassName` | Ingress Class Name | |
|||
| `ingress.pathType` | Ingress Path Type | `Prefix` |
|||
| `ingress.tls.secretName` | Ingress TLS Secret Name - if provided, the ingress will terminate TLS using the certificate and private key in this secret. This setting is mutually exclusive with ingress.tls.certificate and ingress.tls.privateKey| |
|||
| `ingress.tls.certificate` | Ingress TLS Certificate - if provided, the ingress will use this certificate. Use in conjunction with ingress.tls.privateKey| |
|||
| `ingress.tls.privateKey` | Ingress TLS private key - if provided, the ingress will use this private key. Use in conjunction with ingress.tls.certificate | |
|||
| `rbac.create` | If `true` - a ServiceAccount, and a Role will be created| `true` |
|||
| `rbac.createServiceAccount` | If `createServiceAccount` = `false`, and `rbac.create` = `true`, the chart will only use the `rbac.serviceAaccountName` within RoleBindings | true |
|||
| `rbac.serviceAccountName` | Ignored if createServiceAccount = true | `default` |
|||
| `rbac.serviceAccount.annotations` | Specify ServiceAccount annotations | {} |
|||
| `rbac.clusterWideAccess` | If `true` - A ClusterRole will be created instead of Role - relevant only if `rbac.create` is `true`| `false` |
|||
| `resources.requests.cpu` | Initial CPU Request | |
|||
| `resources.requests.memory` | Initial Memory Request | |
|||
| `resources.limits.cpu` | CPU Limit | |
|||
| `resources.limits.memory` | Memory Limit | |
|||
| `readinessProbe.timeoutSeconds` | Readiness Probe Timeout in seconds | `5` |
|||
| `readinessProbe.initialDelaySeconds` | Readiness Probe Initial Delay in seconds | `5` |
|||
| `readinessProbe.periodSeconds` | Readiness Probe - check for readiess every `X` seconds | `5` |
|||
| `readinessProbe.failureThreshold` | Readiness Probe - Mark the pod as not ready for traffic after `X` consecutive failures | `3` |
|||
| `livenessProbe.timeoutSeconds` | Liveness Probe Timeout in seconds | `5` |
|||
| `livenessProbe.initialDelaySeconds` | Liveness Probe Initial Delay in seconds - a high value since it takes time to start| `600` |
|||
| `livenessProbe.periodSeconds` | Liveness Probe - check for liveness every `X` seconds | `5` |
|||
| `livenessProbe.failureThreshold` | Liveness Probe - Kill the pod after `X` consecutive failures | `3` |
|||
| `persistence.mountDockerSocket` | If `true` - `/var/run/docker.sock` will be mounted | `true` |
|||
| `persistence.jenkinsHome.enabled` | If `true` - Jenkins Storage will be persistent | `true` |
|||
| `persistence.jenkinsHome.existingClaim` | External Jenkins Storage PesistentVolumeClaim - if set, then no volume claim will be created by the Helm Chart| |
|||
| `persistence.jenkinsHome.annotations` | Jenkins Storage PesistentVolumeClaim annotations | `{}` |
|||
| `persistence.jenkinsHome.accessMode` | Jenkins Storage PesistentVolumeClaim accessMode | `ReadWriteOnce` |
|||
| `persistence.jenkinsHome.size` | Jenkins Storage PesistentVolumeClaim size | `20Gi` |
|||
| `persistence.jenkinsHome.storageClass` | External Jenkins Storage PesistentVolumeClaim | If set to `"-"`, then storageClass: `""`, which disables dynamic provisioning. If undefined (the default) or set to null, no storageClass spec is set, choosing the default provisioner. (gp2 on AWS, standard on GKE, AWS & OpenStack) |
|||
| `persistence.jenkinsWorkspace.enabled` | If `true` - Jenkins Workspace Storage will be persistent | `false` |
|||
| `persistence.jenkinsWorkspace.existingClaim` | External Jenkins Workspace Storage PesistentVolumeClaim - if set, then no volume claim will be created by the Helm Chart| |
|||
| `persistence.jenkinsWorkspace.annotations` | Jenkins Workspace Storage PesistentVolumeClaim annotations | `{}` |
|||
| `persistence.jenkinsWorkspace.accessMode` | Jenkins Workspace Storage PesistentVolumeClaim accessMode | `ReadWriteOnce` |
|||
| `persistence.jenkinsWorkspace.size` | Jenkins Workspace Storage PesistentVolumeClaim size | `8Gi` |
|||
| `persistence.jenkinsWorkspace.storageClass` | External Jenkins Workspace Storage PesistentVolumeClaim | If set to `"-"`, then storageClass: `""`, which disables dynamic provisioning. If undefined (the default) or set to null, no storageClass spec is set, choosing the default provisioner. (gp2 on AWS, standard on GKE, AWS & OpenStack) |
|||
| `podAnnotations` | Additional Pod Annotations | `{}` |
|||
| `persistence.volumes` | Additional volumes to be included within the Deployments | |
|||
| `persistence.mounts` | Additional mounts to be mounted to the container | |
|||
| `nodeSelector` | Node Selector | `{}` |
|||
| `tolerations` | Tolerations | `[]` |
|||
| `securityContxet` | Security Context for jenkins pod | `{}` |
|||
| `affinity` | Affinity | `{}` |
|||
| `env` | Additional Environment Variables to be passed to the container - format `key`: `value` | |
|||
| `secret` | A dict containing KEY/VALUE pairs. Each pair will become an environment variable `JENKINS_SECRET_<KEY>`, if the `secrets` dict is not empty a k8s secret will be created| |
|||
| `envSecrets` | List of external secret names to be mounted as env secrets - see [Docs](https://github.com/odavid/my-bloody-jenkins/pull/102) | |
|||
| `configMaps` | List of external config maps to be used as configuration files - see [Docs](https://github.com/odavid/my-bloody-jenkins/pull/102) | |
|||
| `jenkinsAdminUser` | The name of the admin user - must be a valid user within the [Jenkins Security Realm](https://github.com/odavid/my-bloody-jenkins#security-section)| `admin` |
|||
| `javaMemoryOpts` | Jenkins Java Memory Opts | `-Xmx256m` |
|||
| `useHostNetwork` | If true, jenkins master will use hostNetwork | `false` |
|||
| `jenkinsURL` | Set the jenkinsURL configuration. If not set and ingress is enabled, then jenkins URL is {{ .Values.ingress.httpProtocol }}://{{ .Values.ingress.hostname }}{{ .Values.ingress.path }} | |
After Width: | Height: | Size: 28 KiB |
@ -0,0 +1,39 @@ |
|||
1. Get Jenkins URL by running these commands: |
|||
{{- if .Values.jenkinsURL }} |
|||
{{ .Values.jenkinsURL | quote }} |
|||
{{- else if .Values.ingress.enabled }} |
|||
{{ .Values.ingress.httpProtocol }}://{{ .Values.ingress.hostname }}{{ .Values.ingress.path }} |
|||
{{- else if contains "NodePort" .Values.service.type }} |
|||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "my-bloody-jenkins.fullname" . }}) |
|||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") |
|||
echo http://$NODE_IP:$NODE_PORT |
|||
{{- else if contains "LoadBalancer" .Values.service.type }} |
|||
NOTE: It may take a few minutes for the LoadBalancer IP to be available. |
|||
You can watch the status of by running 'kubectl get svc -w --namespace {{ .Release.Namespace }} {{ template "my-bloody-jenkins.fullname" . }}' |
|||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "my-bloody-jenkins.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') |
|||
echo http://$SERVICE_IP:{{ default (include "my-bloody-jenkins.httpPort" .) .Values.service.httpPort }} |
|||
{{- else if contains "ClusterIP" .Values.service.type }} |
|||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "my-bloody-jenkins.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") |
|||
echo "Visit http://127.0.0.1:8080 to use your application" |
|||
kubectl port-forward $POD_NAME 8080:8080 |
|||
{{- end }} |
|||
|
|||
2. To watch Jenkins logs, run the following command: |
|||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "my-bloody-jenkins.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") |
|||
kubectl logs -f --namespace {{ .Release.Namespace }} $POD_NAME |
|||
|
|||
{{- if not .Values.persistence.jenkinsHome.enabled }} |
|||
|
|||
#################################################################################### |
|||
# WARNING: Persistent is not enabled!!! |
|||
# In order to enable persistent, please set persistence.jenkinsHome.enabled to 'true' |
|||
#################################################################################### |
|||
{{- end}} |
|||
|
|||
{{- if not .Values.rbac.create }} |
|||
|
|||
#################################################################################### |
|||
# WARNING: RBAC is not enabled |
|||
# In order to enable RBAC, please set rbac.create to 'true' |
|||
#################################################################################### |
|||
{{- end }} |
@ -0,0 +1,67 @@ |
|||
{{/* vim: set filetype=mustache: */}} |
|||
{{/* |
|||
Expand the name of the chart. |
|||
*/}} |
|||
{{- define "my-bloody-jenkins.name" -}} |
|||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create a default fully qualified app name. |
|||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). |
|||
If release name contains chart name it will be used as a full name. |
|||
*/}} |
|||
{{- define "my-bloody-jenkins.fullname" -}} |
|||
{{- if .Values.fullnameOverride -}} |
|||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} |
|||
{{- else -}} |
|||
{{- $name := default .Chart.Name .Values.nameOverride -}} |
|||
{{- if contains $name .Release.Name -}} |
|||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}} |
|||
{{- else -}} |
|||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create chart name and version as used by the chart label. |
|||
*/}} |
|||
{{- define "my-bloody-jenkins.chart" -}} |
|||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
{{/* |
|||
Create pvc claim names |
|||
*/}} |
|||
{{- define "my-bloody-jenkins.jenkinsHome.claimName" -}} |
|||
{{- printf "%s-jenkins-home" (include "my-bloody-jenkins.fullname" .) | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
{{- define "my-bloody-jenkins.jenkinsWorkspace.claimName" -}} |
|||
{{- printf "%s-jenkins-workspace" (include "my-bloody-jenkins.fullname" .) | trunc 63 | trimSuffix "-" -}} |
|||
{{- end -}} |
|||
|
|||
|
|||
{{/* |
|||
Define default values |
|||
*/}} |
|||
{{- define "my-bloody-jenkins.httpPort" -}} |
|||
{{- 8080 -}} |
|||
{{- end -}} |
|||
|
|||
{{- define "my-bloody-jenkins.jnlpPort" -}} |
|||
{{- 50000 -}} |
|||
{{- end -}} |
|||
|
|||
{{- define "my-bloody-jenkins.sshdPort" -}} |
|||
{{- 16022 -}} |
|||
{{- end -}} |
|||
|
|||
{{- define "my-bloody-jenkins.persistentVolumeClaimName" -}} |
|||
{{- .Values.persistenceExistingClaim | default (include "my-bloody-jenkins.fullname" .) -}} |
|||
{{- end -}} |
|||
|
|||
{{- define "my-bloody-jenkins.tlsSecretName" -}} |
|||
{{- printf "%s-tls-secret" (include "my-bloody-jenkins.fullname" .) -}} |
|||
{{- end -}} |
@ -0,0 +1,32 @@ |
|||
apiVersion: v1 |
|||
kind: ConfigMap |
|||
metadata: |
|||
name: {{ template "my-bloody-jenkins.fullname" . }} |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.name" . }} |
|||
chart: {{ template "my-bloody-jenkins.chart" . }} |
|||
release: {{ .Release.Name }} |
|||
heritage: {{ .Release.Service }} |
|||
data: |
|||
jenkins-config.yml: |- |
|||
{{- if .Values.managedConfig }} |
|||
{{ toYaml .Values.managedConfig | indent 4 }} |
|||
{{- end }} |
|||
|
|||
k8s-default-cloud.yml: |- |
|||
{{- if and (.Values.defaultK8sCloud) (.Values.defaultK8sCloud.enabled) }} |
|||
clouds: |
|||
{{ .Values.defaultK8sCloud.name | default "k8s" }}: |
|||
type: kubernetes |
|||
jenkinsUrl: http://{{ include "my-bloody-jenkins.fullname" . }}:8080 |
|||
namespace: {{ .Release.Namespace }} |
|||
templates: |
|||
- name: kubeslave |
|||
image: {{ .Values.defaultK8sCloud.slaveImage | default "odavid/jenkins-jnlp-slave:latest" }} |
|||
labels: |
|||
{{ toYaml (default .Values.defaultK8sCloud.labels) | indent 14 }} |
|||
remoteFs: {{ .Values.defaultK8sCloud.remoteFs | default "/home/jenkins" }} |
|||
jvmArgs: {{ .Values.defaultK8sCloud.jvmArgs | default "-Xmx1g" }} |
|||
volumes: |
|||
- '/var/run/docker.sock:/var/run/docker.sock' |
|||
{{- end }} |
@ -0,0 +1,224 @@ |
|||
apiVersion: apps/v1 |
|||
kind: Deployment |
|||
metadata: |
|||
name: {{ template "my-bloody-jenkins.fullname" . }} |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.name" . }} |
|||
chart: {{ template "my-bloody-jenkins.chart" . }} |
|||
release: {{ .Release.Name }} |
|||
heritage: {{ .Release.Service }} |
|||
spec: |
|||
replicas: 1 |
|||
strategy: |
|||
type: Recreate |
|||
rollingUpdate: null |
|||
selector: |
|||
matchLabels: |
|||
app: {{ template "my-bloody-jenkins.name" . }} |
|||
release: {{ .Release.Name }} |
|||
template: |
|||
metadata: |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.name" . }} |
|||
release: {{ .Release.Name }} |
|||
{{- if .Values.podAnnotations }} |
|||
annotations: |
|||
{{ toYaml .Values.podAnnotations | indent 8 }} |
|||
{{- end }} |
|||
spec: |
|||
{{- if and .Values.useHostNetwork }} |
|||
hostNetwork: true |
|||
{{- end }} |
|||
{{- with .Values.securityContext }} |
|||
securityContext: |
|||
{{ toYaml . | indent 8 }} |
|||
{{- end }} |
|||
{{- if and .Values.rbac .Values.rbac.create }} |
|||
serviceAccountName: {{ if .Values.rbac.createServiceAccount }}{{ (include "my-bloody-jenkins.fullname" .) | quote }}{{ else }}{{ .Values.rbac.serviceAccountName | quote }}{{ end }} |
|||
{{- end }} |
|||
{{- with .Values.image.imagePullSecrets }} |
|||
imagePullSecrets: |
|||
{{ toYaml . | indent 8 }} |
|||
{{- end }} |
|||
containers: |
|||
- name: {{ .Chart.Name }} |
|||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" |
|||
imagePullPolicy: {{ .Values.image.pullPolicy }} |
|||
ports: |
|||
- name: http |
|||
containerPort: {{ template "my-bloody-jenkins.httpPort" . }} |
|||
protocol: TCP |
|||
- name: jnlp |
|||
containerPort: {{ template "my-bloody-jenkins.jnlpPort" . }} |
|||
protocol: TCP |
|||
- name: sshd |
|||
containerPort: {{ template "my-bloody-jenkins.sshdPort" . }} |
|||
protocol: TCP |
|||
|
|||
{{- if .Values.livenessProbe }} |
|||
livenessProbe: |
|||
httpGet: |
|||
path: /login |
|||
port: http |
|||
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }} |
|||
periodSeconds: {{ .Values.livenessProbe.periodSeconds }} |
|||
timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }} |
|||
failureThreshold: {{ .Values.livenessProbe.failureThreshold }} |
|||
|
|||
{{- end }} |
|||
|
|||
{{- if .Values.readinessProbe }} |
|||
readinessProbe: |
|||
httpGet: |
|||
path: /login |
|||
port: http |
|||
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }} |
|||
periodSeconds: {{ .Values.readinessProbe.periodSeconds }} |
|||
timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }} |
|||
failureThreshold: {{ .Values.readinessProbe.failureThreshold }} |
|||
{{- end }} |
|||
|
|||
{{- if .Values.resources }} |
|||
resources: |
|||
{{ toYaml .Values.resources | indent 12 }} |
|||
{{- end }} |
|||
|
|||
env: |
|||
- name: K8S_NAMESPACE |
|||
value: "{{ .Release.Namespace }}" |
|||
{{- if .Values.javaMemoryOpts }} |
|||
- name: JAVA_OPTS_MEMORY |
|||
value: {{ .Values.javaMemoryOpts | quote }} |
|||
{{- end }} |
|||
{{- if .Values.jenkinsAdminUser }} |
|||
- name: JENKINS_ENV_ADMIN_USER |
|||
value: {{ .Values.jenkinsAdminUser | quote }} |
|||
{{- end }} |
|||
- name: JENKINS_ENV_CONFIG_YML_URL |
|||
value: file:///var/jenkins_managed_config/k8s-default-cloud.yml,file:///var/jenkins_managed_config/jenkins-config.yml{{ range $i, $configMapName := .Values.configMaps }},file:///var/jenkins_config/{{ $configMapName }}{{ end }} |
|||
{{- range $key, $value := .Values.env }} |
|||
- name: {{ $key }} |
|||
value: {{ $value | quote }} |
|||
{{- end }} |
|||
{{- if .Values.jenkinsURL }} |
|||
- name: JENKINS_ENV_JENKINS_URL |
|||
value: {{ .Values.jenkinsURL | quote }} |
|||
{{- else if .Values.ingress.enabled }} |
|||
- name: JENKINS_ENV_JENKINS_URL |
|||
value: {{ .Values.ingress.httpProtocol }}://{{ .Values.ingress.hostname }}{{ .Values.ingress.path }} |
|||
{{- end }} |
|||
- name: ENVVARS_DIRS |
|||
value: /var/jenkins_secrets/JENKINS_SECRET{{ range $i, $name := .Values.envSecrets }},/var/jenkins_secrets/{{ $name }}{{ end }} |
|||
- name: JENKINS_ENV_HOST_IP |
|||
valueFrom: |
|||
fieldRef: |
|||
fieldPath: status.podIP |
|||
|
|||
volumeMounts: |
|||
{{- if and .Values.persistence .Values.persistence.mounts }} |
|||
{{ toYaml .Values.persistence.mounts | indent 12 }} |
|||
{{- end }} |
|||
- mountPath: /var/jenkins_home |
|||
name: jenkins-home |
|||
readOnly: false |
|||
|
|||
- mountPath: /jenkins-workspace-home |
|||
name: jenkins-workspace-home |
|||
readOnly: false |
|||
{{- if .Values.persistence.mountDockerSocket }} |
|||
|
|||
- mountPath: /var/run/docker.sock |
|||
name: docker-socket |
|||
readOnly: false |
|||
{{- end }} |
|||
|
|||
{{/* Using internal secret - each key will become JENKINS_SECRET_${key} */}} |
|||
{{- if .Values.secrets }} |
|||
- mountPath: /var/jenkins_secrets/JENKINS_SECRET |
|||
name: {{ printf "%s-%s" (include "my-bloody-jenkins.fullname" .) "secrets" | quote }} |
|||
readOnly: true |
|||
{{- end }} |
|||
|
|||
{{/* Using external secret - each key will become ${SECRET_NAME}_${key} */}} |
|||
{{- if .Values.envSecrets }} |
|||
{{- range .Values.envSecrets }} |
|||
|
|||
- mountPath: /var/jenkins_secrets/{{ . }} |
|||
name: {{ . | quote }} |
|||
readOnly: true |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- if .Values.configMaps }} |
|||
{{- range .Values.configMaps }} |
|||
|
|||
- mountPath: /var/jenkins_config/{{ . }} |
|||
name: {{ . | quote }} |
|||
readOnly: true |
|||
{{- end }} |
|||
{{- end }} |
|||
|
|||
- mountPath: /var/jenkins_managed_config |
|||
name: {{ (include "my-bloody-jenkins.fullname" .) | quote }} |
|||
readOnly: true |
|||
|
|||
|
|||
|
|||
volumes: |
|||
{{- if and .Values.persistence .Values.persistence.volumes }} |
|||
{{ toYaml .Values.persistence.volumes | indent 8 }} |
|||
{{- end }} |
|||
{{- if .Values.persistence.mountDockerSocket }} |
|||
- name: docker-socket |
|||
hostPath: |
|||
path: /var/run/docker.sock |
|||
{{- end }} |
|||
- name: jenkins-home |
|||
{{- if and .Values.persistence .Values.persistence.jenkinsHome .Values.persistence.jenkinsHome.enabled }} |
|||
persistentVolumeClaim: |
|||
claimName: {{ .Values.persistence.jenkinsHome.existingClaim | default (include "my-bloody-jenkins.jenkinsHome.claimName" .) }} |
|||
{{- else }} |
|||
emptyDir: {} |
|||
{{- end }} |
|||
|
|||
- name: jenkins-workspace-home |
|||
{{- if and .Values.persistence .Values.persistence.jenkinsWorkspace .Values.persistence.jenkinsWorkspace.enabled }} |
|||
persistentVolumeClaim: |
|||
claimName: {{ .Values.persistence.jenkinsWorkspace.existingClaim | default (include "my-bloody-jenkins.jenkinsWorkspace.claimName" .) }} |
|||
{{- else }} |
|||
emptyDir: {} |
|||
{{- end }} |
|||
{{- if .Values.envSecrets }} |
|||
{{- range .Values.envSecrets }} |
|||
- name: {{ . | quote }} |
|||
secret: |
|||
secretName: {{ . }} |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- if .Values.configMaps }} |
|||
{{- range .Values.configMaps }} |
|||
- name: {{ . | quote }} |
|||
configMap: |
|||
name: {{ . | quote }} |
|||
{{- end }} |
|||
{{- end }} |
|||
- name: {{ (include "my-bloody-jenkins.fullname" .) | quote }} |
|||
configMap: |
|||
name: {{ (include "my-bloody-jenkins.fullname" .) | quote }} |
|||
{{- if .Values.secrets }} |
|||
- name: {{ printf "%s-%s" (include "my-bloody-jenkins.fullname" .) "secrets" | quote }} |
|||
secret: |
|||
secretName: {{ (include "my-bloody-jenkins.fullname" .) | quote }} |
|||
{{- end }} |
|||
|
|||
{{- with .Values.nodeSelector }} |
|||
nodeSelector: |
|||
{{ toYaml . | indent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.affinity }} |
|||
affinity: |
|||
{{ toYaml . | indent 8 }} |
|||
{{- end }} |
|||
{{- with .Values.tolerations }} |
|||
tolerations: |
|||
{{ toYaml . | indent 8 }} |
|||
{{- end }} |
@ -0,0 +1,17 @@ |
|||
{{- with .Values.ingress.tls }} |
|||
{{- if and .privateKey .certificate }} |
|||
apiVersion: v1 |
|||
kind: Secret |
|||
metadata: |
|||
name: {{ template "my-bloody-jenkins.tlsSecretName" $ }} |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.name" $ }} |
|||
chart: {{ template "my-bloody-jenkins.chart" $ }} |
|||
release: {{ $.Release.Name }} |
|||
heritage: {{ $.Release.Service }} |
|||
type: kubernetes.io/tls |
|||
data: |
|||
tls.crt: {{ .certificate | b64enc }} |
|||
tls.key: {{ .privateKey | b64enc }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,64 @@ |
|||
{{- if .Values.ingress.enabled -}} |
|||
{{- $fullName := include "my-bloody-jenkins.fullname" . -}} |
|||
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" }} |
|||
apiVersion: networking.k8s.io/v1 |
|||
{{ else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" }} |
|||
apiVersion: networking.k8s.io/v1beta1 |
|||
{{ else }} |
|||
apiVersion: extensions/v1beta1 |
|||
{{ end -}} |
|||
kind: Ingress |
|||
metadata: |
|||
name: {{ $fullName }} |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.name" . }} |
|||
chart: {{ template "my-bloody-jenkins.chart" . }} |
|||
release: {{ .Release.Name }} |
|||
heritage: {{ .Release.Service }} |
|||
{{- with .Values.ingress.labels }} |
|||
{{ toYaml . | indent 4 }} |
|||
{{- end }} |
|||
{{- with .Values.ingress.annotations }} |
|||
annotations: |
|||
{{ toYaml . | indent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
{{- if .Values.ingress.ingressClassName }} |
|||
ingressClassName: {{ .Values.ingress.ingressClassName }} |
|||
{{- end }} |
|||
{{- if .Values.ingress.tls }} |
|||
tls: |
|||
- hosts: |
|||
- {{ .Values.ingress.hostname }} |
|||
{{- if .Values.ingress.tls.secretName }} |
|||
secretName: {{ .Values.ingress.tls.secretName }} |
|||
{{- else if (and .Values.ingress.tls.certificate .Values.ingress.tls.privateKey) }} |
|||
secretName: {{ template "my-bloody-jenkins.tlsSecretName" . }} |
|||
{{- end }} |
|||
{{- end }} |
|||
rules: |
|||
{{- if .Values.ingress.preAdditionalRules }} |
|||
{{ toYaml .Values.ingress.preAdditionalRules | indent 2 }} |
|||
{{- end }} |
|||
- http: |
|||
paths: |
|||
- path: {{ .Values.ingress.path }} |
|||
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" }} |
|||
pathType: {{ .Values.ingress.pathType }} |
|||
backend: |
|||
service: |
|||
name: {{ $fullName }} |
|||
port: |
|||
name: http |
|||
{{ else }} |
|||
backend: |
|||
serviceName: {{ $fullName }} |
|||
servicePort: http |
|||
{{- end }} |
|||
{{- if .Values.ingress.hostname }} |
|||
host: {{ .Values.ingress.hostname }} |
|||
{{- end }} |
|||
{{- if .Values.ingress.additionalRules }} |
|||
{{ toYaml .Values.ingress.additionalRules | indent 2 }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,59 @@ |
|||
--- |
|||
{{- if and .Values.persistence .Values.persistence.jenkinsHome .Values.persistence.jenkinsHome.enabled (not .Values.persistence.jenkinsHome.existingClaim) }} |
|||
kind: PersistentVolumeClaim |
|||
apiVersion: v1 |
|||
metadata: |
|||
{{- if .Values.persistence.jenkinsHome.annotations }} |
|||
annotations: |
|||
{{ toYaml .Values.persistence.jenkinsHome.annotations | indent 4 }} |
|||
{{- end }} |
|||
name: {{ template "my-bloody-jenkins.jenkinsHome.claimName" . }} |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.fullname" . }} |
|||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" |
|||
release: "{{ .Release.Name }}" |
|||
heritage: "{{ .Release.Service }}" |
|||
spec: |
|||
accessModes: |
|||
- {{ .Values.persistence.jenkinsHome.accessMode | quote }} |
|||
resources: |
|||
requests: |
|||
storage: {{ .Values.persistence.jenkinsHome.size | quote }} |
|||
{{- if .Values.persistence.jenkinsHome.storageClass }} |
|||
{{- if (eq "-" .Values.persistence.jenkinsHome.storageClass) }} |
|||
storageClassName: "" |
|||
{{- else }} |
|||
storageClassName: "{{ .Values.persistence.jenkinsHome.storageClass }}" |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- end }} |
|||
|
|||
--- |
|||
{{- if and .Values.persistence .Values.persistence.jenkinsWorkspace .Values.persistence.jenkinsWorkspace.enabled (not .Values.persistence.jenkinsWorkspace.existingClaim) }} |
|||
kind: PersistentVolumeClaim |
|||
apiVersion: v1 |
|||
metadata: |
|||
{{- if .Values.persistence.jenkinsWorkspace.annotations }} |
|||
annotations: |
|||
{{ toYaml .Values.persistence.jenkinsWorkspace.annotations | indent 4 }} |
|||
{{- end }} |
|||
name: {{ template "my-bloody-jenkins.jenkinsWorkspace.claimName" . }} |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.fullname" . }} |
|||
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" |
|||
release: "{{ .Release.Name }}" |
|||
heritage: "{{ .Release.Service }}" |
|||
spec: |
|||
accessModes: |
|||
- {{ .Values.persistence.jenkinsWorkspace.accessMode | quote }} |
|||
resources: |
|||
requests: |
|||
storage: {{ .Values.persistence.jenkinsWorkspace.size | quote }} |
|||
{{- if .Values.persistence.jenkinsWorkspace.storageClass }} |
|||
{{- if (eq "-" .Values.persistence.jenkinsWorkspace.storageClass) }} |
|||
storageClassName: "" |
|||
{{- else }} |
|||
storageClassName: "{{ .Values.persistence.jenkinsWorkspace.storageClass }}" |
|||
{{- end }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,58 @@ |
|||
{{- if .Values.rbac.create }} |
|||
{{- $fullName := include "my-bloody-jenkins.fullname" . }} |
|||
{{- if .Values.rbac.createServiceAccount }} |
|||
--- |
|||
apiVersion: v1 |
|||
kind: ServiceAccount |
|||
metadata: |
|||
name: {{ $fullName }} |
|||
{{- with .Values.rbac.serviceAccount.annotations }} |
|||
annotations: |
|||
{{ toYaml . | indent 4 }} |
|||
{{- end }} |
|||
{{- end }} |
|||
|
|||
--- |
|||
kind: {{ if .Values.rbac.clusterWideAccess }}"ClusterRole"{{ else }}"Role"{{ end }} |
|||
{{- if .Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1" }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
{{ else }} |
|||
apiVersion: rbac.authorization.k8s.io/v1beta1 |
|||
{{- end }} |
|||
metadata: |
|||
name: {{ $fullName }} |
|||
rules: |
|||
- apiGroups: [""] |
|||
resources: ["pods"] |
|||
verbs: ["create","delete","get","list","patch","update","watch"] |
|||
- apiGroups: [""] |
|||
resources: ["pods/exec"] |
|||
verbs: ["create","delete","get","list","patch","update","watch"] |
|||
- apiGroups: [""] |
|||
resources: ["pods/log"] |
|||
verbs: ["get","list","watch"] |
|||
- apiGroups: [""] |
|||
resources: ["events"] |
|||
verbs: ["watch"] |
|||
- apiGroups: [""] |
|||
resources: ["secrets"] |
|||
verbs: ["get"] |
|||
|
|||
--- |
|||
{{- if .Capabilities.APIVersions.Has "rbac.authorization.k8s.io/v1" }} |
|||
apiVersion: rbac.authorization.k8s.io/v1 |
|||
{{ else }} |
|||
apiVersion: rbac.authorization.k8s.io/v1beta1 |
|||
{{- end }} |
|||
kind: {{ if .Values.rbac.clusterWideAccess }}"ClusterRoleBinding"{{ else }}"RoleBinding"{{ end }} |
|||
metadata: |
|||
name: {{ $fullName }} |
|||
roleRef: |
|||
apiGroup: rbac.authorization.k8s.io |
|||
kind: {{ if .Values.rbac.clusterWideAccess }}"ClusterRole"{{ else }}"Role"{{ end }} |
|||
name: {{ $fullName }} |
|||
subjects: |
|||
- kind: ServiceAccount |
|||
name: {{ if .Values.rbac.createServiceAccount }}{{ $fullName }}{{ else }}{{ .Values.rbac.serviceAccountName }}{{ end }} |
|||
namespace: "{{ .Release.Namespace }}" |
|||
{{- end }} |
@ -0,0 +1,16 @@ |
|||
{{- if .Values.secrets }} |
|||
apiVersion: v1 |
|||
kind: Secret |
|||
metadata: |
|||
name: {{ template "my-bloody-jenkins.fullname" . }} |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.name" . }} |
|||
chart: {{ template "my-bloody-jenkins.chart" . }} |
|||
release: {{ .Release.Name }} |
|||
heritage: {{ .Release.Service }} |
|||
type: Opaque |
|||
data: |
|||
{{- range $key, $value := .Values.secrets }} |
|||
{{ $key }}: {{ $value | b64enc | quote }} |
|||
{{- end }} |
|||
{{- end }} |
@ -0,0 +1,40 @@ |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: {{ template "my-bloody-jenkins.fullname" . }} |
|||
labels: |
|||
app: {{ template "my-bloody-jenkins.name" . }} |
|||
chart: {{ template "my-bloody-jenkins.chart" . }} |
|||
release: {{ .Release.Name }} |
|||
heritage: {{ .Release.Service }} |
|||
{{- with .Values.service.annotations }} |
|||
annotations: |
|||
{{ toYaml . | indent 4 }} |
|||
{{- end }} |
|||
spec: |
|||
type: {{ .Values.service.type }} |
|||
{{- with .Values.service.externalTrafficPolicy }} |
|||
externalTrafficPolicy: {{ . | quote }} |
|||
{{- end }} |
|||
selector: |
|||
app: {{ template "my-bloody-jenkins.name" . }} |
|||
release: {{ .Release.Name }} |
|||
ports: |
|||
- port: {{ default (include "my-bloody-jenkins.httpPort" .) .Values.service.httpPort }} |
|||
targetPort: http |
|||
protocol: TCP |
|||
name: http |
|||
- port: {{ default (include "my-bloody-jenkins.jnlpPort" .) .Values.service.jnlpPort }} |
|||
targetPort: jnlp |
|||
protocol: TCP |
|||
name: jnlp |
|||
- port: {{ default (include "my-bloody-jenkins.sshdPort" .) .Values.service.sshdPort }} |
|||
targetPort: sshd |
|||
protocol: TCP |
|||
name: sshd |
|||
{{- if eq .Values.service.type "LoadBalancer" }} |
|||
loadBalancerSourceRanges: {{ .Values.service.loadBalancerSourceRanges }} |
|||
{{- if .Values.service.loadBalancerIP }} |
|||
loadBalancerIP: {{ .Values.service.loadBalancerIP }} |
|||
{{end}} |
|||
{{end}} |
@ -0,0 +1,254 @@ |
|||
--- |
|||
######################################################## |
|||
## Override image |
|||
image: |
|||
repository: odavid/my-bloody-jenkins |
|||
tag: 2.332.3-277 |
|||
pullPolicy: IfNotPresent |
|||
imagePullSecrets: |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Exposing service |
|||
service: |
|||
# type: ClusterIP |
|||
type: ClusterIP |
|||
annotations: {} |
|||
# httpPort: 8080 |
|||
# jnlpPort: 50000 |
|||
# sshdPort: 16022 |
|||
# loadBalancerSourceRanges: 0.0.0.0/0 |
|||
# loadBalancerIP: |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Exposing ingress |
|||
## |
|||
## Set the jenkinsURL configuration. |
|||
## If not set and ingress is enabled, then jenkins URL is |
|||
## {{ .Values.ingress.httpProtocol }}://{{ .Values.ingress.hostname }}{{ .Values.ingress.path }} |
|||
# jenkinsURL: https://jenkins.host.name |
|||
ingress: |
|||
## Change to https if the ingress uses tls or you are using external |
|||
## tls termination using annotations |
|||
httpProtocol: http |
|||
enabled: true |
|||
path: / |
|||
pathType: Prefix |
|||
ingressClassName: "nginx" |
|||
hostname: jenkins.172-18-0-241.nip.io |
|||
# annotations: {} |
|||
# labels: {} |
|||
# tls: |
|||
# secretName: |
|||
# certificate: |
|||
# privateKey: |
|||
|
|||
## Ability to add more ingress rules |
|||
additionalRules: |
|||
# - http: |
|||
# paths: |
|||
# - path: path |
|||
# backend: |
|||
preAdditionalRules: |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## By default rbac are not used and default service account |
|||
## is being used. |
|||
rbac: |
|||
## Create serviceAccount, Eole and RoleBindings |
|||
create: true |
|||
## If createServiceAccount = false, and rbac.create = true, the chart will only use the rbac.serviceAaccountName within RoleBindings |
|||
createServiceAccount: true |
|||
## Ignored if createServiceAccount = true |
|||
serviceAaccountName: "default" |
|||
serviceAccount: |
|||
annotations: {} |
|||
## Instead of Role, create a ClusterRole and ClusterRoleBindings |
|||
clusterWideAccess: false |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Control requests limit |
|||
## It is highly recommended to give jenkins the amount of |
|||
## cpu and memory in production usage |
|||
resources: |
|||
requests: |
|||
cpu: 500m |
|||
memory: 512Mi |
|||
limits: |
|||
cpu: 2000m |
|||
memory: 2048Mi |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## It can take a lot of time for jenkins to be started |
|||
## This is why the livenessProbe.initialDelaySeconds is high |
|||
readinessProbe: |
|||
timeoutSeconds: 5 |
|||
initialDelaySeconds: 120 |
|||
periodSeconds: 5 |
|||
failureThreshold: 3 |
|||
|
|||
livenessProbe: |
|||
timeoutSeconds: 5 |
|||
initialDelaySeconds: 600 |
|||
periodSeconds: 5 |
|||
failureThreshold: 3 |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Control peristence of jenkins data: |
|||
## By default, the master workspace and master home are separated |
|||
## Since master should be used as executer, the workspace directory is |
|||
## mainly used for fetching pipeline libraries and some initial clone of |
|||
## projects. Therefore, the jenkinsWorkspace can be left as emptyDir (enabled=false). |
|||
## On the other hand, jenkinsHome must be persistent! |
|||
persistence: |
|||
mountDockerSocket: true |
|||
jenkinsHome: |
|||
enabled: true |
|||
annotations: {} |
|||
accessMode: ReadWriteOnce |
|||
size: 20Gi |
|||
## A manually managed Persistent Volume and Claim |
|||
## Requires persistence.jenkinsHome.enabled: true |
|||
## If defined, PVC must be created manually before volume will be bound |
|||
existingClaim: |
|||
## If defined, storageClass: <storageClass> |
|||
## If set to "-", storageClass: "", which disables dynamic provisioning |
|||
## If undefined (the default) or set to null, no storageClass spec is |
|||
## set, choosing the default provisioner. (gp2 on AWS, standard on |
|||
## GKE, AWS & OpenStack) |
|||
## |
|||
storageClass: "local-path" |
|||
jenkinsWorkspace: |
|||
enabled: false |
|||
annotations: {} |
|||
accessMode: ReadWriteOnce |
|||
size: 8Gi |
|||
## A manually managed Persistent Volume and Claim |
|||
## Requires persistence.jenkinsWorkspace.enabled: true |
|||
## If defined, PVC must be created manually before volume will be bound |
|||
existingClaim: |
|||
## If defined, storageClass: <storageClass> |
|||
## If set to "-", storageClass: "", which disables dynamic provisioning |
|||
## If undefined (the default) or set to null, no storageClass spec is |
|||
## set, choosing the default provisioner. (gp2 on AWS, standard on |
|||
## GKE, AWS & OpenStack) |
|||
## |
|||
storageClass: "local-path" |
|||
|
|||
## Additional volumes and mounts that will be attached to the container. e.g. secrets |
|||
volumes: |
|||
# - name: nothing |
|||
# emptyDir: {} |
|||
mounts: |
|||
# - mountPath: /var/nothing |
|||
# name: nothing |
|||
# readOnly: true |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## See: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ |
|||
nodeSelector: {} |
|||
tolerations: [] |
|||
affinity: {} |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Add more annotations to pod |
|||
podAnnotations: {} |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Security Context for jenkins pod |
|||
securityContext: {} |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## If true, will set the jenkins master to use hostNetwork=true |
|||
useHostNetwork: false |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Additional Environment variables to be provided to the container |
|||
env: |
|||
# ENVIRONMENT_VARIABLE_NAME: VALUE |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## If specified, an internal secret will be created. |
|||
## Each key will become JENKINS_SECRET_<KEY> environment variable |
|||
secrets: |
|||
# MY_PASSWORD: Very Secret |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Use external secrets as environment variables |
|||
## Each item in the list represents an existing secret name |
|||
## All its keys will be transformed to environment variables |
|||
## See https://github.com/odavid/my-bloody-jenkins/pull/102 |
|||
envSecrets: |
|||
# - my-jenkins-external-secret |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## List of ConfigMaps that will be mounted as configuration files |
|||
## All configuration files will be deep merged into single config |
|||
## See https://github.com/odavid/my-bloody-jenkins/pull/102 |
|||
configMaps: |
|||
# - my-config-map |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## The jenkins Admin Username - must be a valid username |
|||
## within the Jenkins Security Realm |
|||
jenkinsAdminUser: admin |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## Java Options for Jenkins Master. Make sure |
|||
## resource limits and requests are defined accordingly |
|||
javaMemoryOpts: "-Xmx256m" |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## If enabled = 'true', then |
|||
## a Default k8s Jenkins cloud will be configured to |
|||
## provision slaves automatically based on labels |
|||
defaultK8sCloud: |
|||
enabled: true |
|||
name: "k8s" |
|||
labels: |
|||
- "generic" |
|||
jvmArgs: "-Xmx1g" |
|||
remoteFs: "/home/jenkins" |
|||
image: "odavid/jenkins-jnlp-slave:latest" |
|||
######################################################## |
|||
|
|||
######################################################## |
|||
## A managed configuration based on |
|||
## My Bloody Jenkins YAML config. |
|||
## See: https://github.com/odavid/my-bloody-jenkins#configuration-reference |
|||
managedConfig: {} |
|||
## Configure Security - https://github.com/odavid/my-bloody-jenkins#security-section |
|||
# security: |
|||
## Configure tools - https://github.com/odavid/my-bloody-jenkins#tools-section |
|||
# tools: |
|||
## Configure credentials - https://github.com/odavid/my-bloody-jenkins#credentials-section |
|||
# credentials: |
|||
## Configure notifiers - https://github.com/odavid/my-bloody-jenkins#notifiers-section |
|||
# notifiers: |
|||
## Configure notifiers - https://github.com/odavid/my-bloody-jenkins#pipeline-libraries-section |
|||
# pipeline_libraries: |
|||
## Script Approvals - https://github.com/odavid/my-bloody-jenkins#script-approval-section |
|||
# script_approval: |
|||
## Configure Clouds - https://github.com/odavid/my-bloody-jenkins#clouds-section |
|||
# clouds: |
|||
## Configure Seed Jobs - https://github.com/odavid/my-bloody-jenkins#seed-jobs-section |
|||
# seed_jobs: |
|||
## Configure Job DSL Scripts - https://github.com/odavid/my-bloody-jenkins#jobdsl-scripts-section |
|||
# job_dsl_scripts: |
|||
######################################################## |
@ -0,0 +1,398 @@ |
|||
# Changelog |
|||
|
|||
This file documents all notable changes to [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Helm Chart. The release numbering uses [semantic versioning](http://semver.org). |
|||
|
|||
### 4.1.2 |
|||
|
|||
- "[8587](https://github.com/kubernetes/ingress-nginx/pull/8587) Add CAP_SYS_CHROOT to DS/PSP when needed" |
|||
- "[8458](https://github.com/kubernetes/ingress-nginx/pull/8458) Add portNamePreffix Helm chart parameter" |
|||
- "[8522](https://github.com/kubernetes/ingress-nginx/pull/8522) Add documentation for controller.service.loadBalancerIP in Helm chart" |
|||
|
|||
### 4.1.0 |
|||
|
|||
- "[8481](https://github.com/kubernetes/ingress-nginx/pull/8481) Fix log creation in chroot script" |
|||
- "[8479](https://github.com/kubernetes/ingress-nginx/pull/8479) changed nginx base img tag to img built with alpine3.14.6" |
|||
- "[8478](https://github.com/kubernetes/ingress-nginx/pull/8478) update base images and protobuf gomod" |
|||
- "[8468](https://github.com/kubernetes/ingress-nginx/pull/8468) Fallback to ngx.var.scheme for redirectScheme with use-forward-headers when X-Forwarded-Proto is empty" |
|||
- "[8456](https://github.com/kubernetes/ingress-nginx/pull/8456) Implement object deep inspector" |
|||
- "[8455](https://github.com/kubernetes/ingress-nginx/pull/8455) Update dependencies" |
|||
- "[8454](https://github.com/kubernetes/ingress-nginx/pull/8454) Update index.md" |
|||
- "[8447](https://github.com/kubernetes/ingress-nginx/pull/8447) typo fixing" |
|||
- "[8446](https://github.com/kubernetes/ingress-nginx/pull/8446) Fix suggested annotation-value-word-blocklist" |
|||
- "[8444](https://github.com/kubernetes/ingress-nginx/pull/8444) replace deprecated topology key in example with current one" |
|||
- "[8443](https://github.com/kubernetes/ingress-nginx/pull/8443) Add dependency review enforcement" |
|||
- "[8434](https://github.com/kubernetes/ingress-nginx/pull/8434) added new auth-tls-match-cn annotation" |
|||
- "[8426](https://github.com/kubernetes/ingress-nginx/pull/8426) Bump github.com/prometheus/common from 0.32.1 to 0.33.0" |
|||
|
|||
### 4.0.18 |
|||
|
|||
- "[8291](https://github.com/kubernetes/ingress-nginx/pull/8291) remove git tag env from cloud build" |
|||
- "[8286](https://github.com/kubernetes/ingress-nginx/pull/8286) Fix OpenTelemetry sidecar image build" |
|||
- "[8277](https://github.com/kubernetes/ingress-nginx/pull/8277) Add OpenSSF Best practices badge" |
|||
- "[8273](https://github.com/kubernetes/ingress-nginx/pull/8273) Issue#8241" |
|||
- "[8267](https://github.com/kubernetes/ingress-nginx/pull/8267) Add fsGroup value to admission-webhooks/job-patch charts" |
|||
- "[8262](https://github.com/kubernetes/ingress-nginx/pull/8262) Updated confusing error" |
|||
- "[8256](https://github.com/kubernetes/ingress-nginx/pull/8256) fix: deny locations with invalid auth-url annotation" |
|||
- "[8253](https://github.com/kubernetes/ingress-nginx/pull/8253) Add a certificate info metric" |
|||
- "[8236](https://github.com/kubernetes/ingress-nginx/pull/8236) webhook: remove useless code." |
|||
- "[8227](https://github.com/kubernetes/ingress-nginx/pull/8227) Update libraries in webhook image" |
|||
- "[8225](https://github.com/kubernetes/ingress-nginx/pull/8225) fix inconsistent-label-cardinality for prometheus metrics: nginx_ingress_controller_requests" |
|||
- "[8221](https://github.com/kubernetes/ingress-nginx/pull/8221) Do not validate ingresses with unknown ingress class in admission webhook endpoint" |
|||
- "[8210](https://github.com/kubernetes/ingress-nginx/pull/8210) Bump github.com/prometheus/client_golang from 1.11.0 to 1.12.1" |
|||
- "[8209](https://github.com/kubernetes/ingress-nginx/pull/8209) Bump google.golang.org/grpc from 1.43.0 to 1.44.0" |
|||
- "[8204](https://github.com/kubernetes/ingress-nginx/pull/8204) Add Artifact Hub lint" |
|||
- "[8203](https://github.com/kubernetes/ingress-nginx/pull/8203) Fix Indentation of example and link to cert-manager tutorial" |
|||
- "[8201](https://github.com/kubernetes/ingress-nginx/pull/8201) feat(metrics): add path and method labels to requests countera" |
|||
- "[8199](https://github.com/kubernetes/ingress-nginx/pull/8199) use functional options to reduce number of methods creating an EchoDeployment" |
|||
- "[8196](https://github.com/kubernetes/ingress-nginx/pull/8196) docs: fix inconsistent controller annotation" |
|||
- "[8191](https://github.com/kubernetes/ingress-nginx/pull/8191) Using Go install for misspell" |
|||
- "[8186](https://github.com/kubernetes/ingress-nginx/pull/8186) prometheus+grafana using servicemonitor" |
|||
- "[8185](https://github.com/kubernetes/ingress-nginx/pull/8185) Append elements on match, instead of removing for cors-annotations" |
|||
- "[8179](https://github.com/kubernetes/ingress-nginx/pull/8179) Bump github.com/opencontainers/runc from 1.0.3 to 1.1.0" |
|||
- "[8173](https://github.com/kubernetes/ingress-nginx/pull/8173) Adding annotations to the controller service account" |
|||
- "[8163](https://github.com/kubernetes/ingress-nginx/pull/8163) Update the $req_id placeholder description" |
|||
- "[8162](https://github.com/kubernetes/ingress-nginx/pull/8162) Versioned static manifests" |
|||
- "[8159](https://github.com/kubernetes/ingress-nginx/pull/8159) Adding some geoip variables and default values" |
|||
- "[8155](https://github.com/kubernetes/ingress-nginx/pull/8155) #7271 feat: avoid-pdb-creation-when-default-backend-disabled-and-replicas-gt-1" |
|||
- "[8151](https://github.com/kubernetes/ingress-nginx/pull/8151) Automatically generate helm docs" |
|||
- "[8143](https://github.com/kubernetes/ingress-nginx/pull/8143) Allow to configure delay before controller exits" |
|||
- "[8136](https://github.com/kubernetes/ingress-nginx/pull/8136) add ingressClass option to helm chart - back compatibility with ingress.class annotations" |
|||
- "[8126](https://github.com/kubernetes/ingress-nginx/pull/8126) Example for JWT" |
|||
|
|||
|
|||
### 4.0.15 |
|||
|
|||
- [8120] https://github.com/kubernetes/ingress-nginx/pull/8120 Update go in runner and release v1.1.1 |
|||
- [8119] https://github.com/kubernetes/ingress-nginx/pull/8119 Update to go v1.17.6 |
|||
- [8118] https://github.com/kubernetes/ingress-nginx/pull/8118 Remove deprecated libraries, update other libs |
|||
- [8117] https://github.com/kubernetes/ingress-nginx/pull/8117 Fix codegen errors |
|||
- [8115] https://github.com/kubernetes/ingress-nginx/pull/8115 chart/ghaction: set the correct permission to have access to push a release |
|||
- [8098] https://github.com/kubernetes/ingress-nginx/pull/8098 generating SHA for CA only certs in backend_ssl.go + comparision of P… |
|||
- [8088] https://github.com/kubernetes/ingress-nginx/pull/8088 Fix Edit this page link to use main branch |
|||
- [8072] https://github.com/kubernetes/ingress-nginx/pull/8072 Expose GeoIP2 Continent code as variable |
|||
- [8061] https://github.com/kubernetes/ingress-nginx/pull/8061 docs(charts): using helm-docs for chart |
|||
- [8058] https://github.com/kubernetes/ingress-nginx/pull/8058 Bump github.com/spf13/cobra from 1.2.1 to 1.3.0 |
|||
- [8054] https://github.com/kubernetes/ingress-nginx/pull/8054 Bump google.golang.org/grpc from 1.41.0 to 1.43.0 |
|||
- [8051] https://github.com/kubernetes/ingress-nginx/pull/8051 align bug report with feature request regarding kind documentation |
|||
- [8046] https://github.com/kubernetes/ingress-nginx/pull/8046 Report expired certificates (#8045) |
|||
- [8044] https://github.com/kubernetes/ingress-nginx/pull/8044 remove G109 check till gosec resolves issues |
|||
- [8042] https://github.com/kubernetes/ingress-nginx/pull/8042 docs_multiple_instances_one_cluster_ticket_7543 |
|||
- [8041] https://github.com/kubernetes/ingress-nginx/pull/8041 docs: fix typo'd executible name |
|||
- [8035] https://github.com/kubernetes/ingress-nginx/pull/8035 Comment busy owners |
|||
- [8029] https://github.com/kubernetes/ingress-nginx/pull/8029 Add stream-snippet as a ConfigMap and Annotation option |
|||
- [8023] https://github.com/kubernetes/ingress-nginx/pull/8023 fix nginx compilation flags |
|||
- [8021] https://github.com/kubernetes/ingress-nginx/pull/8021 Disable default modsecurity_rules_file if modsecurity-snippet is specified |
|||
- [8019] https://github.com/kubernetes/ingress-nginx/pull/8019 Revise main documentation page |
|||
- [8018] https://github.com/kubernetes/ingress-nginx/pull/8018 Preserve order of plugin invocation |
|||
- [8015] https://github.com/kubernetes/ingress-nginx/pull/8015 Add newline indenting to admission webhook annotations |
|||
- [8014] https://github.com/kubernetes/ingress-nginx/pull/8014 Add link to example error page manifest in docs |
|||
- [8009] https://github.com/kubernetes/ingress-nginx/pull/8009 Fix spelling in documentation and top-level files |
|||
- [8008] https://github.com/kubernetes/ingress-nginx/pull/8008 Add relabelings in controller-servicemonitor.yaml |
|||
- [8003] https://github.com/kubernetes/ingress-nginx/pull/8003 Minor improvements (formatting, consistency) in install guide |
|||
- [8001] https://github.com/kubernetes/ingress-nginx/pull/8001 fix: go-grpc Dockerfile |
|||
- [7999] https://github.com/kubernetes/ingress-nginx/pull/7999 images: use k8s-staging-test-infra/gcb-docker-gcloud |
|||
- [7996] https://github.com/kubernetes/ingress-nginx/pull/7996 doc: improvement |
|||
- [7983] https://github.com/kubernetes/ingress-nginx/pull/7983 Fix a couple of misspellings in the annotations documentation. |
|||
- [7979] https://github.com/kubernetes/ingress-nginx/pull/7979 allow set annotations for admission Jobs |
|||
- [7977] https://github.com/kubernetes/ingress-nginx/pull/7977 Add ssl_reject_handshake to defaul server |
|||
- [7975] https://github.com/kubernetes/ingress-nginx/pull/7975 add legacy version update v0.50.0 to main changelog |
|||
- [7972] https://github.com/kubernetes/ingress-nginx/pull/7972 updated service upstream definition |
|||
|
|||
### 4.0.14 |
|||
|
|||
- [8061] https://github.com/kubernetes/ingress-nginx/pull/8061 Using helm-docs to populate values table in README.md |
|||
|
|||
### 4.0.13 |
|||
|
|||
- [8008] https://github.com/kubernetes/ingress-nginx/pull/8008 Add relabelings in controller-servicemonitor.yaml |
|||
|
|||
### 4.0.12 |
|||
|
|||
- [7978] https://github.com/kubernetes/ingress-nginx/pull/7979 Support custom annotations in admissions Jobs |
|||
|
|||
### 4.0.11 |
|||
|
|||
- [7873] https://github.com/kubernetes/ingress-nginx/pull/7873 Makes the [appProtocol](https://kubernetes.io/docs/concepts/services-networking/_print/#application-protocol) field optional. |
|||
|
|||
### 4.0.10 |
|||
|
|||
- [7964] https://github.com/kubernetes/ingress-nginx/pull/7964 Update controller version to v1.1.0 |
|||
|
|||
### 4.0.9 |
|||
|
|||
- [6992] https://github.com/kubernetes/ingress-nginx/pull/6992 Add ability to specify labels for all resources |
|||
|
|||
### 4.0.7 |
|||
|
|||
- [7923] https://github.com/kubernetes/ingress-nginx/pull/7923 Release v1.0.5 of ingress-nginx |
|||
- [7806] https://github.com/kubernetes/ingress-nginx/pull/7806 Choice option for internal/external loadbalancer type service |
|||
|
|||
### 4.0.6 |
|||
|
|||
- [7804] https://github.com/kubernetes/ingress-nginx/pull/7804 Release v1.0.4 of ingress-nginx |
|||
- [7651] https://github.com/kubernetes/ingress-nginx/pull/7651 Support ipFamilyPolicy and ipFamilies fields in Helm Chart |
|||
- [7798] https://github.com/kubernetes/ingress-nginx/pull/7798 Exoscale: use HTTP Healthcheck mode |
|||
- [7793] https://github.com/kubernetes/ingress-nginx/pull/7793 Update kube-webhook-certgen to v1.1.1 |
|||
|
|||
### 4.0.5 |
|||
|
|||
- [7740] https://github.com/kubernetes/ingress-nginx/pull/7740 Release v1.0.3 of ingress-nginx |
|||
|
|||
### 4.0.3 |
|||
|
|||
- [7707] https://github.com/kubernetes/ingress-nginx/pull/7707 Release v1.0.2 of ingress-nginx |
|||
|
|||
### 4.0.2 |
|||
|
|||
- [7681] https://github.com/kubernetes/ingress-nginx/pull/7681 Release v1.0.1 of ingress-nginx |
|||
|
|||
### 4.0.1 |
|||
|
|||
- [7535] https://github.com/kubernetes/ingress-nginx/pull/7535 Release v1.0.0 ingress-nginx |
|||
|
|||
### 3.34.0 |
|||
|
|||
- [7256] https://github.com/kubernetes/ingress-nginx/pull/7256 Add namespace field in the namespace scoped resource templates |
|||
|
|||
### 3.33.0 |
|||
|
|||
- [7164] https://github.com/kubernetes/ingress-nginx/pull/7164 Update nginx to v1.20.1 |
|||
|
|||
### 3.32.0 |
|||
|
|||
- [7117] https://github.com/kubernetes/ingress-nginx/pull/7117 Add annotations for HPA |
|||
|
|||
### 3.31.0 |
|||
|
|||
- [7137] https://github.com/kubernetes/ingress-nginx/pull/7137 Add support for custom probes |
|||
|
|||
### 3.30.0 |
|||
|
|||
- [#7092](https://github.com/kubernetes/ingress-nginx/pull/7092) Removes the possibility of using localhost in ExternalNames as endpoints |
|||
|
|||
### 3.29.0 |
|||
|
|||
- [X] [#6945](https://github.com/kubernetes/ingress-nginx/pull/7020) Add option to specify job label for ServiceMonitor |
|||
|
|||
### 3.28.0 |
|||
|
|||
- [ ] [#6900](https://github.com/kubernetes/ingress-nginx/pull/6900) Support existing PSPs |
|||
|
|||
### 3.27.0 |
|||
|
|||
- Update ingress-nginx v0.45.0 |
|||
|
|||
### 3.26.0 |
|||
|
|||
- [X] [#6979](https://github.com/kubernetes/ingress-nginx/pull/6979) Changed servicePort value for metrics |
|||
|
|||
### 3.25.0 |
|||
|
|||
- [X] [#6957](https://github.com/kubernetes/ingress-nginx/pull/6957) Add ability to specify automountServiceAccountToken |
|||
|
|||
### 3.24.0 |
|||
|
|||
- [X] [#6908](https://github.com/kubernetes/ingress-nginx/pull/6908) Add volumes to default-backend deployment |
|||
|
|||
### 3.23.0 |
|||
|
|||
- Update ingress-nginx v0.44.0 |
|||
|
|||
### 3.22.0 |
|||
|
|||
- [X] [#6802](https://github.com/kubernetes/ingress-nginx/pull/6802) Add value for configuring a custom Diffie-Hellman parameters file |
|||
- [X] [#6815](https://github.com/kubernetes/ingress-nginx/pull/6815) Allow use of numeric namespaces in helm chart |
|||
|
|||
### 3.21.0 |
|||
|
|||
- [X] [#6783](https://github.com/kubernetes/ingress-nginx/pull/6783) Add custom annotations to ScaledObject |
|||
- [X] [#6761](https://github.com/kubernetes/ingress-nginx/pull/6761) Adding quotes in the serviceAccount name in Helm values |
|||
- [X] [#6767](https://github.com/kubernetes/ingress-nginx/pull/6767) Remove ClusterRole when scope option is enabled |
|||
- [X] [#6785](https://github.com/kubernetes/ingress-nginx/pull/6785) Update kube-webhook-certgen image to v1.5.1 |
|||
|
|||
### 3.20.1 |
|||
|
|||
- Do not create KEDA in case of DaemonSets. |
|||
- Fix KEDA v2 definition |
|||
|
|||
### 3.20.0 |
|||
|
|||
- [X] [#6730](https://github.com/kubernetes/ingress-nginx/pull/6730) Do not create HPA for defaultBackend if not enabled. |
|||
|
|||
### 3.19.0 |
|||
|
|||
- Update ingress-nginx v0.43.0 |
|||
|
|||
### 3.18.0 |
|||
|
|||
- [X] [#6688](https://github.com/kubernetes/ingress-nginx/pull/6688) Allow volume-type emptyDir in controller podsecuritypolicy |
|||
- [X] [#6691](https://github.com/kubernetes/ingress-nginx/pull/6691) Improve parsing of helm parameters |
|||
|
|||
### 3.17.0 |
|||
|
|||
- Update ingress-nginx v0.42.0 |
|||
|
|||
### 3.16.1 |
|||
|
|||
- Fix chart-releaser action |
|||
|
|||
### 3.16.0 |
|||
|
|||
- [X] [#6646](https://github.com/kubernetes/ingress-nginx/pull/6646) Added LoadBalancerIP value for internal service |
|||
|
|||
### 3.15.1 |
|||
|
|||
- Fix chart-releaser action |
|||
|
|||
### 3.15.0 |
|||
|
|||
- [X] [#6586](https://github.com/kubernetes/ingress-nginx/pull/6586) Fix 'maxmindLicenseKey' location in values.yaml |
|||
|
|||
### 3.14.0 |
|||
|
|||
- [X] [#6469](https://github.com/kubernetes/ingress-nginx/pull/6469) Allow custom service names for controller and backend |
|||
|
|||
### 3.13.0 |
|||
|
|||
- [X] [#6544](https://github.com/kubernetes/ingress-nginx/pull/6544) Fix default backend HPA name variable |
|||
|
|||
### 3.12.0 |
|||
|
|||
- [X] [#6514](https://github.com/kubernetes/ingress-nginx/pull/6514) Remove helm2 support and update docs |
|||
|
|||
### 3.11.1 |
|||
|
|||
- [X] [#6505](https://github.com/kubernetes/ingress-nginx/pull/6505) Reorder HPA resource list to work with GitOps tooling |
|||
|
|||
### 3.11.0 |
|||
|
|||
- Support Keda Autoscaling |
|||
|
|||
### 3.10.1 |
|||
|
|||
- Fix regression introduced in 0.41.0 with external authentication |
|||
|
|||
### 3.10.0 |
|||
|
|||
- Fix routing regression introduced in 0.41.0 with PathType Exact |
|||
|
|||
### 3.9.0 |
|||
|
|||
- [X] [#6423](https://github.com/kubernetes/ingress-nginx/pull/6423) Add Default backend HPA autoscaling |
|||
|
|||
### 3.8.0 |
|||
|
|||
- [X] [#6395](https://github.com/kubernetes/ingress-nginx/pull/6395) Update jettech/kube-webhook-certgen image |
|||
- [X] [#6377](https://github.com/kubernetes/ingress-nginx/pull/6377) Added loadBalancerSourceRanges for internal lbs |
|||
- [X] [#6356](https://github.com/kubernetes/ingress-nginx/pull/6356) Add securitycontext settings on defaultbackend |
|||
- [X] [#6401](https://github.com/kubernetes/ingress-nginx/pull/6401) Fix controller service annotations |
|||
- [X] [#6403](https://github.com/kubernetes/ingress-nginx/pull/6403) Initial helm chart changelog |
|||
|
|||
### 3.7.1 |
|||
|
|||
- [X] [#6326](https://github.com/kubernetes/ingress-nginx/pull/6326) Fix liveness and readiness probe path in daemonset chart |
|||
|
|||
### 3.7.0 |
|||
|
|||
- [X] [#6316](https://github.com/kubernetes/ingress-nginx/pull/6316) Numerals in podAnnotations in quotes [#6315](https://github.com/kubernetes/ingress-nginx/issues/6315) |
|||
|
|||
### 3.6.0 |
|||
|
|||
- [X] [#6305](https://github.com/kubernetes/ingress-nginx/pull/6305) Add default linux nodeSelector |
|||
|
|||
### 3.5.1 |
|||
|
|||
- [X] [#6299](https://github.com/kubernetes/ingress-nginx/pull/6299) Fix helm chart release |
|||
|
|||
### 3.5.0 |
|||
|
|||
- [X] [#6260](https://github.com/kubernetes/ingress-nginx/pull/6260) Allow Helm Chart to customize admission webhook's annotations, timeoutSeconds, namespaceSelector, objectSelector and cert files locations |
|||
|
|||
### 3.4.0 |
|||
|
|||
- [X] [#6268](https://github.com/kubernetes/ingress-nginx/pull/6268) Update to 0.40.2 in helm chart #6288 |
|||
|
|||
### 3.3.1 |
|||
|
|||
- [X] [#6259](https://github.com/kubernetes/ingress-nginx/pull/6259) Release helm chart |
|||
- [X] [#6258](https://github.com/kubernetes/ingress-nginx/pull/6258) Fix chart markdown link |
|||
- [X] [#6253](https://github.com/kubernetes/ingress-nginx/pull/6253) Release v0.40.0 |
|||
|
|||
### 3.3.1 |
|||
|
|||
- [X] [#6233](https://github.com/kubernetes/ingress-nginx/pull/6233) Add admission controller e2e test |
|||
|
|||
### 3.3.0 |
|||
|
|||
- [X] [#6203](https://github.com/kubernetes/ingress-nginx/pull/6203) Refactor parsing of key values |
|||
- [X] [#6162](https://github.com/kubernetes/ingress-nginx/pull/6162) Add helm chart options to expose metrics service as NodePort |
|||
- [X] [#6180](https://github.com/kubernetes/ingress-nginx/pull/6180) Fix helm chart admissionReviewVersions regression |
|||
- [X] [#6169](https://github.com/kubernetes/ingress-nginx/pull/6169) Fix Typo in example prometheus rules |
|||
|
|||
### 3.0.0 |
|||
|
|||
- [X] [#6167](https://github.com/kubernetes/ingress-nginx/pull/6167) Update chart requirements |
|||
|
|||
### 2.16.0 |
|||
|
|||
- [X] [#6154](https://github.com/kubernetes/ingress-nginx/pull/6154) add `topologySpreadConstraint` to controller |
|||
|
|||
### 2.15.0 |
|||
|
|||
- [X] [#6087](https://github.com/kubernetes/ingress-nginx/pull/6087) Adding parameter for externalTrafficPolicy in internal controller service spec |
|||
|
|||
### 2.14.0 |
|||
|
|||
- [X] [#6104](https://github.com/kubernetes/ingress-nginx/pull/6104) Misc fixes for nginx-ingress chart for better keel and prometheus-operator integration |
|||
|
|||
### 2.13.0 |
|||
|
|||
- [X] [#6093](https://github.com/kubernetes/ingress-nginx/pull/6093) Release v0.35.0 |
|||
|
|||
### 2.13.0 |
|||
|
|||
- [X] [#6093](https://github.com/kubernetes/ingress-nginx/pull/6093) Release v0.35.0 |
|||
- [X] [#6080](https://github.com/kubernetes/ingress-nginx/pull/6080) Switch images to k8s.gcr.io after Vanity Domain Flip |
|||
|
|||
### 2.12.1 |
|||
|
|||
- [X] [#6075](https://github.com/kubernetes/ingress-nginx/pull/6075) Sync helm chart affinity examples |
|||
|
|||
### 2.12.0 |
|||
|
|||
- [X] [#6039](https://github.com/kubernetes/ingress-nginx/pull/6039) Add configurable serviceMonitor metricRelabelling and targetLabels |
|||
- [X] [#6044](https://github.com/kubernetes/ingress-nginx/pull/6044) Fix YAML linting |
|||
|
|||
### 2.11.3 |
|||
|
|||
- [X] [#6038](https://github.com/kubernetes/ingress-nginx/pull/6038) Bump chart version PATCH |
|||
|
|||
### 2.11.2 |
|||
|
|||
- [X] [#5951](https://github.com/kubernetes/ingress-nginx/pull/5951) Bump chart patch version |
|||
|
|||
### 2.11.1 |
|||
|
|||
- [X] [#5900](https://github.com/kubernetes/ingress-nginx/pull/5900) Release helm chart for v0.34.1 |
|||
|
|||
### 2.11.0 |
|||
|
|||
- [X] [#5879](https://github.com/kubernetes/ingress-nginx/pull/5879) Update helm chart for v0.34.0 |
|||
- [X] [#5671](https://github.com/kubernetes/ingress-nginx/pull/5671) Make liveness probe more fault tolerant than readiness probe |
|||
|
|||
### 2.10.0 |
|||
|
|||
- [X] [#5843](https://github.com/kubernetes/ingress-nginx/pull/5843) Update jettech/kube-webhook-certgen image |
|||
|
|||
### 2.9.1 |
|||
|
|||
- [X] [#5823](https://github.com/kubernetes/ingress-nginx/pull/5823) Add quoting to sysctls because numeric values need to be presented as strings (#5823) |
|||
|
|||
### 2.9.0 |
|||
|
|||
- [X] [#5795](https://github.com/kubernetes/ingress-nginx/pull/5795) Use fully qualified images to avoid cri-o issues |
|||
|
|||
|
|||
### TODO |
|||
|
|||
Keep building the changelog using *git log charts* checking the tag |
@ -0,0 +1,36 @@ |
|||
apiVersion: v2 |
|||
name: ingress-nginx |
|||
# When the version is modified, make sure the artifacthub.io/changes list is updated |
|||
# Also update CHANGELOG.md |
|||
version: 4.1.4 |
|||
appVersion: 1.2.1 |
|||
home: https://github.com/kubernetes/ingress-nginx |
|||
description: Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer |
|||
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Nginx_logo.svg/500px-Nginx_logo.svg.png |
|||
keywords: |
|||
- ingress |
|||
- nginx |
|||
sources: |
|||
- https://github.com/kubernetes/ingress-nginx |
|||
type: application |
|||
maintainers: |
|||
- name: rikatz |
|||
- name: strongjz |
|||
- name: tao12345666333 |
|||
engine: gotpl |
|||
kubeVersion: ">=1.19.0-0" |
|||
annotations: |
|||
# Use this annotation to indicate that this chart version is a pre-release. |
|||
# https://artifacthub.io/docs/topics/annotations/helm/ |
|||
artifacthub.io/prerelease: "false" |
|||
# List of changes for the release in artifacthub.io |
|||
# https://artifacthub.io/packages/helm/ingress-nginx/ingress-nginx?modal=changelog |
|||
artifacthub.io/changes: | |
|||
- "[8459](https://github.com/kubernetes/ingress-nginx/pull/8459) Update default allowed CORS headers" |
|||
- "[8202](https://github.com/kubernetes/ingress-nginx/pull/8202) disable modsecurity on error page" |
|||
- "[8178](https://github.com/kubernetes/ingress-nginx/pull/8178) Add header Host into mirror annotations" |
|||
- "[8213](https://github.com/kubernetes/ingress-nginx/pull/8213) feat: always set auth cookie" |
|||
- "[8548](https://github.com/kubernetes/ingress-nginx/pull/8548) Implement reporting status classes in metrics" |
|||
- "[8612](https://github.com/kubernetes/ingress-nginx/pull/8612) move so files under /etc/nginx/modules" |
|||
- "[8624](https://github.com/kubernetes/ingress-nginx/pull/8624) Add patch to remove root and alias directives" |
|||
- "[8623](https://github.com/kubernetes/ingress-nginx/pull/8623) Improve path rule" |
@ -0,0 +1,10 @@ |
|||
# See the OWNERS docs: https://github.com/kubernetes/community/blob/master/contributors/guide/owners.md |
|||
|
|||
approvers: |
|||
- ingress-nginx-helm-maintainers |
|||
|
|||
reviewers: |
|||
- ingress-nginx-helm-reviewers |
|||
|
|||
labels: |
|||
- area/helm |
@ -0,0 +1,491 @@ |
|||
# ingress-nginx |
|||
|
|||
[ingress-nginx](https://github.com/kubernetes/ingress-nginx) Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer |
|||
|
|||
   |
|||
|
|||
To use, add `ingressClassName: nginx` spec field or the `kubernetes.io/ingress.class: nginx` annotation to your Ingress resources. |
|||
|
|||
This chart bootstraps an ingress-nginx deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. |
|||
|
|||
## Prerequisites |
|||
|
|||
- Chart version 3.x.x: Kubernetes v1.16+ |
|||
- Chart version 4.x.x and above: Kubernetes v1.19+ |
|||
|
|||
## Get Repo Info |
|||
|
|||
```console |
|||
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx |
|||
helm repo update |
|||
``` |
|||
|
|||
## Install Chart |
|||
|
|||
**Important:** only helm3 is supported |
|||
|
|||
```console |
|||
helm install [RELEASE_NAME] ingress-nginx/ingress-nginx |
|||
``` |
|||
|
|||
The command deploys ingress-nginx on the Kubernetes cluster in the default configuration. |
|||
|
|||
_See [configuration](#configuration) below._ |
|||
|
|||
_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._ |
|||
|
|||
## Uninstall Chart |
|||
|
|||
```console |
|||
helm uninstall [RELEASE_NAME] |
|||
``` |
|||
|
|||
This removes all the Kubernetes components associated with the chart and deletes the release. |
|||
|
|||
_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._ |
|||
|
|||
## Upgrading Chart |
|||
|
|||
```console |
|||
helm upgrade [RELEASE_NAME] [CHART] --install |
|||
``` |
|||
|
|||
_See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documentation._ |
|||
|
|||
### Upgrading With Zero Downtime in Production |
|||
|
|||
By default the ingress-nginx controller has service interruptions whenever it's pods are restarted or redeployed. In order to fix that, see the excellent blog post by Lindsay Landry from Codecademy: [Kubernetes: Nginx and Zero Downtime in Production](https://medium.com/codecademy-engineering/kubernetes-nginx-and-zero-downtime-in-production-2c910c6a5ed8). |
|||
|
|||
### Migrating from stable/nginx-ingress |
|||
|
|||
There are two main ways to migrate a release from `stable/nginx-ingress` to `ingress-nginx/ingress-nginx` chart: |
|||
|
|||
1. For Nginx Ingress controllers used for non-critical services, the easiest method is to [uninstall](#uninstall-chart) the old release and [install](#install-chart) the new one |
|||
1. For critical services in production that require zero-downtime, you will want to: |
|||
1. [Install](#install-chart) a second Ingress controller |
|||
1. Redirect your DNS traffic from the old controller to the new controller |
|||
1. Log traffic from both controllers during this changeover |
|||
1. [Uninstall](#uninstall-chart) the old controller once traffic has fully drained from it |
|||
1. For details on all of these steps see [Upgrading With Zero Downtime in Production](#upgrading-with-zero-downtime-in-production) |
|||
|
|||
Note that there are some different and upgraded configurations between the two charts, described by Rimas Mocevicius from JFrog in the "Upgrading to ingress-nginx Helm chart" section of [Migrating from Helm chart nginx-ingress to ingress-nginx](https://rimusz.net/migrating-to-ingress-nginx). As the `ingress-nginx/ingress-nginx` chart continues to update, you will want to check current differences by running [helm configuration](#configuration) commands on both charts. |
|||
|
|||
## Configuration |
|||
|
|||
See [Customizing the Chart Before Installing](https://helm.sh/docs/intro/using_helm/#customizing-the-chart-before-installing). To see all configurable options with detailed comments, visit the chart's [values.yaml](./values.yaml), or run these configuration commands: |
|||
|
|||
```console |
|||
helm show values ingress-nginx/ingress-nginx |
|||
``` |
|||
|
|||
### PodDisruptionBudget |
|||
|
|||
Note that the PodDisruptionBudget resource will only be defined if the replicaCount is greater than one, |
|||
else it would make it impossible to evacuate a node. See [gh issue #7127](https://github.com/helm/charts/issues/7127) for more info. |
|||
|
|||
### Prometheus Metrics |
|||
|
|||
The Nginx ingress controller can export Prometheus metrics, by setting `controller.metrics.enabled` to `true`. |
|||
|
|||
You can add Prometheus annotations to the metrics service using `controller.metrics.service.annotations`. |
|||
Alternatively, if you use the Prometheus Operator, you can enable ServiceMonitor creation using `controller.metrics.serviceMonitor.enabled`. And set `controller.metrics.serviceMonitor.additionalLabels.release="prometheus"`. "release=prometheus" should match the label configured in the prometheus servicemonitor ( see `kubectl get servicemonitor prometheus-kube-prom-prometheus -oyaml -n prometheus`) |
|||
|
|||
### ingress-nginx nginx\_status page/stats server |
|||
|
|||
Previous versions of this chart had a `controller.stats.*` configuration block, which is now obsolete due to the following changes in nginx ingress controller: |
|||
|
|||
- In [0.16.1](https://github.com/kubernetes/ingress-nginx/blob/main/Changelog.md#0161), the vts (virtual host traffic status) dashboard was removed |
|||
- In [0.23.0](https://github.com/kubernetes/ingress-nginx/blob/main/Changelog.md#0230), the status page at port 18080 is now a unix socket webserver only available at localhost. |
|||
You can use `curl --unix-socket /tmp/nginx-status-server.sock http://localhost/nginx_status` inside the controller container to access it locally, or use the snippet from [nginx-ingress changelog](https://github.com/kubernetes/ingress-nginx/blob/main/Changelog.md#0230) to re-enable the http server |
|||
|
|||
### ExternalDNS Service Configuration |
|||
|
|||
Add an [ExternalDNS](https://github.com/kubernetes-incubator/external-dns) annotation to the LoadBalancer service: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
annotations: |
|||
external-dns.alpha.kubernetes.io/hostname: kubernetes-example.com. |
|||
``` |
|||
|
|||
### AWS L7 ELB with SSL Termination |
|||
|
|||
Annotate the controller as shown in the [nginx-ingress l7 patch](https://github.com/kubernetes/ingress-nginx/blob/ab3a789caae65eec4ad6e3b46b19750b481b6bce/deploy/aws/l7/service-l7.yaml): |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
targetPorts: |
|||
http: http |
|||
https: http |
|||
annotations: |
|||
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:XX-XXXX-X:XXXXXXXXX:certificate/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX |
|||
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http" |
|||
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https" |
|||
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600' |
|||
``` |
|||
|
|||
### AWS route53-mapper |
|||
|
|||
To configure the LoadBalancer service with the [route53-mapper addon](https://github.com/kubernetes/kops/blob/be63d4f1a7a46daaf1c4c482527328236850f111/addons/route53-mapper/README.md), add the `domainName` annotation and `dns` label: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
labels: |
|||
dns: "route53" |
|||
annotations: |
|||
domainName: "kubernetes-example.com" |
|||
``` |
|||
|
|||
### Additional Internal Load Balancer |
|||
|
|||
This setup is useful when you need both external and internal load balancers but don't want to have multiple ingress controllers and multiple ingress objects per application. |
|||
|
|||
By default, the ingress object will point to the external load balancer address, but if correctly configured, you can make use of the internal one if the URL you are looking up resolves to the internal load balancer's URL. |
|||
|
|||
You'll need to set both the following values: |
|||
|
|||
`controller.service.internal.enabled` |
|||
`controller.service.internal.annotations` |
|||
|
|||
If one of them is missing the internal load balancer will not be deployed. Example you may have `controller.service.internal.enabled=true` but no annotations set, in this case no action will be taken. |
|||
|
|||
`controller.service.internal.annotations` varies with the cloud service you're using. |
|||
|
|||
Example for AWS: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
internal: |
|||
enabled: true |
|||
annotations: |
|||
# Create internal ELB |
|||
service.beta.kubernetes.io/aws-load-balancer-internal: "true" |
|||
# Any other annotation can be declared here. |
|||
``` |
|||
|
|||
Example for GCE: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
internal: |
|||
enabled: true |
|||
annotations: |
|||
# Create internal LB. More informations: https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing |
|||
# For GKE versions 1.17 and later |
|||
networking.gke.io/load-balancer-type: "Internal" |
|||
# For earlier versions |
|||
# cloud.google.com/load-balancer-type: "Internal" |
|||
|
|||
# Any other annotation can be declared here. |
|||
``` |
|||
|
|||
Example for Azure: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
annotations: |
|||
# Create internal LB |
|||
service.beta.kubernetes.io/azure-load-balancer-internal: "true" |
|||
# Any other annotation can be declared here. |
|||
``` |
|||
|
|||
Example for Oracle Cloud Infrastructure: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
annotations: |
|||
# Create internal LB |
|||
service.beta.kubernetes.io/oci-load-balancer-internal: "true" |
|||
# Any other annotation can be declared here. |
|||
``` |
|||
|
|||
An use case for this scenario is having a split-view DNS setup where the public zone CNAME records point to the external balancer URL while the private zone CNAME records point to the internal balancer URL. This way, you only need one ingress kubernetes object. |
|||
|
|||
Optionally you can set `controller.service.loadBalancerIP` if you need a static IP for the resulting `LoadBalancer`. |
|||
|
|||
### Ingress Admission Webhooks |
|||
|
|||
With nginx-ingress-controller version 0.25+, the nginx ingress controller pod exposes an endpoint that will integrate with the `validatingwebhookconfiguration` Kubernetes feature to prevent bad ingress from being added to the cluster. |
|||
**This feature is enabled by default since 0.31.0.** |
|||
|
|||
With nginx-ingress-controller in 0.25.* work only with kubernetes 1.14+, 0.26 fix [this issue](https://github.com/kubernetes/ingress-nginx/pull/4521) |
|||
|
|||
### Helm Error When Upgrading: spec.clusterIP: Invalid value: "" |
|||
|
|||
If you are upgrading this chart from a version between 0.31.0 and 1.2.2 then you may get an error like this: |
|||
|
|||
```console |
|||
Error: UPGRADE FAILED: Service "?????-controller" is invalid: spec.clusterIP: Invalid value: "": field is immutable |
|||
``` |
|||
|
|||
Detail of how and why are in [this issue](https://github.com/helm/charts/pull/13646) but to resolve this you can set `xxxx.service.omitClusterIP` to `true` where `xxxx` is the service referenced in the error. |
|||
|
|||
As of version `1.26.0` of this chart, by simply not providing any clusterIP value, `invalid: spec.clusterIP: Invalid value: "": field is immutable` will no longer occur since `clusterIP: ""` will not be rendered. |
|||
|
|||
## Requirements |
|||
|
|||
Kubernetes: `>=1.19.0-0` |
|||
|
|||
## Values |
|||
|
|||
| Key | Type | Default | Description | |
|||
|-----|------|---------|-------------| |
|||
| commonLabels | object | `{}` | | |
|||
| controller.addHeaders | object | `{}` | Will add custom headers before sending response traffic to the client according to: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#add-headers | |
|||
| controller.admissionWebhooks.annotations | object | `{}` | | |
|||
| controller.admissionWebhooks.certificate | string | `"/usr/local/certificates/cert"` | | |
|||
| controller.admissionWebhooks.createSecretJob.resources | object | `{}` | | |
|||
| controller.admissionWebhooks.enabled | bool | `true` | | |
|||
| controller.admissionWebhooks.existingPsp | string | `""` | Use an existing PSP instead of creating one | |
|||
| controller.admissionWebhooks.failurePolicy | string | `"Fail"` | | |
|||
| controller.admissionWebhooks.key | string | `"/usr/local/certificates/key"` | | |
|||
| controller.admissionWebhooks.labels | object | `{}` | Labels to be added to admission webhooks | |
|||
| controller.admissionWebhooks.namespaceSelector | object | `{}` | | |
|||
| controller.admissionWebhooks.objectSelector | object | `{}` | | |
|||
| controller.admissionWebhooks.patch.enabled | bool | `true` | | |
|||
| controller.admissionWebhooks.patch.fsGroup | int | `2000` | | |
|||
| controller.admissionWebhooks.patch.image.digest | string | `"sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660"` | | |
|||
| controller.admissionWebhooks.patch.image.image | string | `"ingress-nginx/kube-webhook-certgen"` | | |
|||
| controller.admissionWebhooks.patch.image.pullPolicy | string | `"IfNotPresent"` | | |
|||
| controller.admissionWebhooks.patch.image.registry | string | `"registry.k8s.io"` | | |
|||
| controller.admissionWebhooks.patch.image.tag | string | `"v1.1.1"` | | |
|||
| controller.admissionWebhooks.patch.labels | object | `{}` | Labels to be added to patch job resources | |
|||
| controller.admissionWebhooks.patch.nodeSelector."kubernetes.io/os" | string | `"linux"` | | |
|||
| controller.admissionWebhooks.patch.podAnnotations | object | `{}` | | |
|||
| controller.admissionWebhooks.patch.priorityClassName | string | `""` | Provide a priority class name to the webhook patching job | |
|||
| controller.admissionWebhooks.patch.runAsUser | int | `2000` | | |
|||
| controller.admissionWebhooks.patch.tolerations | list | `[]` | | |
|||
| controller.admissionWebhooks.patchWebhookJob.resources | object | `{}` | | |
|||
| controller.admissionWebhooks.port | int | `8443` | | |
|||
| controller.admissionWebhooks.service.annotations | object | `{}` | | |
|||
| controller.admissionWebhooks.service.externalIPs | list | `[]` | | |
|||
| controller.admissionWebhooks.service.loadBalancerSourceRanges | list | `[]` | | |
|||
| controller.admissionWebhooks.service.servicePort | int | `443` | | |
|||
| controller.admissionWebhooks.service.type | string | `"ClusterIP"` | | |
|||
| controller.affinity | object | `{}` | Affinity and anti-affinity rules for server scheduling to nodes | |
|||
| controller.allowSnippetAnnotations | bool | `true` | This configuration defines if Ingress Controller should allow users to set their own *-snippet annotations, otherwise this is forbidden / dropped when users add those annotations. Global snippets in ConfigMap are still respected | |
|||
| controller.annotations | object | `{}` | Annotations to be added to the controller Deployment or DaemonSet | |
|||
| controller.autoscaling.behavior | object | `{}` | | |
|||
| controller.autoscaling.enabled | bool | `false` | | |
|||
| controller.autoscaling.maxReplicas | int | `11` | | |
|||
| controller.autoscaling.minReplicas | int | `1` | | |
|||
| controller.autoscaling.targetCPUUtilizationPercentage | int | `50` | | |
|||
| controller.autoscaling.targetMemoryUtilizationPercentage | int | `50` | | |
|||
| controller.autoscalingTemplate | list | `[]` | | |
|||
| controller.config | object | `{}` | Will add custom configuration options to Nginx https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/ | |
|||
| controller.configAnnotations | object | `{}` | Annotations to be added to the controller config configuration configmap. | |
|||
| controller.configMapNamespace | string | `""` | Allows customization of the configmap / nginx-configmap namespace; defaults to $(POD_NAMESPACE) | |
|||
| controller.containerName | string | `"controller"` | Configures the controller container name | |
|||
| controller.containerPort | object | `{"http":80,"https":443}` | Configures the ports that the nginx-controller listens on | |
|||
| controller.customTemplate.configMapKey | string | `""` | | |
|||
| controller.customTemplate.configMapName | string | `""` | | |
|||
| controller.dnsConfig | object | `{}` | Optionally customize the pod dnsConfig. | |
|||
| controller.dnsPolicy | string | `"ClusterFirst"` | Optionally change this to ClusterFirstWithHostNet in case you have 'hostNetwork: true'. By default, while using host network, name resolution uses the host's DNS. If you wish nginx-controller to keep resolving names inside the k8s network, use ClusterFirstWithHostNet. | |
|||
| controller.electionID | string | `"ingress-controller-leader"` | Election ID to use for status update | |
|||
| controller.enableMimalloc | bool | `true` | Enable mimalloc as a drop-in replacement for malloc. | |
|||
| controller.existingPsp | string | `""` | Use an existing PSP instead of creating one | |
|||
| controller.extraArgs | object | `{}` | Additional command line arguments to pass to nginx-ingress-controller E.g. to specify the default SSL certificate you can use | |
|||
| controller.extraContainers | list | `[]` | Additional containers to be added to the controller pod. See https://github.com/lemonldap-ng-controller/lemonldap-ng-controller as example. | |
|||
| controller.extraEnvs | list | `[]` | Additional environment variables to set | |
|||
| controller.extraInitContainers | list | `[]` | Containers, which are run before the app containers are started. | |
|||
| controller.extraModules | list | `[]` | | |
|||
| controller.extraVolumeMounts | list | `[]` | Additional volumeMounts to the controller main container. | |
|||
| controller.extraVolumes | list | `[]` | Additional volumes to the controller pod. | |
|||
| controller.healthCheckHost | string | `""` | Address to bind the health check endpoint. It is better to set this option to the internal node address if the ingress nginx controller is running in the `hostNetwork: true` mode. | |
|||
| controller.healthCheckPath | string | `"/healthz"` | Path of the health check endpoint. All requests received on the port defined by the healthz-port parameter are forwarded internally to this path. | |
|||
| controller.hostNetwork | bool | `false` | Required for use with CNI based kubernetes installations (such as ones set up by kubeadm), since CNI and hostport don't mix yet. Can be deprecated once https://github.com/kubernetes/kubernetes/issues/23920 is merged | |
|||
| controller.hostPort.enabled | bool | `false` | Enable 'hostPort' or not | |
|||
| controller.hostPort.ports.http | int | `80` | 'hostPort' http port | |
|||
| controller.hostPort.ports.https | int | `443` | 'hostPort' https port | |
|||
| controller.hostname | object | `{}` | Optionally customize the pod hostname. | |
|||
| controller.image.allowPrivilegeEscalation | bool | `true` | | |
|||
| controller.image.chroot | bool | `false` | | |
|||
| controller.image.digest | string | `"sha256:5516d103a9c2ecc4f026efbd4b40662ce22dc1f824fb129ed121460aaa5c47f8"` | | |
|||
| controller.image.digestChroot | string | `"sha256:d301551cf62bc3fb75c69fa56f7aa1d9e87b5079333adaf38afe84d9b7439355"` | | |
|||
| controller.image.image | string | `"ingress-nginx/controller"` | | |
|||
| controller.image.pullPolicy | string | `"IfNotPresent"` | | |
|||
| controller.image.registry | string | `"registry.k8s.io"` | | |
|||
| controller.image.runAsUser | int | `101` | | |
|||
| controller.image.tag | string | `"v1.2.1"` | | |
|||
| controller.ingressClass | string | `"nginx"` | For backwards compatibility with ingress.class annotation, use ingressClass. Algorithm is as follows, first ingressClassName is considered, if not present, controller looks for ingress.class annotation | |
|||
| controller.ingressClassByName | bool | `false` | Process IngressClass per name (additionally as per spec.controller). | |
|||
| controller.ingressClassResource.controllerValue | string | `"k8s.io/ingress-nginx"` | Controller-value of the controller that is processing this ingressClass | |
|||
| controller.ingressClassResource.default | bool | `false` | Is this the default ingressClass for the cluster | |
|||
| controller.ingressClassResource.enabled | bool | `true` | Is this ingressClass enabled or not | |
|||
| controller.ingressClassResource.name | string | `"nginx"` | Name of the ingressClass | |
|||
| controller.ingressClassResource.parameters | object | `{}` | Parameters is a link to a custom resource containing additional configuration for the controller. This is optional if the controller does not require extra parameters. | |
|||
| controller.keda.apiVersion | string | `"keda.sh/v1alpha1"` | | |
|||
| controller.keda.behavior | object | `{}` | | |
|||
| controller.keda.cooldownPeriod | int | `300` | | |
|||
| controller.keda.enabled | bool | `false` | | |
|||
| controller.keda.maxReplicas | int | `11` | | |
|||
| controller.keda.minReplicas | int | `1` | | |
|||
| controller.keda.pollingInterval | int | `30` | | |
|||
| controller.keda.restoreToOriginalReplicaCount | bool | `false` | | |
|||
| controller.keda.scaledObject.annotations | object | `{}` | | |
|||
| controller.keda.triggers | list | `[]` | | |
|||
| controller.kind | string | `"Deployment"` | Use a `DaemonSet` or `Deployment` | |
|||
| controller.labels | object | `{}` | Labels to be added to the controller Deployment or DaemonSet and other resources that do not have option to specify labels | |
|||
| controller.lifecycle | object | `{"preStop":{"exec":{"command":["/wait-shutdown"]}}}` | Improve connection draining when ingress controller pod is deleted using a lifecycle hook: With this new hook, we increased the default terminationGracePeriodSeconds from 30 seconds to 300, allowing the draining of connections up to five minutes. If the active connections end before that, the pod will terminate gracefully at that time. To effectively take advantage of this feature, the Configmap feature worker-shutdown-timeout new value is 240s instead of 10s. | |
|||
| controller.livenessProbe.failureThreshold | int | `5` | | |
|||
| controller.livenessProbe.httpGet.path | string | `"/healthz"` | | |
|||
| controller.livenessProbe.httpGet.port | int | `10254` | | |
|||
| controller.livenessProbe.httpGet.scheme | string | `"HTTP"` | | |
|||
| controller.livenessProbe.initialDelaySeconds | int | `10` | | |
|||
| controller.livenessProbe.periodSeconds | int | `10` | | |
|||
| controller.livenessProbe.successThreshold | int | `1` | | |
|||
| controller.livenessProbe.timeoutSeconds | int | `1` | | |
|||
| controller.maxmindLicenseKey | string | `""` | Maxmind license key to download GeoLite2 Databases. | |
|||
| controller.metrics.enabled | bool | `false` | | |
|||
| controller.metrics.port | int | `10254` | | |
|||
| controller.metrics.prometheusRule.additionalLabels | object | `{}` | | |
|||
| controller.metrics.prometheusRule.enabled | bool | `false` | | |
|||
| controller.metrics.prometheusRule.rules | list | `[]` | | |
|||
| controller.metrics.service.annotations | object | `{}` | | |
|||
| controller.metrics.service.externalIPs | list | `[]` | List of IP addresses at which the stats-exporter service is available | |
|||
| controller.metrics.service.loadBalancerSourceRanges | list | `[]` | | |
|||
| controller.metrics.service.servicePort | int | `10254` | | |
|||
| controller.metrics.service.type | string | `"ClusterIP"` | | |
|||
| controller.metrics.serviceMonitor.additionalLabels | object | `{}` | | |
|||
| controller.metrics.serviceMonitor.enabled | bool | `false` | | |
|||
| controller.metrics.serviceMonitor.metricRelabelings | list | `[]` | | |
|||
| controller.metrics.serviceMonitor.namespace | string | `""` | | |
|||
| controller.metrics.serviceMonitor.namespaceSelector | object | `{}` | | |
|||
| controller.metrics.serviceMonitor.relabelings | list | `[]` | | |
|||
| controller.metrics.serviceMonitor.scrapeInterval | string | `"30s"` | | |
|||
| controller.metrics.serviceMonitor.targetLabels | list | `[]` | | |
|||
| controller.minAvailable | int | `1` | | |
|||
| controller.minReadySeconds | int | `0` | `minReadySeconds` to avoid killing pods before we are ready | |
|||
| controller.name | string | `"controller"` | | |
|||
| controller.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node labels for controller pod assignment | |
|||
| controller.podAnnotations | object | `{}` | Annotations to be added to controller pods | |
|||
| controller.podLabels | object | `{}` | Labels to add to the pod container metadata | |
|||
| controller.podSecurityContext | object | `{}` | Security Context policies for controller pods | |
|||
| controller.priorityClassName | string | `""` | | |
|||
| controller.proxySetHeaders | object | `{}` | Will add custom headers before sending traffic to backends according to https://github.com/kubernetes/ingress-nginx/tree/main/docs/examples/customization/custom-headers | |
|||
| controller.publishService | object | `{"enabled":true,"pathOverride":""}` | Allows customization of the source of the IP address or FQDN to report in the ingress status field. By default, it reads the information provided by the service. If disable, the status field reports the IP address of the node or nodes where an ingress controller pod is running. | |
|||
| controller.publishService.enabled | bool | `true` | Enable 'publishService' or not | |
|||
| controller.publishService.pathOverride | string | `""` | Allows overriding of the publish service to bind to Must be <namespace>/<service_name> | |
|||
| controller.readinessProbe.failureThreshold | int | `3` | | |
|||
| controller.readinessProbe.httpGet.path | string | `"/healthz"` | | |
|||
| controller.readinessProbe.httpGet.port | int | `10254` | | |
|||
| controller.readinessProbe.httpGet.scheme | string | `"HTTP"` | | |
|||
| controller.readinessProbe.initialDelaySeconds | int | `10` | | |
|||
| controller.readinessProbe.periodSeconds | int | `10` | | |
|||
| controller.readinessProbe.successThreshold | int | `1` | | |
|||
| controller.readinessProbe.timeoutSeconds | int | `1` | | |
|||
| controller.replicaCount | int | `1` | | |
|||
| controller.reportNodeInternalIp | bool | `false` | Bare-metal considerations via the host network https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#via-the-host-network Ingress status was blank because there is no Service exposing the NGINX Ingress controller in a configuration using the host network, the default --publish-service flag used in standard cloud setups does not apply | |
|||
| controller.resources.requests.cpu | string | `"100m"` | | |
|||
| controller.resources.requests.memory | string | `"90Mi"` | | |
|||
| controller.scope.enabled | bool | `false` | Enable 'scope' or not | |
|||
| controller.scope.namespace | string | `""` | Namespace to limit the controller to; defaults to $(POD_NAMESPACE) | |
|||
| controller.scope.namespaceSelector | string | `""` | When scope.enabled == false, instead of watching all namespaces, we watching namespaces whose labels only match with namespaceSelector. Format like foo=bar. Defaults to empty, means watching all namespaces. | |
|||
| controller.service.annotations | object | `{}` | | |
|||
| controller.service.appProtocol | bool | `true` | If enabled is adding an appProtocol option for Kubernetes service. An appProtocol field replacing annotations that were using for setting a backend protocol. Here is an example for AWS: service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http It allows choosing the protocol for each backend specified in the Kubernetes service. See the following GitHub issue for more details about the purpose: https://github.com/kubernetes/kubernetes/issues/40244 Will be ignored for Kubernetes versions older than 1.20 | |
|||
| controller.service.enableHttp | bool | `true` | | |
|||
| controller.service.enableHttps | bool | `true` | | |
|||
| controller.service.enabled | bool | `true` | | |
|||
| controller.service.external.enabled | bool | `true` | | |
|||
| controller.service.externalIPs | list | `[]` | List of IP addresses at which the controller services are available | |
|||
| controller.service.internal.annotations | object | `{}` | Annotations are mandatory for the load balancer to come up. Varies with the cloud service. | |
|||
| controller.service.internal.enabled | bool | `false` | Enables an additional internal load balancer (besides the external one). | |
|||
| controller.service.internal.loadBalancerSourceRanges | list | `[]` | Restrict access For LoadBalancer service. Defaults to 0.0.0.0/0. | |
|||
| controller.service.ipFamilies | list | `["IPv4"]` | List of IP families (e.g. IPv4, IPv6) assigned to the service. This field is usually assigned automatically based on cluster configuration and the ipFamilyPolicy field. | |
|||
| controller.service.ipFamilyPolicy | string | `"SingleStack"` | Represents the dual-stack-ness requested or required by this Service. Possible values are SingleStack, PreferDualStack or RequireDualStack. The ipFamilies and clusterIPs fields depend on the value of this field. | |
|||
| controller.service.labels | object | `{}` | | |
|||
| controller.service.loadBalancerIP | string | `""` | Used by cloud providers to connect the resulting `LoadBalancer` to a pre-existing static IP according to https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer | |
|||
| controller.service.loadBalancerSourceRanges | list | `[]` | | |
|||
| controller.service.nodePorts.http | string | `""` | | |
|||
| controller.service.nodePorts.https | string | `""` | | |
|||
| controller.service.nodePorts.tcp | object | `{}` | | |
|||
| controller.service.nodePorts.udp | object | `{}` | | |
|||
| controller.service.ports.http | int | `80` | | |
|||
| controller.service.ports.https | int | `443` | | |
|||
| controller.service.targetPorts.http | string | `"http"` | | |
|||
| controller.service.targetPorts.https | string | `"https"` | | |
|||
| controller.service.type | string | `"LoadBalancer"` | | |
|||
| controller.shareProcessNamespace | bool | `false` | | |
|||
| controller.sysctls | object | `{}` | See https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/ for notes on enabling and using sysctls | |
|||
| controller.tcp.annotations | object | `{}` | Annotations to be added to the tcp config configmap | |
|||
| controller.tcp.configMapNamespace | string | `""` | Allows customization of the tcp-services-configmap; defaults to $(POD_NAMESPACE) | |
|||
| controller.terminationGracePeriodSeconds | int | `300` | `terminationGracePeriodSeconds` to avoid killing pods before we are ready | |
|||
| controller.tolerations | list | `[]` | Node tolerations for server scheduling to nodes with taints | |
|||
| controller.topologySpreadConstraints | list | `[]` | Topology spread constraints rely on node labels to identify the topology domain(s) that each Node is in. | |
|||
| controller.udp.annotations | object | `{}` | Annotations to be added to the udp config configmap | |
|||
| controller.udp.configMapNamespace | string | `""` | Allows customization of the udp-services-configmap; defaults to $(POD_NAMESPACE) | |
|||
| controller.updateStrategy | object | `{}` | The update strategy to apply to the Deployment or DaemonSet | |
|||
| controller.watchIngressWithoutClass | bool | `false` | Process Ingress objects without ingressClass annotation/ingressClassName field Overrides value for --watch-ingress-without-class flag of the controller binary Defaults to false | |
|||
| defaultBackend.affinity | object | `{}` | | |
|||
| defaultBackend.autoscaling.annotations | object | `{}` | | |
|||
| defaultBackend.autoscaling.enabled | bool | `false` | | |
|||
| defaultBackend.autoscaling.maxReplicas | int | `2` | | |
|||
| defaultBackend.autoscaling.minReplicas | int | `1` | | |
|||
| defaultBackend.autoscaling.targetCPUUtilizationPercentage | int | `50` | | |
|||
| defaultBackend.autoscaling.targetMemoryUtilizationPercentage | int | `50` | | |
|||
| defaultBackend.containerSecurityContext | object | `{}` | Security Context policies for controller main container. See https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/ for notes on enabling and using sysctls | |
|||
| defaultBackend.enabled | bool | `false` | | |
|||
| defaultBackend.existingPsp | string | `""` | Use an existing PSP instead of creating one | |
|||
| defaultBackend.extraArgs | object | `{}` | | |
|||
| defaultBackend.extraEnvs | list | `[]` | Additional environment variables to set for defaultBackend pods | |
|||
| defaultBackend.extraVolumeMounts | list | `[]` | | |
|||
| defaultBackend.extraVolumes | list | `[]` | | |
|||
| defaultBackend.image.allowPrivilegeEscalation | bool | `false` | | |
|||
| defaultBackend.image.image | string | `"defaultbackend-amd64"` | | |
|||
| defaultBackend.image.pullPolicy | string | `"IfNotPresent"` | | |
|||
| defaultBackend.image.readOnlyRootFilesystem | bool | `true` | | |
|||
| defaultBackend.image.registry | string | `"registry.k8s.io"` | | |
|||
| defaultBackend.image.runAsNonRoot | bool | `true` | | |
|||
| defaultBackend.image.runAsUser | int | `65534` | | |
|||
| defaultBackend.image.tag | string | `"1.5"` | | |
|||
| defaultBackend.labels | object | `{}` | Labels to be added to the default backend resources | |
|||
| defaultBackend.livenessProbe.failureThreshold | int | `3` | | |
|||
| defaultBackend.livenessProbe.initialDelaySeconds | int | `30` | | |
|||
| defaultBackend.livenessProbe.periodSeconds | int | `10` | | |
|||
| defaultBackend.livenessProbe.successThreshold | int | `1` | | |
|||
| defaultBackend.livenessProbe.timeoutSeconds | int | `5` | | |
|||
| defaultBackend.minAvailable | int | `1` | | |
|||
| defaultBackend.name | string | `"defaultbackend"` | | |
|||
| defaultBackend.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node labels for default backend pod assignment | |
|||
| defaultBackend.podAnnotations | object | `{}` | Annotations to be added to default backend pods | |
|||
| defaultBackend.podLabels | object | `{}` | Labels to add to the pod container metadata | |
|||
| defaultBackend.podSecurityContext | object | `{}` | Security Context policies for controller pods See https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/ for notes on enabling and using sysctls | |
|||
| defaultBackend.port | int | `8080` | | |
|||
| defaultBackend.priorityClassName | string | `""` | | |
|||
| defaultBackend.readinessProbe.failureThreshold | int | `6` | | |
|||
| defaultBackend.readinessProbe.initialDelaySeconds | int | `0` | | |
|||
| defaultBackend.readinessProbe.periodSeconds | int | `5` | | |
|||
| defaultBackend.readinessProbe.successThreshold | int | `1` | | |
|||
| defaultBackend.readinessProbe.timeoutSeconds | int | `5` | | |
|||
| defaultBackend.replicaCount | int | `1` | | |
|||
| defaultBackend.resources | object | `{}` | | |
|||
| defaultBackend.service.annotations | object | `{}` | | |
|||
| defaultBackend.service.externalIPs | list | `[]` | List of IP addresses at which the default backend service is available | |
|||
| defaultBackend.service.loadBalancerSourceRanges | list | `[]` | | |
|||
| defaultBackend.service.servicePort | int | `80` | | |
|||
| defaultBackend.service.type | string | `"ClusterIP"` | | |
|||
| defaultBackend.serviceAccount.automountServiceAccountToken | bool | `true` | | |
|||
| defaultBackend.serviceAccount.create | bool | `true` | | |
|||
| defaultBackend.serviceAccount.name | string | `""` | | |
|||
| defaultBackend.tolerations | list | `[]` | Node tolerations for server scheduling to nodes with taints | |
|||
| dhParam | string | `nil` | A base64-encoded Diffie-Hellman parameter. This can be generated with: `openssl dhparam 4096 2> /dev/null | base64` | |
|||
| imagePullSecrets | list | `[]` | Optional array of imagePullSecrets containing private registry credentials | |
|||
| podSecurityPolicy.enabled | bool | `false` | | |
|||
| portNamePrefix | string | `""` | Prefix for TCP and UDP ports names in ingress controller service | |
|||
| rbac.create | bool | `true` | | |
|||
| rbac.scope | bool | `false` | | |
|||
| revisionHistoryLimit | int | `10` | Rollback limit | |
|||
| serviceAccount.annotations | object | `{}` | Annotations for the controller service account | |
|||
| serviceAccount.automountServiceAccountToken | bool | `true` | | |
|||
| serviceAccount.create | bool | `true` | | |
|||
| serviceAccount.name | string | `""` | | |
|||
| tcp | object | `{}` | TCP service key-value pairs | |
|||
| udp | object | `{}` | UDP service key-value pairs | |
|||
|
@ -0,0 +1,235 @@ |
|||
{{ template "chart.header" . }} |
|||
[ingress-nginx](https://github.com/kubernetes/ingress-nginx) Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer |
|||
|
|||
{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }} |
|||
|
|||
To use, add `ingressClassName: nginx` spec field or the `kubernetes.io/ingress.class: nginx` annotation to your Ingress resources. |
|||
|
|||
This chart bootstraps an ingress-nginx deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. |
|||
|
|||
## Prerequisites |
|||
|
|||
- Chart version 3.x.x: Kubernetes v1.16+ |
|||
- Chart version 4.x.x and above: Kubernetes v1.19+ |
|||
|
|||
## Get Repo Info |
|||
|
|||
```console |
|||
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx |
|||
helm repo update |
|||
``` |
|||
|
|||
## Install Chart |
|||
|
|||
**Important:** only helm3 is supported |
|||
|
|||
```console |
|||
helm install [RELEASE_NAME] ingress-nginx/ingress-nginx |
|||
``` |
|||
|
|||
The command deploys ingress-nginx on the Kubernetes cluster in the default configuration. |
|||
|
|||
_See [configuration](#configuration) below._ |
|||
|
|||
_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._ |
|||
|
|||
## Uninstall Chart |
|||
|
|||
```console |
|||
helm uninstall [RELEASE_NAME] |
|||
``` |
|||
|
|||
This removes all the Kubernetes components associated with the chart and deletes the release. |
|||
|
|||
_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._ |
|||
|
|||
## Upgrading Chart |
|||
|
|||
```console |
|||
helm upgrade [RELEASE_NAME] [CHART] --install |
|||
``` |
|||
|
|||
_See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documentation._ |
|||
|
|||
### Upgrading With Zero Downtime in Production |
|||
|
|||
By default the ingress-nginx controller has service interruptions whenever it's pods are restarted or redeployed. In order to fix that, see the excellent blog post by Lindsay Landry from Codecademy: [Kubernetes: Nginx and Zero Downtime in Production](https://medium.com/codecademy-engineering/kubernetes-nginx-and-zero-downtime-in-production-2c910c6a5ed8). |
|||
|
|||
### Migrating from stable/nginx-ingress |
|||
|
|||
There are two main ways to migrate a release from `stable/nginx-ingress` to `ingress-nginx/ingress-nginx` chart: |
|||
|
|||
1. For Nginx Ingress controllers used for non-critical services, the easiest method is to [uninstall](#uninstall-chart) the old release and [install](#install-chart) the new one |
|||
1. For critical services in production that require zero-downtime, you will want to: |
|||
1. [Install](#install-chart) a second Ingress controller |
|||
1. Redirect your DNS traffic from the old controller to the new controller |
|||
1. Log traffic from both controllers during this changeover |
|||
1. [Uninstall](#uninstall-chart) the old controller once traffic has fully drained from it |
|||
1. For details on all of these steps see [Upgrading With Zero Downtime in Production](#upgrading-with-zero-downtime-in-production) |
|||
|
|||
Note that there are some different and upgraded configurations between the two charts, described by Rimas Mocevicius from JFrog in the "Upgrading to ingress-nginx Helm chart" section of [Migrating from Helm chart nginx-ingress to ingress-nginx](https://rimusz.net/migrating-to-ingress-nginx). As the `ingress-nginx/ingress-nginx` chart continues to update, you will want to check current differences by running [helm configuration](#configuration) commands on both charts. |
|||
|
|||
## Configuration |
|||
|
|||
See [Customizing the Chart Before Installing](https://helm.sh/docs/intro/using_helm/#customizing-the-chart-before-installing). To see all configurable options with detailed comments, visit the chart's [values.yaml](./values.yaml), or run these configuration commands: |
|||
|
|||
```console |
|||
helm show values ingress-nginx/ingress-nginx |
|||
``` |
|||
|
|||
### PodDisruptionBudget |
|||
|
|||
Note that the PodDisruptionBudget resource will only be defined if the replicaCount is greater than one, |
|||
else it would make it impossible to evacuate a node. See [gh issue #7127](https://github.com/helm/charts/issues/7127) for more info. |
|||
|
|||
### Prometheus Metrics |
|||
|
|||
The Nginx ingress controller can export Prometheus metrics, by setting `controller.metrics.enabled` to `true`. |
|||
|
|||
You can add Prometheus annotations to the metrics service using `controller.metrics.service.annotations`. |
|||
Alternatively, if you use the Prometheus Operator, you can enable ServiceMonitor creation using `controller.metrics.serviceMonitor.enabled`. And set `controller.metrics.serviceMonitor.additionalLabels.release="prometheus"`. "release=prometheus" should match the label configured in the prometheus servicemonitor ( see `kubectl get servicemonitor prometheus-kube-prom-prometheus -oyaml -n prometheus`) |
|||
|
|||
### ingress-nginx nginx\_status page/stats server |
|||
|
|||
Previous versions of this chart had a `controller.stats.*` configuration block, which is now obsolete due to the following changes in nginx ingress controller: |
|||
|
|||
- In [0.16.1](https://github.com/kubernetes/ingress-nginx/blob/main/Changelog.md#0161), the vts (virtual host traffic status) dashboard was removed |
|||
- In [0.23.0](https://github.com/kubernetes/ingress-nginx/blob/main/Changelog.md#0230), the status page at port 18080 is now a unix socket webserver only available at localhost. |
|||
You can use `curl --unix-socket /tmp/nginx-status-server.sock http://localhost/nginx_status` inside the controller container to access it locally, or use the snippet from [nginx-ingress changelog](https://github.com/kubernetes/ingress-nginx/blob/main/Changelog.md#0230) to re-enable the http server |
|||
|
|||
### ExternalDNS Service Configuration |
|||
|
|||
Add an [ExternalDNS](https://github.com/kubernetes-incubator/external-dns) annotation to the LoadBalancer service: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
annotations: |
|||
external-dns.alpha.kubernetes.io/hostname: kubernetes-example.com. |
|||
``` |
|||
|
|||
### AWS L7 ELB with SSL Termination |
|||
|
|||
Annotate the controller as shown in the [nginx-ingress l7 patch](https://github.com/kubernetes/ingress-nginx/blob/ab3a789caae65eec4ad6e3b46b19750b481b6bce/deploy/aws/l7/service-l7.yaml): |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
targetPorts: |
|||
http: http |
|||
https: http |
|||
annotations: |
|||
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:XX-XXXX-X:XXXXXXXXX:certificate/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX |
|||
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http" |
|||
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https" |
|||
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600' |
|||
``` |
|||
|
|||
### AWS route53-mapper |
|||
|
|||
To configure the LoadBalancer service with the [route53-mapper addon](https://github.com/kubernetes/kops/blob/be63d4f1a7a46daaf1c4c482527328236850f111/addons/route53-mapper/README.md), add the `domainName` annotation and `dns` label: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
labels: |
|||
dns: "route53" |
|||
annotations: |
|||
domainName: "kubernetes-example.com" |
|||
``` |
|||
|
|||
### Additional Internal Load Balancer |
|||
|
|||
This setup is useful when you need both external and internal load balancers but don't want to have multiple ingress controllers and multiple ingress objects per application. |
|||
|
|||
By default, the ingress object will point to the external load balancer address, but if correctly configured, you can make use of the internal one if the URL you are looking up resolves to the internal load balancer's URL. |
|||
|
|||
You'll need to set both the following values: |
|||
|
|||
`controller.service.internal.enabled` |
|||
`controller.service.internal.annotations` |
|||
|
|||
If one of them is missing the internal load balancer will not be deployed. Example you may have `controller.service.internal.enabled=true` but no annotations set, in this case no action will be taken. |
|||
|
|||
`controller.service.internal.annotations` varies with the cloud service you're using. |
|||
|
|||
Example for AWS: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
internal: |
|||
enabled: true |
|||
annotations: |
|||
# Create internal ELB |
|||
service.beta.kubernetes.io/aws-load-balancer-internal: "true" |
|||
# Any other annotation can be declared here. |
|||
``` |
|||
|
|||
Example for GCE: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
internal: |
|||
enabled: true |
|||
annotations: |
|||
# Create internal LB. More informations: https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing |
|||
# For GKE versions 1.17 and later |
|||
networking.gke.io/load-balancer-type: "Internal" |
|||
# For earlier versions |
|||
# cloud.google.com/load-balancer-type: "Internal" |
|||
|
|||
# Any other annotation can be declared here. |
|||
``` |
|||
|
|||
Example for Azure: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
annotations: |
|||
# Create internal LB |
|||
service.beta.kubernetes.io/azure-load-balancer-internal: "true" |
|||
# Any other annotation can be declared here. |
|||
``` |
|||
|
|||
Example for Oracle Cloud Infrastructure: |
|||
|
|||
```yaml |
|||
controller: |
|||
service: |
|||
annotations: |
|||
# Create internal LB |
|||
service.beta.kubernetes.io/oci-load-balancer-internal: "true" |
|||
# Any other annotation can be declared here. |
|||
``` |
|||
|
|||
An use case for this scenario is having a split-view DNS setup where the public zone CNAME records point to the external balancer URL while the private zone CNAME records point to the internal balancer URL. This way, you only need one ingress kubernetes object. |
|||
|
|||
Optionally you can set `controller.service.loadBalancerIP` if you need a static IP for the resulting `LoadBalancer`. |
|||
|
|||
### Ingress Admission Webhooks |
|||
|
|||
With nginx-ingress-controller version 0.25+, the nginx ingress controller pod exposes an endpoint that will integrate with the `validatingwebhookconfiguration` Kubernetes feature to prevent bad ingress from being added to the cluster. |
|||
**This feature is enabled by default since 0.31.0.** |
|||
|
|||
With nginx-ingress-controller in 0.25.* work only with kubernetes 1.14+, 0.26 fix [this issue](https://github.com/kubernetes/ingress-nginx/pull/4521) |
|||
|
|||
### Helm Error When Upgrading: spec.clusterIP: Invalid value: "" |
|||
|
|||
If you are upgrading this chart from a version between 0.31.0 and 1.2.2 then you may get an error like this: |
|||
|
|||
```console |
|||
Error: UPGRADE FAILED: Service "?????-controller" is invalid: spec.clusterIP: Invalid value: "": field is immutable |
|||
``` |
|||
|
|||
Detail of how and why are in [this issue](https://github.com/helm/charts/pull/13646) but to resolve this you can set `xxxx.service.omitClusterIP` to `true` where `xxxx` is the service referenced in the error. |
|||
|
|||
As of version `1.26.0` of this chart, by simply not providing any clusterIP value, `invalid: spec.clusterIP: Invalid value: "": field is immutable` will no longer occur since `clusterIP: ""` will not be rendered. |
|||
|
|||
{{ template "chart.requirementsSection" . }} |
|||
|
|||
{{ template "chart.valuesSection" . }} |
|||
|
|||
{{ template "helm-docs.versionFooter" . }} |
@ -0,0 +1,7 @@ |
|||
controller: |
|||
watchIngressWithoutClass: true |
|||
ingressClassResource: |
|||
name: custom-nginx |
|||
enabled: true |
|||
default: true |
|||
controllerValue: "k8s.io/custom-nginx" |
@ -0,0 +1,14 @@ |
|||
controller: |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
kind: DaemonSet |
|||
allowSnippetAnnotations: false |
|||
admissionWebhooks: |
|||
enabled: false |
|||
service: |
|||
type: ClusterIP |
|||
|
|||
config: |
|||
use-proxy-protocol: "true" |
@ -0,0 +1,22 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
|
|||
service: |
|||
type: NodePort |
|||
nodePorts: |
|||
tcp: |
|||
9000: 30090 |
|||
udp: |
|||
9001: 30091 |
|||
|
|||
tcp: |
|||
9000: "default/test:8080" |
|||
|
|||
udp: |
|||
9001: "default/test:8080" |
@ -0,0 +1,10 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
service: |
|||
type: ClusterIP |
|||
extraModules: |
|||
- name: opentelemetry |
|||
image: busybox |
@ -0,0 +1,14 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
addHeaders: |
|||
X-Frame-Options: deny |
|||
proxySetHeaders: |
|||
X-Forwarded-Proto: https |
|||
service: |
|||
type: ClusterIP |
@ -0,0 +1,14 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
service: |
|||
type: ClusterIP |
|||
internal: |
|||
enabled: true |
|||
annotations: |
|||
service.beta.kubernetes.io/aws-load-balancer-internal: "true" |
@ -0,0 +1,10 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
service: |
|||
type: NodePort |
@ -0,0 +1,17 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
metrics: |
|||
enabled: true |
|||
service: |
|||
type: ClusterIP |
|||
podAnnotations: |
|||
prometheus.io/path: /metrics |
|||
prometheus.io/port: "10254" |
|||
prometheus.io/scheme: http |
|||
prometheus.io/scrape: "true" |
@ -0,0 +1,20 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
service: |
|||
type: ClusterIP |
|||
tcp: |
|||
configMapNamespace: default |
|||
udp: |
|||
configMapNamespace: default |
|||
|
|||
tcp: |
|||
9000: "default/test:8080" |
|||
|
|||
udp: |
|||
9001: "default/test:8080" |
@ -0,0 +1,18 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
service: |
|||
type: ClusterIP |
|||
|
|||
tcp: |
|||
9000: "default/test:8080" |
|||
|
|||
udp: |
|||
9001: "default/test:8080" |
|||
|
|||
portNamePrefix: "port" |
@ -0,0 +1,16 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
service: |
|||
type: ClusterIP |
|||
|
|||
tcp: |
|||
9000: "default/test:8080" |
|||
|
|||
udp: |
|||
9001: "default/test:8080" |
@ -0,0 +1,14 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
service: |
|||
type: ClusterIP |
|||
|
|||
tcp: |
|||
9000: "default/test:8080" |
|||
9001: "default/test:8080" |
@ -0,0 +1,10 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
service: |
|||
type: ClusterIP |
@ -0,0 +1,12 @@ |
|||
controller: |
|||
kind: DaemonSet |
|||
image: |
|||
repository: ingress-controller/controller |
|||
tag: 1.0.0-dev |
|||
digest: null |
|||
admissionWebhooks: |
|||
enabled: false |
|||
metrics: |
|||
enabled: true |
|||
service: |
|||
type: ClusterIP |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue