diff --git a/.github/workflows/lint-test-chart.yaml b/.github/workflows/lint-test-chart.yaml index eb22146ebf..f0bfda6a75 100644 --- a/.github/workflows/lint-test-chart.yaml +++ b/.github/workflows/lint-test-chart.yaml @@ -18,6 +18,27 @@ jobs: with: fetch-depth: 0 + - name: Install Helm Docs + uses: action-stars/install-tool-from-github-release@58e2dd20166c0eb19ab9ac4d0966c930a647ee69 # v0.2.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + owner: norwoodj + repository: helm-docs + arch_amd64: x86_64 + os_linux: Linux + check_command: helm-docs --version + version: latest + + - name: Run Helm Docs check + run: | + set -euo pipefail + helm-docs + if [[ -n "$(git status --porcelain --untracked-files=no)" ]] + then + echo "Documentation not up to date. Please run helm-docs and commit changes!" >&2 + exit 1 + fi + - name: Install Artifact Hub CLI uses: action-stars/install-tool-from-github-release@58e2dd20166c0eb19ab9ac4d0966c930a647ee69 # v0.2.0 with: diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 3aa899a645..f1b8fb8681 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -1,6 +1,20 @@ -# ExternalDNS +# external-dns -[ExternalDNS](https://github.com/kubernetes-sigs/external-dns/) synchronizes exposed Kubernetes Services and Ingresses with DNS providers. +![Version: 1.13.1](https://img.shields.io/badge/Version-1.13.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.13.6](https://img.shields.io/badge/AppVersion-0.13.6-informational?style=flat-square) + +ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with DNS providers. + +**Homepage:** + +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| stevehipwell | | | + +## Source Code + +* ## Installing the Chart @@ -13,87 +27,28 @@ helm repo add external-dns https://kubernetes-sigs.github.io/external-dns/ After you've installed the repo you can install the chart. ```shell -helm upgrade --install external-dns external-dns/external-dns +helm upgrade --install external-dns external-dns/external-dns --version 1.13.1 ``` -## Configuration - -The following table lists the configurable parameters of the _ExternalDNS_ chart and their default values. - -| Parameter | Description | Default | -|-----------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------| -| `image.repository` | Image repository. | `registry.k8s.io/external-dns/external-dns` | -| `image.tag` | Image tag, will override the default tag derived from the chart app version. | `""` | -| `image.pullPolicy` | Image pull policy. | `IfNotPresent` | -| `imagePullSecrets` | Image pull secrets. | `[]` | -| `nameOverride` | Override the `name` of the chart. | `""` | -| `fullnameOverride` | Override the `fullname` of the chart. | `""` | -| `serviceAccount.create` | If `true`, create a new `serviceaccount`. | `true` | -| `serviceAccount.annotations` | Annotations to add to the service account. | `{}` | -| `serviceAccount.labels` | Labels to add to the service account. | `{}` | -| `serviceAccount.name` | Service account to be used. If not set and `serviceAccount.create` is `true`, a name is generated using the full name template. | `""` | -| `serviceAccount.automountServiceAccountToken` | Opt out of the [service account token automounting feature](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the service account | `null` | -| `rbac.create` | If `true`, create the RBAC resources. | `true` | -| `rbac.additionalPermissions` | Additional permissions to be added to the cluster role. | `{}` | -| `initContainers` | Add init containers to the pod. | `[]` | -| `deploymentAnnotations` | Annotations to add to the Deployment. | `{}` | -| `podLabels` | Labels to add to the pod. | `{}` | -| `podAnnotations` | Annotations to add to the pod. | `{}` | -| `podSecurityContext` | Security context for the pod, this supports the full [PodSecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core) API. | _see values.yaml_ | -| `shareProcessNamespace` | If `true` enable [Process Namespace Sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) | `false` | -| `securityContext` | Security context for the _external-dns_ container, this supports the full [SecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#securitycontext-v1-core) API. | _see values.yaml_ | -| `priorityClassName` | Priority class name to use for the pod. | `""` | -| `terminationGracePeriodSeconds` | Termination grace period for the pod. | `null` | -| `serviceMonitor.enabled` | If `true`, create a _Prometheus_ service monitor. | `false` | -| `serviceMonitor.namespace` | Forced namespace for ServiceMonitor. | `null` | -| `serviceMonitor.annotations` | Annotations to be set on the ServiceMonitor. | `{}` | -| `serviceMonitor.additionalLabels` | Additional labels to be set on the ServiceMonitor. | `{}` | -| `serviceMonitor.interval` | _Prometheus_ scrape frequency. | `null` | -| `serviceMonitor.scrapeTimeout` | _Prometheus_ scrape timeout. | `null` | -| `serviceMonitor.scheme` | _Prometheus_ scrape scheme. | `null` | -| `serviceMonitor.tlsConfig` | _Prometheus_ scrape tlsConfig. | `{}` | -| `serviceMonitor.metricRelabelings` | _Prometheus_ scrape metricRelabelings. | `[]` | -| `serviceMonitor.relabelings` | _Prometheus_ scrape relabelings. | `[]` | -| `serviceMonitor.targetLabels` | _Prometheus_ scrape targetLabels. | `[]` | -| `env` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the _external-dns_ container, this supports the full [EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#envvar-v1-core) API including secrets and configmaps. | `[]` | -| `livenessProbe` | [Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) for the _external-dns_ container, this supports the full [Probe](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#probe-v1-core) API. | See _values.yaml_ | -| `readinessProbe` | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) for the _external-dns_ container, this supports the full [Probe](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#probe-v1-core) API. | See _values.yaml_ | -| `service.annotations` | Annotations to add to the service. | `{}` | -| `service.port` | Port to expose via the service. | `7979` | -| `extraVolumes` | Additional volumes for the pod, this supports the full [VolumeDevice](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#volumedevice-v1-core) API. | `[]` | -| `extraVolumeMounts` | Additional volume mounts for the _external-dns_ container, this supports the full [VolumeMount](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#volumemount-v1-core) API. | `[]` | -| `resources` | Resource requests and limits for the _external-dns_ container, this supports the full [ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#resourcerequirements-v1-core) API. | `{}` | -| `nodeSelector` | Node labels for pod assignment. | `{}` | -| `tolerations` | Tolerations for pod assignment, this supports the full [Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#toleration-v1-core) API. | `[]` | -| `affinity` | Affinity settings for pod assignment, this supports the full [Affinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#affinity-v1-core) API. | `{}` | -| `topologySpreadConstraints` | TopologySpreadConstraint settings for pod assignment, this supports the full [TopologySpreadConstraints](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#topologyspreadconstraint-v1-core) API. | `[]` | -| `logLevel` | Verbosity of the logs, available values are: `panic`, `debug`, `info`, `warning`, `error`, `fatal`. | `info` | -| `logFormat` | Formats of the logs, available values are: `text`, `json`. | `text` | -| `interval` | The interval for DNS updates. | `1m` | -| `triggerLoopOnEvent` | When enabled, triggers run loop on create/update/delete events in addition of regular interval. | `false` | -| `namespaced` | When enabled, external-dns runs on namespace scope. Additionally, Role and Rolebinding will be namespaced, too. | `false` | -| `sources` | K8s resources type to be observed for new DNS entries. | See _values.yaml_ | -| `policy` | How DNS records are synchronized between sources and providers, available values are: `sync`, `upsert-only`. | `upsert-only` | -| `registry` | Registry Type, available types are: `txt`, `noop`. | `txt` | -| `txtOwnerId` | TXT registry identifier. | `""` | -| `txtPrefix` | Prefix to create a TXT record with a name following the pattern `prefix.`. | `""` | -| `domainFilters` | Limit possible target zones by domain suffixes. | `[]` | -| `provider` | DNS provider where the DNS records will be created, for the available providers and how to configure them see the [README](https://github.com/kubernetes-sigs/external-dns#deploying-to-a-cluster) (this can be templated). | `aws` | -| `extraArgs` | Extra arguments to pass to the _external-dns_ container, these are needed for provider specific arguments (these can be templated). | `[]` | -| `deploymentStrategy` | .spec.strategy of the external-dns Deployment. Defaults to 'Recreate' since multiple external-dns pods may conflict with each other. | `{type: Recreate}` | -| `secretConfiguration.enabled` | Enable additional secret configuration. | `false` | -| `secretConfiguration.mountPath` | Mount path of secret configuration secret (this can be templated). | `""` | -| `secretConfiguration.data` | Secret configuration secret data. Could be used to store DNS provider credentials. | `{}` | -| `secretConfiguration.subPath` | Sub-path of secret configuration secret (this can be templated). | `""` | -| `automountServiceAccountToken` | Opt out of the [service account token automounting feature](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the pod | `null` | -| `revisionHistoryLimit` | Optional field that specifies the number of old ReplicaSets to retain to allow rollback with the Deployment. | `null` | - -## Namespaced scoped installation +## Providers + +Configuring the _ExternalDNS_ provider should be done via the `provider.name` value with provider specific configuration being set via the +`provider..` values, where supported, and the `extraArgs` value. For legacy support `provider` can be set to the name of the +provider with all additional configuration being set via the `extraArgs` value. + +### Providers with Specific Configuration Support + +| Provider | Supported | +|------------------------|------------| +| `webhook` | ❌ | + +## Namespaced Scoped Installation external-dns supports running on a namespaced only scope, too. If `namespaced=true` is defined, the helm chart will setup `Roles` and `RoleBindings` instead `ClusterRoles` and `ClusterRoleBindings`. -### Limited supported +### Limited Supported + Not all sources are supported in namespaced scope, since some sources depends on cluster-wide resources. For example: Source `node` isn't supported, since `kind: Node` has scope `Cluster`. Sources like `istio-virtualservice` only work, if all resources like `Gateway` and `VirtualService` are present in the same @@ -101,12 +56,12 @@ namespaces as `external-dns`. The annotation `external-dns.alpha.kubernetes.io/endpoints-type: NodeExternalIP` is not supported. -If `namespaced` is set to `true`, please ensure that `sources` my only contains supported sources (Default: `service,ingress`. +If `namespaced` is set to `true`, please ensure that `sources` my only contains supported sources (Default: `service,ingress`). -### Support matrix +### Support Matrix -| Source | Supported | Infos | -|------------------------|-----------|------------------------| +| Source | Supported | Infos | +|------------------------|------------|------------------------| | `ingress` | ✅ | | | `istio-gateway` | ✅ | | | `istio-virtualservice` | ✅ | | @@ -116,6 +71,84 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | `skipper-routegroup` | ✅ | | | `gloo-proxy` | ✅ | | | `contour-httpproxy` | ✅ | | -| `service` | ⚠️️ | NodePort not supported | +| `service` | ⚠️️ | NodePort not supported | | `node` | ❌ | | | `pod` | ❌ | | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| affinity | object | `{}` | Affinity settings for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels. | +| automountServiceAccountToken | bool | `nil` | Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `Pod`. | +| commonLabels | object | `{}` | Labels to add to all chart resources. | +| deploymentAnnotations | object | `{}` | Annotations to add to the `Deployment`. | +| deploymentStrategy | object | `{"type":"Recreate"}` | [Deployment Strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy). | +| dnsPolicy | string | `nil` | [DNS policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy) for the pod, if not set the default will be used. | +| domainFilters | list | `[]` | | +| env | list | `[]` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `external-dns` container. | +| extraArgs | list | `[]` | Extra arguments to provide to _ExternalDNS_. | +| extraVolumeMounts | list | `[]` | Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `external-dns` container. | +| extraVolumes | list | `[]` | Extra [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the `Pod`. | +| fullnameOverride | string | `nil` | Override the full name of the chart. | +| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy for the `external-dns` container. | +| image.repository | string | `"registry.k8s.io/external-dns/external-dns"` | Image repository for the `external-dns` container. | +| image.tag | string | `nil` | Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set. | +| imagePullSecrets | list | `[]` | Image pull secrets. | +| initContainers | list | `[]` | [Init containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) to add to the `Pod` definition. | +| interval | string | `"1m"` | Interval for DNS updates. | +| livenessProbe | object | See _values.yaml_ | [Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. | +| logFormat | string | `"text"` | Log format. | +| logLevel | string | `"info"` | Log level. | +| nameOverride | string | `nil` | Override the name of the chart. | +| namespaced | bool | `false` | if `true`, _ExternalDNS_ will run in a namespaced scope (`Role`` and `Rolebinding`` will be namespaced too). | +| nodeSelector | object | `{}` | Node labels to match for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). | +| podAnnotations | object | `{}` | Annotations to add to the `Pod`. | +| podLabels | object | `{}` | Labels to add to the `Pod`. | +| podSecurityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core), this supports full customisation. | +| policy | string | `"upsert-only"` | How DNS records are synchronized between sources and providers; available values are `sync` & `upsert-only`. | +| priorityClassName | string | `nil` | Priority class name for the `Pod`. | +| provider.name | string | `"aws"` | _ExternalDNS_ provider name; for the available providers and how to configure them see the [README](https://github.com/kubernetes-sigs/external-dns#deploying-to-a-cluster). | +| rbac.additionalPermissions | list | `[]` | Additional rules to add to the `ClusterRole`. | +| rbac.create | bool | `true` | If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API. | +| readinessProbe | object | See _values.yaml_ | Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. | +| registry | string | `"txt"` | Specify the registry for storing ownership and labels. Valid values are `txt`, `aws-sd`, `dynamodb` & `noop`. | +| resources | object | `{}` | [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `external-dns` container. | +| revisionHistoryLimit | int | `nil` | Specify the number of old `ReplicaSets` to retain to allow rollback of the `Deployment``. | +| secretConfiguration.data | object | `{}` | `Secret` data. | +| secretConfiguration.enabled | bool | `false` | If `true`, create a `Secret` to store sensitive provider configuration. | +| secretConfiguration.mountPath | string | `nil` | Mount path for the `Secret`, this can be templated. | +| secretConfiguration.subPath | string | `nil` | Sub-path for mounting the `Secret`, this can be templated. | +| securityContext | object | See _values.yaml_ | [Security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#securitycontext-v1-core) for the `external-dns` container. | +| service.annotations | object | `{}` | Service annotations. | +| service.port | int | `7979` | Service HTTP port. | +| serviceAccount.annotations | object | `{}` | Annotations to add to the service account. | +| serviceAccount.automountServiceAccountToken | string | `nil` | Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `ServiceAccount`. | +| serviceAccount.create | bool | `true` | If `true`, create a new `ServiceAccount`. | +| serviceAccount.labels | object | `{}` | Labels to add to the service account. | +| serviceAccount.name | string | `nil` | If this is set and `serviceAccount.create` is `true` this will be used for the created `ServiceAccount` name, if set and `serviceAccount.create` is `false` then this will define an existing `ServiceAccount` to use. | +| serviceMonitor.additionalLabels | object | `{}` | Additional labels for the `ServiceMonitor`. | +| serviceMonitor.annotations | object | `{}` | Annotations to add to the `ServiceMonitor`. | +| serviceMonitor.bearerTokenFile | string | `nil` | Provide a bearer token file for the `ServiceMonitor`. | +| serviceMonitor.enabled | bool | `false` | If `true`, create a `ServiceMonitor` resource to support the _Prometheus Operator_. | +| serviceMonitor.interval | string | `nil` | If set override the _Prometheus_ default interval. | +| serviceMonitor.metricRelabelings | list | `[]` | [Metric relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs) to apply to samples before ingestion. | +| serviceMonitor.namespace | string | `nil` | If set create the `ServiceMonitor` in an alternate namespace. | +| serviceMonitor.relabelings | list | `[]` | [Relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) to apply to samples before ingestion. | +| serviceMonitor.scheme | string | `nil` | If set overrides the _Prometheus_ default scheme. | +| serviceMonitor.scrapeTimeout | string | `nil` | If set override the _Prometheus_ default scrape timeout. | +| serviceMonitor.targetLabels | list | `[]` | Provide target labels for the `ServiceMonitor`. | +| serviceMonitor.tlsConfig | object | `{}` | Configure the `ServiceMonitor` [TLS config](https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#tlsconfig). | +| shareProcessNamespace | bool | `false` | If `true`, the `Pod` will have [process namespace sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) enabled. | +| sources | list | `["service","ingress"]` | _Kubernetes_ resources to monitor for DNS entries. | +| terminationGracePeriodSeconds | int | `nil` | Termination grace period for the `Pod` in seconds. | +| tolerations | list | `[]` | Node taints which will be tolerated for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). | +| topologySpreadConstraints | list | `[]` | Topology spread constraints for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided one will be created from the pod selector labels. | +| triggerLoopOnEvent | bool | `false` | If `true`, triggers run loop on create/update/delete events in addition of regular interval. | +| txtOwnerId | string | `nil` | Specify an identifier for this instance of _ExternalDNS_ wWhen using a registry other than `noop`. | +| txtPrefix | string | `nil` | Specify a prefix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtSuffix`. | +| txtSuffix | string | `nil` | Specify a suffix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtPrefix`. | + +---------------------------------------------- + +Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/). diff --git a/charts/external-dns/README.md.gotmpl b/charts/external-dns/README.md.gotmpl new file mode 100644 index 0000000000..40dd65f125 --- /dev/null +++ b/charts/external-dns/README.md.gotmpl @@ -0,0 +1,80 @@ +{{ template "chart.header" . }} +{{ template "chart.deprecationWarning" . }} + +{{ template "chart.badgesSection" . }} + +{{ template "chart.description" . }} + +{{ template "chart.homepageLine" . }} + +{{ template "chart.maintainersSection" . }} + +{{ template "chart.sourcesSection" . }} + +## Installing the Chart + +Before you can install the chart you will need to add the `external-dns` repo to [Helm](https://helm.sh/). + +```shell +helm repo add external-dns https://kubernetes-sigs.github.io/external-dns/ +``` + +After you've installed the repo you can install the chart. + +```shell +helm upgrade --install {{ template "chart.name" . }} external-dns/{{ template "chart.name" . }} --version {{ template "chart.version" . }} +``` + +## Providers + +Configuring the _ExternalDNS_ provider should be done via the `provider.name` value with provider specific configuration being set via the +`provider..` values, where supported, and the `extraArgs` value. For legacy support `provider` can be set to the name of the +provider with all additional configuration being set via the `extraArgs` value. + +### Providers with Specific Configuration Support + +| Provider | Supported | +|------------------------|------------| +| `webhook` | ❌ | + +## Namespaced Scoped Installation + +external-dns supports running on a namespaced only scope, too. +If `namespaced=true` is defined, the helm chart will setup `Roles` and `RoleBindings` instead `ClusterRoles` and `ClusterRoleBindings`. + +### Limited Supported + +Not all sources are supported in namespaced scope, since some sources depends on cluster-wide resources. +For example: Source `node` isn't supported, since `kind: Node` has scope `Cluster`. +Sources like `istio-virtualservice` only work, if all resources like `Gateway` and `VirtualService` are present in the same +namespaces as `external-dns`. + +The annotation `external-dns.alpha.kubernetes.io/endpoints-type: NodeExternalIP` is not supported. + +If `namespaced` is set to `true`, please ensure that `sources` my only contains supported sources (Default: `service,ingress`). + +### Support Matrix + +| Source | Supported | Infos | +|------------------------|------------|------------------------| +| `ingress` | ✅ | | +| `istio-gateway` | ✅ | | +| `istio-virtualservice` | ✅ | | +| `crd` | ✅ | | +| `kong-tcpingress` | ✅ | | +| `openshift-route` | ✅ | | +| `skipper-routegroup` | ✅ | | +| `gloo-proxy` | ✅ | | +| `contour-httpproxy` | ✅ | | +| `service` | ⚠️️ | NodePort not supported | +| `node` | ❌ | | +| `pod` | ❌ | | + + +{{ template "chart.requirementsSection" . }} + +{{ template "chart.valuesSection" . }} + +---------------------------------------------- + +Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs/). diff --git a/charts/external-dns/ci/ci-values.yaml b/charts/external-dns/ci/ci-values.yaml index 6c1735cbac..4d278e94be 100644 --- a/charts/external-dns/ci/ci-values.yaml +++ b/charts/external-dns/ci/ci-values.yaml @@ -1 +1,2 @@ -provider: inmemory +provider: + name: inmemory diff --git a/charts/external-dns/templates/_helpers.tpl b/charts/external-dns/templates/_helpers.tpl index 4f70ccdd8c..a24eec53f6 100644 --- a/charts/external-dns/templates/_helpers.tpl +++ b/charts/external-dns/templates/_helpers.tpl @@ -70,3 +70,14 @@ The image to use {{- define "external-dns.image" -}} {{- printf "%s:%s" .Values.image.repository (default (printf "v%s" .Chart.AppVersion) .Values.image.tag) }} {{- end }} + +{{/* +Provider name, Keeps backward compatibility on provider +*/}} +{{- define "external-dns.providerName" -}} +{{- if eq (typeOf .Values.provider) "string" }} +{{- .Values.provider }} +{{- else }} +{{- .Values.provider.name }} +{{- end }} +{{- end }} diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index 6d4646590c..ef8ad2e200 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -103,7 +103,7 @@ spec: {{- range .Values.domainFilters }} - --domain-filter={{ . }} {{- end }} - - --provider={{ tpl .Values.provider $ }} + - --provider={{ include "external-dns.providerName" . }} {{- range .Values.extraArgs }} - {{ tpl . $ }} {{- end }} diff --git a/charts/external-dns/values.schema.json b/charts/external-dns/values.schema.json index 7b2fd22b99..94b043afe0 100644 --- a/charts/external-dns/values.schema.json +++ b/charts/external-dns/values.schema.json @@ -3,7 +3,19 @@ "type": "object", "properties": { "provider": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + ] }, "extraArgs": { "type": "array", @@ -14,8 +26,20 @@ "secretConfiguration": { "type": "object", "properties": { + "enabled": { + "type": "boolean" + }, "mountPath": { - "type": "string" + "type": [ + "string", + "null" + ] + }, + "subPath": { + "type": [ + "string", + "null" + ] }, "data": { "type": "object", diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index 5bc9003645..e12eed3cfc 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -3,118 +3,108 @@ # Declare variables to be passed into your templates. image: + # -- Image repository for the `external-dns` container. repository: registry.k8s.io/external-dns/external-dns - # Overrides the image tag whose default is v{{ .Chart.AppVersion }} - tag: "" + # -- (string) Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set. + tag: + # -- Image pull policy for the `external-dns` container. pullPolicy: IfNotPresent +# -- Image pull secrets. imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" +# -- (string) Override the name of the chart. +nameOverride: +# -- (string) Override the full name of the chart. +fullnameOverride: + +# -- Labels to add to all chart resources. commonLabels: {} serviceAccount: - # opt out of the service account token automounting (at the service account level) + # -- If `true`, create a new `ServiceAccount`. + create: true + # -- Labels to add to the service account. + labels: {} + # -- Annotations to add to the service account. + annotations: {} + # -- (string) If this is set and `serviceAccount.create` is `true` this will be used for the created `ServiceAccount` name, if set and `serviceAccount.create` is `false` then this will define an existing `ServiceAccount` to use. + name: + # -- Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `ServiceAccount`. automountServiceAccountToken: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account +service: + # -- Service annotations. annotations: {} - # Labels to add to the service account - labels: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" + # -- Service HTTP port. + port: 7979 rbac: - # Specifies whether RBAC resources should be created + # -- If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API. create: true + # -- Additional rules to add to the `ClusterRole`. additionalPermissions: [] -initContainers: [] - -# Annotations to add to the Deployment +# -- Annotations to add to the `Deployment`. deploymentAnnotations: {} +# -- [Deployment Strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy). +deploymentStrategy: + type: Recreate + +# -- (int) Specify the number of old `ReplicaSets` to retain to allow rollback of the `Deployment``. +revisionHistoryLimit: + +# -- Labels to add to the `Pod`. podLabels: {} -# Annotations to add to the Pod +# -- Annotations to add to the `Pod`. podAnnotations: {} +# -- (bool) Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `Pod`. +automountServiceAccountToken: + +# -- If `true`, the `Pod` will have [process namespace sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) enabled. shareProcessNamespace: false +# -- [Pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core), this supports full customisation. +# @default -- See _values.yaml_ podSecurityContext: + runAsNonRoot: true fsGroup: 65534 seccompProfile: type: RuntimeDefault -securityContext: - allowPrivilegeEscalation: false - runAsNonRoot: true - runAsUser: 65534 - readOnlyRootFilesystem: true - capabilities: - drop: ["ALL"] - -# Defaults to `ClusterFirst`. -# Valid values are: `ClusterFirstWithHostNet`, `ClusterFirst`, `Default` or `None`. -dnsPolicy: - -priorityClassName: "" +# -- (string) Priority class name for the `Pod`. +priorityClassName: +# -- (int) Termination grace period for the `Pod` in seconds. terminationGracePeriodSeconds: -serviceMonitor: - enabled: false - # force namespace - # namespace: monitoring - - # Fallback to the prometheus default unless specified - # interval: 10s - - ## scheme: HTTP scheme to use for scraping. Can be used with `tlsConfig` for example if using istio mTLS. - # scheme: "" - - ## tlsConfig: TLS configuration to use when scraping the endpoint. For example if using istio mTLS. - ## Of type: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#tlsconfig - # tlsConfig: {} - - # bearerTokenFile: - # Fallback to the prometheus default unless specified - # scrapeTimeout: 30s - - ## Used to pass Labels that are used by the Prometheus installed in your cluster to select Service Monitors to work with - ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec - additionalLabels: {} - - ## Used to pass annotations that are used by the Prometheus installed in your cluster to select Service Monitors to work with - ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec - annotations: {} - - ## Metric relabel configs to apply to samples before ingestion. - ## [Metric Relabeling](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs) - metricRelabelings: [] - # - action: keep - # regex: 'kube_(daemonset|deployment|pod|namespace|node|statefulset).+' - # sourceLabels: [__name__] +# -- (string) [DNS policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy) for the pod, if not set the default will be used. +dnsPolicy: - ## Relabel configs to apply to samples before ingestion. - ## [Relabeling](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) - relabelings: [] - # - sourceLabels: [__meta_kubernetes_pod_node_name] - # separator: ; - # regex: ^(.*)$ - # targetLabel: nodename - # replacement: $1 - # action: replace +# -- [Init containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) to add to the `Pod` definition. +initContainers: [] - targetLabels: [] +# -- [Security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#securitycontext-v1-core) for the `external-dns` container. +# @default -- See _values.yaml_ +securityContext: + privileged: false + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 65532 + runAsGroup: 65532 + capabilities: + drop: ["ALL"] +# -- [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `external-dns` container. env: [] +# -- [Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. +# @default -- See _values.yaml_ livenessProbe: httpGet: path: /healthz @@ -125,6 +115,8 @@ livenessProbe: failureThreshold: 2 successThreshold: 1 +# -- Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. +# @default -- See _values.yaml_ readinessProbe: httpGet: path: /healthz @@ -135,70 +127,104 @@ readinessProbe: failureThreshold: 6 successThreshold: 1 -service: - port: 7979 - annotations: {} - +# -- Extra [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the `Pod`. extraVolumes: [] +# -- Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `external-dns` container. extraVolumeMounts: [] +# -- [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `external-dns` container. resources: {} +# -- Node labels to match for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). nodeSelector: {} -tolerations: [] - +# -- Affinity settings for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels. affinity: {} +# -- Topology spread constraints for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided one will be created from the pod selector labels. topologySpreadConstraints: [] +# -- Node taints which will be tolerated for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). +tolerations: [] + +serviceMonitor: + # -- If `true`, create a `ServiceMonitor` resource to support the _Prometheus Operator_. + enabled: false + # -- Additional labels for the `ServiceMonitor`. + additionalLabels: {} + # -- Annotations to add to the `ServiceMonitor`. + annotations: {} + # -- (string) If set create the `ServiceMonitor` in an alternate namespace. + namespace: + # -- (string) If set override the _Prometheus_ default interval. + interval: + # -- (string) If set override the _Prometheus_ default scrape timeout. + scrapeTimeout: + # -- (string) If set overrides the _Prometheus_ default scheme. + scheme: + # -- Configure the `ServiceMonitor` [TLS config](https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#tlsconfig). + tlsConfig: {} + # -- (string) Provide a bearer token file for the `ServiceMonitor`. + bearerTokenFile: + # -- [Relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) to apply to samples before ingestion. + relabelings: [] + # -- [Metric relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs) to apply to samples before ingestion. + metricRelabelings: [] + # -- Provide target labels for the `ServiceMonitor`. + targetLabels: [] + +# -- Log level. logLevel: info + +# -- Log format. logFormat: text +# -- Interval for DNS updates. interval: 1m + +# -- If `true`, triggers run loop on create/update/delete events in addition of regular interval. triggerLoopOnEvent: false +# -- if `true`, _ExternalDNS_ will run in a namespaced scope (`Role`` and `Rolebinding`` will be namespaced too). namespaced: false +# -- _Kubernetes_ resources to monitor for DNS entries. sources: - service - ingress +# -- How DNS records are synchronized between sources and providers; available values are `sync` & `upsert-only`. policy: upsert-only -# Specifies the registry for storing ownership and labels. -# Valid values are "aws-sd", "noop", "dynamodb", and "txt". +# -- Specify the registry for storing ownership and labels. +# Valid values are `txt`, `aws-sd`, `dynamodb` & `noop`. registry: txt -# When using a registry other than "noop", specifies a name that -# uniquely identifies this instance of external-dns. -txtOwnerId: "" -# Specifies a prefix for the domain names of TXT records created by the "txt" registry. Optional. Mutually exclusive with `txtSuffix`. -txtPrefix: "" -# Specifies a suffix for the domain names of TXT records created by the "txt" registry. Optional. Mutually exclusive with `txtPrefix`. -txtSuffix: "" - +# -- (string) Specify an identifier for this instance of _ExternalDNS_ wWhen using a registry other than `noop`. +txtOwnerId: +# -- (string) Specify a prefix for the domain names of TXT records created for the `txt` registry. +# Mutually exclusive with `txtSuffix`. +txtPrefix: +# -- (string) Specify a suffix for the domain names of TXT records created for the `txt` registry. +# Mutually exclusive with `txtPrefix`. +txtSuffix: + +## - Limit possible target zones by domain suffixes. domainFilters: [] -provider: aws +provider: + # -- _ExternalDNS_ provider name; for the available providers and how to configure them see the [README](https://github.com/kubernetes-sigs/external-dns#deploying-to-a-cluster). + name: aws +# -- Extra arguments to provide to _ExternalDNS_. extraArgs: [] secretConfiguration: + # -- If `true`, create a `Secret` to store sensitive provider configuration. enabled: false - mountPath: "" - subPath: "" + # -- Mount path for the `Secret`, this can be templated. + mountPath: + # -- Sub-path for mounting the `Secret`, this can be templated. + subPath: + # -- `Secret` data. data: {} - # credentials: | - # [default] - # aws_access_key_id = $SECRET_ACCESS_KEY - # aws_secret_access_key = $SECRET_ACCESS_KEY - -deploymentStrategy: - type: Recreate - -# Optional field that specifies the number of old ReplicaSets to retain to allow rollback with the Deployment. -revisionHistoryLimit: - -# opt out of the service account token automounting (at the pod level) -automountServiceAccountToken: