diff --git a/stable/external-dns/Chart.yaml b/stable/external-dns/Chart.yaml index bcc43c0034..dc9741b80a 100644 --- a/stable/external-dns/Chart.yaml +++ b/stable/external-dns/Chart.yaml @@ -3,9 +3,12 @@ description: Configure external DNS servers (AWS Route53, Google CloudDNS and others) for Kubernetes Ingresses and Services name: external-dns -version: 1.0.2 +version: 1.1.0 appVersion: 0.5.7 home: https://github.com/kubernetes-incubator/external-dns sources: - https://github.com/kubernetes-incubator/external-dns engine: gotpl +maintainers: +- name: rabadin + email: rabadin@cisco.com diff --git a/stable/external-dns/README.md b/stable/external-dns/README.md index e97646047e..2a4ed9716c 100644 --- a/stable/external-dns/README.md +++ b/stable/external-dns/README.md @@ -21,50 +21,59 @@ $ helm install --name my-release stable/external-dns The following table lists the configurable parameters of the external-dns chart and their default values. -| Parameter | Description | Default | -| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | -| `annotationFilter` | Filter sources managed by external-dns via annotation using label selector semantics (default: all sources) (optional). | `""` | -| `aws.accessKey` | `AWS_ACCESS_KEY_ID` to set in the environment (optional). | `""` | -| `aws.secretKey` | `AWS_SECRET_ACCESS_KEY` to set in the environment (optional). | `""` | -| `aws.region` | `AWS_DEFAULT_REGION` to set in the environment (optional). | `us-east-1` | -| `aws.roleArn` | If assume role credentials are used then is the role_arn (arn:aws:iam::....). Leave empty if not used. | `""` | -| `aws.zoneType` | Filter for zones of this type (optional, options: public, private). | `""` | -| `azure.secretName` | Set the secret created for the SP for azure, should contain an azure.json file | `""` | -| `cloudflare.apiKey` | `CF_API_KEY` to set in the environment (optional). | `""` | -| `cloudflare.email` | `CF_API_EMAIL` to set in the environment (optional). | `""` | -| `domainFilters` | Limit possible target zones by domain suffixes (optional). | `[]` | -| `extraArgs` | Optional object of extra args, as `name`: `value` pairs. Where the name is the command line arg to external-dns. | `{}` | -| `extraEnv` | Optional array of extra environment variables. Supply a `name` property and either `value` of `valueFrom` for each. | `[]` | -| `google.project` | When using the Google provider, specify the Google project (required when provider=google). | `""` | -| `google.serviceAccountSecret` | When using the Google provider, optionally specify the secret which contains credentials.json if necessary. | `""` | -| `image.name` | Container image name (Including repository name if not `hub.docker.com`). | `registry.opensource.zalan.do/teapot/external-dns` | -| `image.pullPolicy` | Container pull policy. | `IfNotPresent` | -| `image.tag` | Container image tag. | `v0.5.7` | -| `image.pullSecrets` | Array of pull secret names | `[]` | -| `logLevel` | Verbosity of the logs (options: panic, debug, info, warn, error, fatal) | `info` | -| `nodeSelector` | Node labels for pod assignment | `{}` | -| `podAnnotations` | Additional annotations to apply to the pod. | `{}` | -| `policy` | Modify how DNS records are sychronized between sources and providers (options: sync, upsert-only ). | `upsert-only` | -| `provider` | The DNS provider where the DNS records will be created (options: aws, google, azure, cloudflare, digitalocean, inmemory ). | `aws` | -| `publishInternalServices` | Allow external-dns to publish DNS records for ClusterIP services (optional). | `false` | -| `rbac.create` | If true, create & use RBAC resources | `false` | -| `rbac.serviceAccountName` | Existing ServiceAccount to use (ignored if rbac.create=true) | `default` | -| `registry` | Registry method to use (options: txt, noop) | `txt` | -| `resources` | CPU/Memory resource requests/limits. | `{}` | -| `priorityClassName` | priorityClassName | `""` | -| `service.annotations` | Annotations to add to service | `{}` | -| `service.clusterIP` | IP address to assign to service | `""` | -| `service.externalIPs` | Service external IP addresses | `[]` | -| `service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""` | -| `service.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | `[]` | -| `service.servicePort` | Service port to expose | `7979` | -| `service.type` | Type of service to create | `ClusterIP` | -| `sources` | List of resource types to monitor, possible values are fake, service or ingress. | `[service, ingress]` | -| `tolerations` | List of node taints to tolerate (requires Kubernetes >= 1.6) | `[]` | -| `affinity` | List of affinities (requires Kubernetes >=1.6) | `{}` | -| `txtOwnerId` | When using the TXT registry, a name that identifies this instance of ExternalDNS (optional) | `"default"` | -| `txtPrefix` | When using the TXT registry, a prefix for ownership records that avoids collision with CNAME entries (optional) | `""` | -| `zoneIdFilters` | Limit possible target zones by zone id (optional) | `[]` | +| Parameter | Description | Default | +| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | +| `annotationFilter` | Filter sources managed by external-dns via annotation using label selector semantics (default: all sources) (optional). | `""` | +| `aws.accessKey` | `AWS_ACCESS_KEY_ID` to set in the environment (optional). | `""` | +| `aws.secretKey` | `AWS_SECRET_ACCESS_KEY` to set in the environment (optional). | `""` | +| `aws.region` | `AWS_DEFAULT_REGION` to set in the environment (optional). | `us-east-1` | +| `aws.roleArn` | If assume role credentials are used then is the role_arn (arn:aws:iam::....). Leave empty if not used. | `""` | +| `aws.zoneType` | Filter for zones of this type (optional, options: public, private). | `""` | +| `azure.secretName` | Set the secret created for the SP for azure, should contain an azure.json file | `""` | +| `cloudflare.apiKey` | `CF_API_KEY` to set in the environment (optional). | `""` | +| `cloudflare.email` | `CF_API_EMAIL` to set in the environment (optional). | `""` | +| `domainFilters` | Limit possible target zones by domain suffixes (optional). | `[]` | +| `extraArgs` | Optional object of extra args, as `name`: `value` pairs. Where the name is the command line arg to external-dns. | `{}` | +| `extraEnv` | Optional array of extra environment variables. Supply a `name` property and either `value` of `valueFrom` for each. | `[]` | +| `google.project` | When using the Google provider, specify the Google project (required when provider=google). | `""` | +| `google.serviceAccountSecret` | When using the Google provider, optionally specify the secret which contains credentials.json if necessary. | `""` | +| `image.name` | Container image name (Including repository name if not `hub.docker.com`). | `registry.opensource.zalan.do/teapot/external-dns` | +| `image.pullPolicy` | Container pull policy. | `IfNotPresent` | +| `image.tag` | Container image tag. | `v0.5.7` | +| `image.pullSecrets` | Array of pull secret names | `[]` | +| `infoblox.gridHost` | When using the Infoblox provider, specify the Infoblox Grid host. | `""` | +| `infoblox.wapiUsername` | When using the Infoblox provider, specify the Infoblox WAPI username. | `""` | +| `infoblox.wapiPassword` | When using the Infoblox provider, specify the Infoblox WAPI password. | `""` | +| `infoblox.domainFilter` | When using the Infoblox provider, optionally specify the domain. | `""` | +| `infoblox.noSslVerify` | When using the Infoblox provider, optionally disable SSL verification. | `false` | +| `infoblox.wapiPort` | When using the Infoblox provider, optionally specify the Infoblox WAPI port. | `""` | +| `infoblox.wapiVersion` | When using the Infoblox provider, optionally specify the Infoblox WAPI version. | `""` | +| `infoblox.wapiConnectionPoolSize` | When using the Infoblox provider, optionally specify the Infoblox WAPI request connection pool size. | `""` | +| `infoblox.wapiHttpTimeout` | When using the Infoblox provider, optionally specify the Infoblox WAPI request timeout in seconds. | `""` | +| `logLevel` | Verbosity of the logs (options: panic, debug, info, warn, error, fatal) | `info` | +| `nodeSelector` | Node labels for pod assignment | `{}` | +| `podAnnotations` | Additional annotations to apply to the pod. | `{}` | +| `policy` | Modify how DNS records are sychronized between sources and providers (options: sync, upsert-only ). | `upsert-only` | +| `provider` | The DNS provider where the DNS records will be created (options: aws, google, azure, cloudflare, digitalocean, inmemory, infoblox). | `aws` | +| `publishInternalServices` | Allow external-dns to publish DNS records for ClusterIP services (optional). | `false` | +| `rbac.create` | If true, create & use RBAC resources | `false` | +| `rbac.serviceAccountName` | Existing ServiceAccount to use (ignored if rbac.create=true) | `default` | +| `registry` | Registry method to use (options: txt, noop) | `txt` | +| `resources` | CPU/Memory resource requests/limits. | `{}` | +| `priorityClassName` | priorityClassName | `""` | +| `service.annotations` | Annotations to add to service | `{}` | +| `service.clusterIP` | IP address to assign to service | `""` | +| `service.externalIPs` | Service external IP addresses | `[]` | +| `service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""` | +| `service.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | `[]` | +| `service.servicePort` | Service port to expose | `7979` | +| `service.type` | Type of service to create | `ClusterIP` | +| `sources` | List of resource types to monitor, possible values are fake, service or ingress. | `[service, ingress]` | +| `tolerations` | List of node taints to tolerate (requires Kubernetes >= 1.6) | `[]` | +| `affinity` | List of affinities (requires Kubernetes >=1.6) | `{}` | +| `txtOwnerId` | When using the TXT registry, a name that identifies this instance of ExternalDNS (optional) | `"default"` | +| `txtPrefix` | When using the TXT registry, a prefix for ownership records that avoids collision with CNAME entries (optional) | `""` | +| `zoneIdFilters` | Limit possible target zones by zone id (optional) | `[]` | Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. diff --git a/stable/external-dns/templates/deployment.yaml b/stable/external-dns/templates/deployment.yaml index a505b54cad..dcebdc9630 100755 --- a/stable/external-dns/templates/deployment.yaml +++ b/stable/external-dns/templates/deployment.yaml @@ -67,6 +67,23 @@ spec: {{- if .Values.google.project }} - --google-project={{ .Values.google.project }} {{- end }} + {{- if eq .Values.provider "infoblox" }} + - --infoblox-grid-host={{ .Values.infoblox.gridHost }} + {{- if .Values.infoblox.domainFilter }} + - --domain-filter={{ .Values.infoblox.domainFilter }} + {{- end }} + {{- if .Values.infoblox.wapiPort }} + - --infoblox-wapi-port={{ .Values.infoblox.wapiPort }} + {{- end }} + {{- if .Values.infoblox.wapiVersion }} + - --infoblox-wapi-version={{ .Values.infoblox.wapiVersion }} + {{- end }} + {{- if .Values.infoblox.noSslVerify }} + - --no-infoblox-ssl-verify + {{- else }} + - --infoblox-ssl-verify + {{- end }} + {{- end }} volumeMounts: {{- if .Values.google.serviceAccountSecret }} - name: google-service-account @@ -106,6 +123,26 @@ spec: - name: CF_API_EMAIL value: "{{ .Values.cloudflare.email }}" {{- end }} + {{- if .Values.infoblox.wapiConnectionPoolSize }} + - name: EXTERNAL_DNS_INFOBLOX_HTTP_POOL_CONNECTIONS + value: "{{ .Values.infoblox.wapiConnectionPoolSize }}" + {{- end }} + {{- if .Values.infoblox.wapiHttpTimeout }} + - name: EXTERNAL_DNS_INFOBLOX_HTTP_REQUEST_TIMEOUT + value: "{{ .Values.infoblox.wapiHttpTimeout }}" + {{- end }} + {{- if and .Values.infoblox.wapiUsername .Values.infoblox.wapiPassword }} + - name: EXTERNAL_DNS_INFOBLOX_WAPI_USERNAME + valueFrom: + secretKeyRef: + name: {{ template "external-dns.fullname" . }} + key: infoblox_wapi_username + - name: EXTERNAL_DNS_INFOBLOX_WAPI_PASSWORD + valueFrom: + secretKeyRef: + name: {{ template "external-dns.fullname" . }} + key: infoblox_wapi_password + {{- end }} {{- $root := . -}} {{- range .Values.extraEnv }} - name: {{ .name }} diff --git a/stable/external-dns/templates/secret.yaml b/stable/external-dns/templates/secret.yaml index 55b060a571..7fd1d45495 100644 --- a/stable/external-dns/templates/secret.yaml +++ b/stable/external-dns/templates/secret.yaml @@ -1,4 +1,4 @@ -{{- if or (and .Values.aws.secretKey .Values.aws.accessKey) .Values.cloudflare.apiKey .Values.extraEnv -}} +{{- if or (and .Values.aws.secretKey .Values.aws.accessKey) .Values.cloudflare.apiKey (and .Values.infoblox.wapiUsername .Values.infoblox.wapiPassword) .Values.extraEnv -}} apiVersion: v1 kind: Secret metadata: @@ -14,6 +14,11 @@ data: {{- if .Values.cloudflare.apiKey }} cloudflare_api_key: {{ .Values.cloudflare.apiKey | b64enc | quote }} {{- end }} +{{- if and .Values.infoblox.wapiUsername .Values.infoblox.wapiPassword }} + infoblox_wapi_username: {{ .Values.infoblox.wapiUsername | b64enc | quote }} + infoblox_wapi_password: {{ .Values.infoblox.wapiPassword | b64enc | quote }} +{{- end }} + {{- range .Values.extraEnv }} {{- if .value }} {{ .name }}: {{ .value | b64enc | quote }} diff --git a/stable/external-dns/values.yaml b/stable/external-dns/values.yaml index 85e1cf41b5..a8324c312a 100644 --- a/stable/external-dns/values.yaml +++ b/stable/external-dns/values.yaml @@ -39,6 +39,20 @@ google: project: "" serviceAccountSecret: "" +# Infoblox keys to inject +infoblox: + # Required keys: + wapiUsername: "" + wapiPassword: "" + gridHost: "" + # Optional keys: + domainFilter: "" + noSslVerify: false + wapiPort: "" + wapiVersion: "" + wapiConnectionPoolSize: "" + wapiHttpTimeout: "" + ## Limit possible target zones by domain suffixes (optional) domainFilters: [] ## Limit possible target zones by zone id (optional)