diff --git a/packs/k8gb-0.19.0/README.md b/packs/k8gb-0.19.0/README.md
new file mode 100644
index 00000000..131ef506
--- /dev/null
+++ b/packs/k8gb-0.19.0/README.md
@@ -0,0 +1,93 @@
+# K8GB - Kubernetes Global Balancer
+
+## Description
+
+k8gb is a Kubernetes Global Load Balancer (GSLB) that provides DNS-based traffic management across multiple Kubernetes clusters. It enables automatic failover and load balancing by managing DNS records based on the health and availability of application endpoints.
+
+## Prerequisites
+
+Before deploying this pack, ensure that:
+
+- Kubernetes 1.29 or later.
+- A supported DNS provider is configured.
+- A namespace is specified for the deployment.
+- Network connectivity exists between participating clusters when using a multi-cluster deployment.
+
+## CloudTypes Supported
+
+Supported for all cloudTypes.
+
+## Pack Contents
+
+This pack deploys the following components:
+
+- k8gb Operator
+- Custom Resource Definitions (CRDs)
+- CoreDNS
+- ExternalDNS (optional)
+- RBAC resources
+
+## Configuration
+
+The following Pack parameter is required:
+
+| Parameter | Description |
+|-----------|-------------|
+| `pack.namespace` | Namespace where k8gb will be installed. |
+
+Additional application settings can be customized through the `values.yaml` file.
+
+## Presets
+
+This pack provides two presets for configuring how k8gb discovers the external address used for DNS records.
+
+### CoreDNS - ClusterIP
+
+Uses an Ingress resource for address discovery.
+
+Requirements:
+
+- An Ingress Controller (for example, NGINX Ingress Controller) must be installed.
+- An Ingress resource must be created for the application.
+- The Ingress must be labeled with:
+
+```yaml
+k8gb.io/ip-source=true
+```
+
+This is the recommended deployment model described in the official k8gb documentation for Ingress-based address discovery.
+
+### CoreDNS - LoadBalancer (Default)
+
+Uses the CoreDNS Service of type `LoadBalancer` to discover the external address.
+
+Recommended for:
+
+- Managed Kubernetes services that provide external LoadBalancers.
+- Bare-metal environments using MetalLB.
+- Environments where an Ingress Controller is not required.
+
+No Ingress Controller or labeled Ingress resource is required when using this preset.
+
+## Verification
+
+After the deployment completes, verify that:
+
+- All k8gb pods are in the `Running` state.
+- The required CRDs have been installed.
+- The k8gb controller is running successfully.
+
+Example commands:
+
+```bash
+kubectl get pods -n k8gb
+kubectl get svc -n k8gb
+kubectl get crds | grep k8gb
+kubectl logs -n k8gb deployment/k8gb
+```
+
+## References
+
+- https://www.k8gb.io/latest/
+- https://www.k8gb.io/latest/address_discovery/
+- https://github.com/k8gb-io/k8gb
\ No newline at end of file
diff --git a/packs/k8gb-0.19.0/charts/k8gb-v0.19.0.tgz b/packs/k8gb-0.19.0/charts/k8gb-v0.19.0.tgz
new file mode 100644
index 00000000..ecf6724b
Binary files /dev/null and b/packs/k8gb-0.19.0/charts/k8gb-v0.19.0.tgz differ
diff --git a/packs/k8gb-0.19.0/charts/k8gb/.helmignore b/packs/k8gb-0.19.0/charts/k8gb/.helmignore
new file mode 100644
index 00000000..5d9272cd
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
+
diff --git a/packs/k8gb-0.19.0/charts/k8gb/Chart.lock b/packs/k8gb-0.19.0/charts/k8gb/Chart.lock
new file mode 100644
index 00000000..0d518481
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/Chart.lock
@@ -0,0 +1,9 @@
+dependencies:
+- name: coredns
+ repository: https://coredns.github.io/helm
+ version: 1.45.2
+- name: external-dns
+ repository: https://kubernetes-sigs.github.io/external-dns
+ version: 1.20.0
+digest: sha256:01a1f9be406545ddfc98e5db7246b5fa1ccf8e8d406a6e10b90b41f2c7ae0296
+generated: "2026-01-23T17:03:09.819625805Z"
diff --git a/packs/k8gb-0.19.0/charts/k8gb/Chart.yaml b/packs/k8gb-0.19.0/charts/k8gb/Chart.yaml
new file mode 100644
index 00000000..a491d8a6
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/Chart.yaml
@@ -0,0 +1,99 @@
+annotations:
+ artifacthub.io/crds: |
+ - kind: Gslb
+ version: v1beta1
+ name: gslbs.k8gb.io
+ displayName: Gslb
+ description: Gslb resource for global load balancing strategy configuration
+ - kind: Gslb
+ version: v1beta1
+ name: gslbs.k8gb.absa.oss
+ displayName: Gslb
+ description: Legacy Gslb resource (k8gb.absa.oss)
+ - kind: DNSEndpoint
+ name: dnsendpoints.externaldns.k8s.io
+ version: v1alpha1
+ displayName: DNSEndpoint
+ description: Using ExternalDNS it synchronizes exposed Kubernetes Services and Ingresses with DNS providers
+ - kind: ZoneDelegation
+ version: v1beta1
+ name: zonedelegations.k8gb.io
+ displayName: ZoneDelegation
+ description: ZoneDelegation enables dynamic activation of DNS zones via the ZoneDelegation resource to prevent premature NXDOMAIN responses in multi-tenant or shared clusters.
+ artifacthub.io/crdsExamples: |
+ - apiVersion: k8gb.io/v1beta1
+ kind: Gslb
+ metadata:
+ name: test-gslb-failover
+ namespace: test-gslb
+ spec:
+ ingress:
+ rules:
+ - host: failover.test.k8gb.io # Desired GSLB enabled FQDN
+ http:
+ paths:
+ - path: /
+ backend:
+ service:
+ name: frontend-podinfo # Service name to enable GSLB for
+ port:
+ name: http
+ strategy:
+ type: failover # Global load balancing strategy
+ primaryGeoTag: eu-west-1 # Primary cluster geo tag
+ - apiVersion: k8gb.io/v1beta1
+ kind: ZoneDelegation
+ metadata:
+ name: test-zone
+ spec:
+ loadBalancedZone: test-zone.cloud.example.com
+ parentZone: cloud.example.com
+ dnsZoneNegTTL: 30
+ status:
+ dnsServers:
+ - name: gslb-ns-eu-cloud.example.com
+ address: 172.18.0.6
+ - name: gslb-ns-us-cloud.example.com
+ address: 172.18.0.10
+ artifacthub.io/operator: "true"
+ artifacthub.io/operatorCapabilities: Seamless Upgrades
+apiVersion: v2
+appVersion: v0.19.0
+dependencies:
+- name: coredns
+ repository: https://coredns.github.io/helm
+ version: 1.45.2
+- alias: extdns
+ condition: extdns.enabled
+ name: external-dns
+ repository: https://kubernetes-sigs.github.io/external-dns
+ version: 1.20.0
+description: A Helm chart for Kubernetes Global Balancer
+home: https://www.k8gb.io/
+icon: https://www.k8gb.io/images/k8gb-icon-color.svg
+keywords:
+- gslb
+- dns-lb
+- kuberneters-global-balancer
+- kubernetes-operator
+- balancer
+- multi-cluster
+kubeVersion: '>= 1.21.0-0'
+maintainers:
+- email: andre.aguas@protonmail.com
+ name: Andre Baptista Aguas
+- email: bradley@0ttl.ai
+ name: Bradley Andersen
+- email: dinar.valeev@absa.africa
+ name: Dinar Valeev
+- email: jiri.kremser@gmail.com
+ name: Jiri Kremser
+- email: kuritka@gmail.com
+ name: Michal Kuritka
+- email: yury@upbound.io
+ name: Yury Tsarev
+name: k8gb
+sources:
+- https://github.com/k8gb-io/k8gb
+type: application
+version: v0.19.0
diff --git a/packs/k8gb-0.19.0/charts/k8gb/LICENSE b/packs/k8gb-0.19.0/charts/k8gb/LICENSE
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/packs/k8gb-0.19.0/charts/k8gb/README.md b/packs/k8gb-0.19.0/charts/k8gb/README.md
new file mode 100644
index 00000000..b113c61c
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/README.md
@@ -0,0 +1,137 @@
+# k8gb
+
+  
+
+A Helm chart for Kubernetes Global Balancer
+
+```
+ _ ___ _
+ | | _( _ ) __ _| |__
+ | |/ / _ \ / _` | '_ \
+ | < (_) | (_| | |_) |
+ |_|\_\___/ \__, |_.__/ .io
+ |___/
+```
+
+**Homepage:**
+
+## Maintainers
+
+| Name | Email | Url |
+| ---- | ------ | --- |
+| Andre Baptista Aguas | | |
+| Bradley Andersen | | |
+| Dinar Valeev | | |
+| Jiri Kremser | | |
+| Michal Kuritka | | |
+| Yury Tsarev | | |
+
+## Source Code
+
+*
+
+## Requirements
+
+Kubernetes: `>= 1.21.0-0`
+
+| Repository | Name | Version |
+|------------|------|---------|
+| https://coredns.github.io/helm | coredns | 1.45.2 |
+| https://kubernetes-sigs.github.io/external-dns | extdns(external-dns) | 1.20.0 |
+
+#### Tested Environment Configurations:
+
+| Type | Implementation |
+|----------------------------------|---------------------------------------------------------------|
+| Kubernetes Version | >= 1.21 |
+| Environment | Any conformant Kubernetes cluster on-prem or in cloud |
+| Ingress Controller | NGINX, Istio, AWS Load Balancer Controller |
+| EdgeDNS | Infoblox, Route53, NS1, CloudFlare, AzureDNS, GCP Cloud DNS |
+
+Note: k8gb is architected to run on top of any compliant Kubernetes cluster and Ingress controller. The table above lists solutions where we have tested and verified k8gb installation.
+
+## Values
+
+| Key | Type | Default | Description |
+|-----|------|---------|-------------|
+| coredns.corefile | object | `{"enabled":true,"reload":{"enabled":true,"interval":"30s","jitter":"15s"}}` | CoreDNS configmap |
+| coredns.corefile.reload | object | `{"enabled":true,"interval":"30s","jitter":"15s"}` | Reload CoreDNS configmap when it changes https://coredns.io/plugins/reload/ |
+| coredns.deployment.skipConfig | bool | `true` | Skip CoreDNS creation and uses the one shipped by k8gb instead |
+| coredns.image.repository | string | `"registry.k8gb.io/k8gb-io/k8s_crd"` | CoreDNS CRD plugin image |
+| coredns.image.tag | string | `"v0.4.0"` | image tag |
+| coredns.isClusterService | bool | `false` | service: refer to https://www.k8gb.io/docs/service_upgrade.html for upgrading CoreDNS service steps |
+| coredns.resources.limits | object | `{"cpu":"100m","memory":"128Mi"}` | requests and limits for the coredns container |
+| coredns.resources.requests.cpu | string | `"100m"` | |
+| coredns.resources.requests.memory | string | `"128Mi"` | |
+| coredns.securityContext | object | `{"capabilities":{"add":[]}}` | Disables all permissions since we don't open privileged ports |
+| coredns.servers | list | `[{"plugins":[{"name":"prometheus","parameters":"0.0.0.0:9153"}],"port":5353,"servicePort":53,"zones":[{"use_tcp":true,"zone":"."}]}]` | Only meant to open the correct service and container ports, has no other impact on the coredns configuration |
+| coredns.serviceAccount | object | `{"create":true,"name":"coredns"}` | Creates serviceAccount for coredns |
+| coredns.serviceType | string | `"ClusterIP"` | If the value is LoadBalancer, the IP addresses of the cluster will be loaded from the CoreDNS service; otherwise, they will be loaded from the first ingress marked with the label "k8gb.io/ip-source=true". |
+| extdns.domainFilters[0] | string | `"example.com"` | |
+| extdns.enabled | bool | `false` | |
+| extdns.interval | string | `"20s"` | |
+| extdns.labelFilter | string | `"k8gb.io/dnstype=extdns"` | |
+| extdns.logLevel | string | `"debug"` | |
+| extdns.managedRecordTypes[0] | string | `"A"` | |
+| extdns.managedRecordTypes[1] | string | `"CNAME"` | |
+| extdns.managedRecordTypes[2] | string | `"NS"` | |
+| extdns.policy | string | `"sync"` | |
+| extdns.rbac.create | bool | `true` | |
+| extdns.sources[0] | string | `"crd"` | |
+| extdns.txtOwnerId | string | `"k8gb-"` | |
+| extdns.txtPrefix | string | `"k8gb--"` | |
+| gatewayapi.enabled | bool | `true` | install gatewayapi RBAC |
+| global.imagePullSecrets | list | `[]` | 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/ |
+| infoblox.dnsView | string | `"default"` | DNS view to use for zone operations |
+| infoblox.enabled | bool | `false` | infoblox provider enabled |
+| infoblox.gridHost | string | `"10.0.0.1"` | WAPI address |
+| infoblox.httpPoolConnections | int | `10` | Size of connections pool |
+| infoblox.httpRequestTimeout | int | `20` | Request Timeout in secconds |
+| infoblox.sslVerify | bool | `true` | use SSL |
+| infoblox.wapiPort | int | `443` | WAPI port |
+| infoblox.wapiVersion | string | `"2.3.1"` | WAPI version |
+| istio.enabled | bool | `true` | install istio RBAC |
+| k8gb.clusterGeoTag | string | `"eu"` | Unique geotag for this K8GB instance. This tag identifies the cluster's location or role (e.g., "eu", "us-east", "dc1" or "primary"). This tag should be present in all clusters’ extGslbClustersGeoTags |
+| k8gb.deployCrds | bool | `true` | whether it should also deploy the gslb and dnsendpoints CRDs |
+| k8gb.deployRbac | bool | `true` | whether it should also deploy the service account, cluster role and cluster role binding |
+| k8gb.dnsZones | list | `[{"dnsZoneNegTTL":30,"extraPlugins":[],"extraServerBlocks":"","geoDataField":"","geoDataFilePath":"","loadBalancedZone":"cloud.example.com","parentZone":"example.com"}]` | array of dns zones controlled by gslb |
+| k8gb.dynamicZones | bool | `false` | whether to use Dynamic Zone Delegation feature |
+| k8gb.edgeDNSServers[0] | string | `"1.1.1.1"` | use this DNS server as a main resolver to enable cross k8gb DNS based communication |
+| k8gb.exposeMetrics | bool | `false` | Exposing metrics |
+| k8gb.extGslbClustersGeoTags | string | `"eu,us"` | Comma-separated list of geotags for external K8GB clusters. These are arbitrary, user-defined identifiers (e.g., "eu,us" or "dc2,dc3") used for coordination between K8GB instances If the value remains empty, dynamic geotags extracted from the NS records on the edge DNS will be used. |
+| k8gb.extraVolumeMounts | list | `[{"mountPath":"/etc/dynamic","name":"dynamic-zones"}]` | dynamic zones configmap |
+| k8gb.extraVolumes[0].configMap.name | string | `"coredns-dynamic"` | |
+| k8gb.extraVolumes[0].configMap.optional | bool | `true` | |
+| k8gb.extraVolumes[0].name | string | `"dynamic-zones"` | |
+| k8gb.imageRepo | string | `"registry.k8gb.io/k8gb-io/k8gb"` | image repository |
+| k8gb.imageTag | string | `nil` | image tag defaults to Chart.AppVersion, see Chart.yaml, but can be overrided with imageTag key |
+| k8gb.installLegacyCrds | bool | `true` | whether it should also deploy the legacy k8gb.absa.oss CRD |
+| k8gb.log.format | string | `"simple"` | log format (simple,json) |
+| k8gb.log.level | string | `"info"` | log level (panic,fatal,error,warn,info,debug,trace) |
+| k8gb.metricsAddress | string | `"0.0.0.0:8080"` | Metrics server address |
+| k8gb.nsRecordTTL | int | `30` | TTL of the NS and respective glue record used by external DNS |
+| k8gb.podAnnotations | object | `{}` | pod annotations |
+| k8gb.podLabels | object | `{}` | pod labels |
+| k8gb.reconcileRequeueSeconds | int | `30` | Reconcile time in seconds |
+| k8gb.resources.limits.cpu | string | `"500m"` | |
+| k8gb.resources.limits.memory | string | `"128Mi"` | |
+| k8gb.resources.requests | object | `{"cpu":"100m","memory":"32Mi"}` | requests and limits for the k8gb operator container |
+| k8gb.securityContext.allowPrivilegeEscalation | bool | `false` | |
+| k8gb.securityContext.readOnlyRootFilesystem | bool | `true` | |
+| k8gb.securityContext.runAsNonRoot | bool | `true` | For more options consult https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#securitycontext-v1-core |
+| k8gb.securityContext.runAsUser | int | `1000` | |
+| k8gb.serviceMonitor | object | `{"enabled":false}` | enable ServiceMonitor |
+| k8gb.tolerations | list | `[]` | Tolerations to apply to the k8gb operator deployment for example: tolerations: - key: foo.bar.com/role operator: Equal value: master effect: NoSchedule |
+| k8gb.validatingAdmissionPolicy | object | `{"enabled":false}` | enable validating admission policies |
+| openshift.enabled | bool | `false` | Install OpenShift specific RBAC |
+| tracing.deployJaeger | bool | `false` | should the Jaeger be deployed together with the k8gb operator? In case of using another OpenTracing solution, make sure that configmap for OTEL agent has the correct exporters set up (`tracing.otelConfig`). |
+| tracing.enabled | bool | `false` | if the application should be sending the traces to OTLP collector (env var `TRACING_ENABLED`) |
+| tracing.endpoint | string | `"localhost:4318"` | `host:port` where the spans from the applications (traces) should be sent, sets the `OTEL_EXPORTER_OTLP_ENDPOINT` env var This is not the final destination where all the traces are going. Otel collector has its configuration in the associated configmap (`tracing.otelConfig`). |
+| tracing.jaegerImage.pullPolicy | string | `"Always"` | |
+| tracing.jaegerImage.repository | string | `"jaegertracing/all-in-one"` | if `tracing.deployJaeger==true` this image will be used in the deployment for Jaeger |
+| tracing.jaegerImage.tag | string | `"1.76.0"` | |
+| tracing.otelConfig | string | `nil` | configuration for OTEL collector, this will be represented as configmap called `agent-config` |
+| tracing.samplingRatio | string | `nil` | float representing the ratio of how often the span should be kept/dropped (env var `TRACING_SAMPLING_RATIO`) if not specified, the AlwaysSample will be used which is the same as 1.0. `0.1` would mean that 10% of samples will be kept |
+| tracing.sidecarImage.pullPolicy | string | `"Always"` | |
+| tracing.sidecarImage.repository | string | `"otel/opentelemetry-collector"` | OpenTelemetry collector into which the k8gb operator sends the spans. It can be further configured to send its data to somewhere else using exporters (Jaeger for instance) |
+| tracing.sidecarImage.tag | string | `"0.148.0"` | |
diff --git a/packs/k8gb-0.19.0/charts/k8gb/_helm-docs-template.gotmpl b/packs/k8gb-0.19.0/charts/k8gb/_helm-docs-template.gotmpl
new file mode 100644
index 00000000..a3a90b53
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/_helm-docs-template.gotmpl
@@ -0,0 +1,37 @@
+{{ template "chart.header" . }}
+
+{{ template "chart.deprecationWarning" . }}
+
+{{ template "chart.badgesSection" . }}
+
+{{ template "chart.description" . }}
+
+```
+ _ ___ _
+ | | _( _ ) __ _| |__
+ | |/ / _ \ / _` | '_ \
+ | < (_) | (_| | |_) |
+ |_|\_\___/ \__, |_.__/ .io
+ |___/
+```
+
+{{ template "chart.homepageLine" . }}
+
+{{ template "chart.maintainersSection" . }}
+
+{{ template "chart.sourcesSection" . }}
+
+{{ template "chart.requirementsSection" . }}
+
+#### Tested Environment Configurations:
+
+| Type | Implementation |
+|----------------------------------|---------------------------------------------------------------|
+| Kubernetes Version | >= 1.21 |
+| Environment | Any conformant Kubernetes cluster on-prem or in cloud |
+| Ingress Controller | NGINX, Istio, AWS Load Balancer Controller |
+| EdgeDNS | Infoblox, Route53, NS1, CloudFlare, AzureDNS, GCP Cloud DNS |
+
+Note: k8gb is architected to run on top of any compliant Kubernetes cluster and Ingress controller. The table above lists solutions where we have tested and verified k8gb installation.
+
+{{ template "chart.valuesSection" . }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/.helmignore b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/.helmignore
new file mode 100644
index 00000000..ea595e9f
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+OWNERS
+*.tests
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/Chart.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/Chart.yaml
new file mode 100644
index 00000000..e1463e5a
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/Chart.yaml
@@ -0,0 +1,24 @@
+annotations:
+ artifacthub.io/changes: |
+ - kind: added
+ description: Add configurable dnsPolicy for deployment
+apiVersion: v2
+appVersion: 1.13.1
+description: CoreDNS is a DNS server that chains plugins and provides Kubernetes DNS
+ Services
+home: https://coredns.io
+icon: https://coredns.io/images/CoreDNS_Colour_Horizontal.png
+keywords:
+- coredns
+- dns
+- kubedns
+maintainers:
+- name: mrueg
+- name: haad
+- name: hagaibarel
+- name: shubham-cmyk
+name: coredns
+sources:
+- https://github.com/coredns/coredns
+type: application
+version: 1.45.2
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/README.md b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/README.md
new file mode 100644
index 00000000..c7443747
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/README.md
@@ -0,0 +1,321 @@
+# CoreDNS
+
+[CoreDNS](https://coredns.io/) is a DNS server that chains plugins and provides DNS Services
+
+# TL;DR;
+
+```console
+$ helm repo add coredns https://coredns.github.io/helm
+$ helm --namespace=kube-system install coredns coredns/coredns
+```
+
+## Introduction
+
+This chart bootstraps a [CoreDNS](https://github.com/coredns/coredns) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. This chart will provide DNS Services and can be deployed in multiple configuration to support various scenarios listed below:
+
+- CoreDNS as a cluster dns service and a drop-in replacement for Kube/SkyDNS. This is the default mode and CoreDNS is deployed as cluster-service in kube-system namespace. This mode is chosen by setting `isClusterService` to true.
+- CoreDNS as an external dns service. In this mode CoreDNS is deployed as any kubernetes app in user specified namespace. The CoreDNS service can be exposed outside the cluster by using using either the NodePort or LoadBalancer type of service. This mode is chosen by setting `isClusterService` to false.
+- CoreDNS as an external dns provider for kubernetes federation. This is a sub case of 'external dns service' which uses etcd plugin for CoreDNS backend. This deployment mode as a dependency on `etcd-operator` chart, which needs to be pre-installed.
+
+## Prerequisites
+
+- Kubernetes 1.10 or later
+
+## Installing the Chart
+
+The chart can be installed as follows:
+
+```console
+$ helm repo add coredns https://coredns.github.io/helm
+$ helm --namespace=kube-system install coredns coredns/coredns
+```
+
+The command deploys CoreDNS on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists various ways to override default configuration during deployment.
+
+> **Tip**: List all releases using `helm list --all-namespaces`
+
+## OCI installing
+
+The chart can also be installed using the following:
+
+```console
+$ helm --namespace=kube-system install coredns oci://ghcr.io/coredns/charts/coredns --version 1.38.0
+```
+
+The command deploys the `1.38.0` version of CoreDNS on the Kubernetes cluster in the default configuration.
+
+## Helm Unit Testing & Debugging Guide
+
+This document explains how to write, run, and debug Helm unit tests for this chart using [helm-unittest](https://github.com/helm-unittest/helm-unittest).
+
+---
+
+### Prerequisites
+
+Install the Helm unittest plugin:
+
+```bash
+helm plugin install https://github.com/helm-unittest/helm-unittest
+```
+
+### Running Unit Tests
+
+Run all unit tests in the chart folder (e.g., `./coredns`):
+
+```bash
+helm unittest ./coredns
+```
+
+To output results in **JUnit XML** format:
+
+```bash
+mkdir -p test-results
+helm unittest --strict \
+ --output-type JUnit \
+ --output-file test-results/helm-unittest-report.xml \
+ ./coredns
+```
+
+---
+
+### Debugging Helm Charts
+
+Render the chart templates with real values to debug:
+
+```bash
+helm template ./coredns --debug
+```
+## YAML Intellisense in VS Code
+
+Add this line at the top of your unit test YAML files for schema validation and autocompletion in VS Code:
+
+```yaml
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+```
+
+This improves YAML editing and error highlighting for test definitions.
+
+## Uninstalling the Chart
+
+To uninstall/delete the `coredns` deployment:
+
+```console
+$ helm uninstall coredns
+```
+
+The command removes all the Kubernetes components associated with the chart and deletes the release.
+
+## Configuration
+
+| Parameter | Description | Default |
+| :--------------------------------------------- |:------------------------------------------------------------------------------------------------------------------------------------------| :----------------------------------------------------------- |
+| `image.repository` | The image repository to pull from | coredns/coredns |
+| `image.tag` | The image tag to pull from (derived from Chart.yaml) | `` |
+| `image.pullPolicy` | Image pull policy | IfNotPresent |
+| `image.pullSecrets` | Specify container image pull secrets | `[]` |
+| `replicaCount` | Number of replicas | 1 |
+| `resources.limits.cpu` | Container maximum CPU | `100m` |
+| `resources.limits.memory` | Container maximum memory | `128Mi` |
+| `resources.requests.cpu` | Container requested CPU | `100m` |
+| `resources.requests.memory` | Container requested memory | `128Mi` |
+| `serviceType` | Kubernetes Service type | `ClusterIP` |
+| `prometheus.service.enabled` | Set this to `true` to create Service for Prometheus metrics | `false` |
+| `prometheus.service.annotations` | Annotations to add to the metrics Service | `{prometheus.io/scrape: "true", prometheus.io/port: "9153"}` |
+| `prometheus.service.selector` | Pod selector | `{}` |
+| `prometheus.monitor.enabled` | Set this to `true` to create ServiceMonitor for Prometheus operator | `false` |
+| `prometheus.monitor.additionalLabels` | Additional labels that can be used so ServiceMonitor will be discovered by Prometheus | {} |
+| `prometheus.monitor.namespace` | Selector to select which namespaces the Endpoints objects are discovered from. | `""` |
+| `prometheus.monitor.interval` | Scrape interval for polling the metrics endpoint. (E.g. "30s") | `""` |
+| `prometheus.monitor.selector` | Service selector | `{}` |
+| `service.clusterIP` | IP address to assign to service | `""` |
+| `service.clusterIPs` | IP addresses to assign to service | `[]` |
+| `service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""` |
+| `service.externalIPs` | External IP addresses | [] |
+| `service.externalTrafficPolicy` | Enable client source IP preservation | [] |
+| `service.ipFamilyPolicy` | Service dual-stack policy | `""` |
+| `service.annotations` | Annotations to add to service | {} |
+| `service.selector` | Pod selector | `{}` |
+| `service.trafficDistribution` | Service traffic routing strategy | |
+| `serviceAccount.create` | If true, create & use serviceAccount | false |
+| `serviceAccount.name` | If not set & create is true, use template fullname | |
+| `rbac.create` | If true, create & use RBAC resources | true |
+| `rbac.pspEnable` | Specifies whether a PodSecurityPolicy should be created. | `false` |
+| `rbac.multiclusterEnable` | Specifies whether the kubernetes plugin multicluster RBAC should be created. | `false` |
+| `isClusterService` | Specifies whether chart should be deployed as cluster-service or normal k8s app. | true |
+| `priorityClassName` | Name of Priority Class to assign pods | `""` |
+| `securityContext` | securityContext definition for pods | capabilities.add.NET_BIND_SERVICE |
+| `servers` | Configuration for CoreDNS and plugins | See values.yml |
+| `livenessProbe.enabled` | Enable/disable the Liveness probe | `true` |
+| `livenessProbe.initialDelaySeconds` | Delay before liveness probe is initiated | `60` |
+| `livenessProbe.periodSeconds` | How often to perform the probe | `10` |
+| `livenessProbe.timeoutSeconds` | When the probe times out | `5` |
+| `livenessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | `5` |
+| `livenessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | `1` |
+| `readinessProbe.enabled` | Enable/disable the Readiness probe | `true` |
+| `readinessProbe.initialDelaySeconds` | Delay before readiness probe is initiated | `30` |
+| `readinessProbe.periodSeconds` | How often to perform the probe | `10` |
+| `readinessProbe.timeoutSeconds` | When the probe times out | `5` |
+| `readinessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | `5` |
+| `readinessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | `1` |
+| `affinity` | Affinity settings for pod assignment | {} |
+| `nodeSelector` | Node labels for pod assignment | {} |
+| `tolerations` | Tolerations for pod assignment | [] |
+| `zoneFiles` | Configure custom Zone files | [] |
+| `extraContainers` | Optional array of sidecar containers | [] |
+| `extraVolumes` | Optional array of volumes to create | [] |
+| `extraVolumeMounts` | Optional array of volumes to mount inside the CoreDNS container | [] |
+| `extraSecrets` | Optional array of secrets to mount inside the CoreDNS container | [] |
+| `env` | Optional array of environment variables for CoreDNS container | [] |
+| `customLabels` | Optional labels for Deployment(s), Pod, Service, ServiceMonitor objects | {} |
+| `customAnnotations` | Optional annotations for Deployment(s), Pod, Service, ServiceMonitor objects |
+| `rollingUpdate.maxUnavailable` | Maximum number of unavailable replicas during rolling update | `1` |
+| `rollingUpdate.maxSurge` | Maximum number of pods created above desired number of pods | `25%` |
+| `podDisruptionBudget` | Optional PodDisruptionBudget | {} |
+| `podAnnotations` | Optional Pod only Annotations | {} |
+| `podLabels` | Optional Pod only Labels | {} |
+| `dnsConfig` | Optional Pod DNS configuration. When set, `dnsPolicy` is automatically set to `None` | {} |
+| `terminationGracePeriodSeconds` | Optional duration in seconds the pod needs to terminate gracefully. | 30 |
+| `hpa.enabled` | Enable Hpa autoscaler instead of proportional one | `false` |
+| `hpa.minReplicas` | Hpa minimum number of CoreDNS replicas | `1` |
+| `hpa.maxReplicas` | Hpa maximum number of CoreDNS replicas | `2` |
+| `hpa.metrics` | Metrics definitions used by Hpa to scale up and down | {} |
+| `autoscaler.enabled` | Optionally enabled a cluster-proportional-autoscaler for CoreDNS | `false` |
+| `autoscaler.coresPerReplica` | Number of cores in the cluster per CoreDNS replica | `256` |
+| `autoscaler.nodesPerReplica` | Number of nodes in the cluster per CoreDNS replica | `16` |
+| `autoscaler.min` | Min size of replicaCount | 0 |
+| `autoscaler.max` | Max size of replicaCount | 0 (aka no max) |
+| `autoscaler.includeUnschedulableNodes` | Should the replicas scale based on the total number or only schedulable nodes | `false` |
+| `autoscaler.preventSinglePointFailure` | If true does not allow single points of failure to form | `true` |
+| `autoscaler.customFlags` | A list of custom flags to pass into cluster-proportional-autoscaler | (no args) |
+| `autoscaler.image.repository` | The image repository to pull autoscaler from | registry.k8s.io/cpa/cluster-proportional-autoscaler |
+| `autoscaler.image.tag` | The image tag to pull autoscaler from | `1.8.5` |
+| `autoscaler.image.pullPolicy` | Image pull policy for the autoscaler | IfNotPresent |
+| `autoscaler.image.pullSecrets` | Specify container image pull secrets | `[]` |
+| `autoscaler.priorityClassName` | Optional priority class for the autoscaler pod. `priorityClassName` used if not set. | `""` |
+| `autoscaler.affinity` | Affinity settings for pod assignment for autoscaler | {} |
+| `autoscaler.nodeSelector` | Node labels for pod assignment for autoscaler | {} |
+| `autoscaler.tolerations` | Tolerations for pod assignment for autoscaler | [] |
+| `autoscaler.resources.limits.cpu` | Container maximum CPU for cluster-proportional-autoscaler | `20m` |
+| `autoscaler.resources.limits.memory` | Container maximum memory for cluster-proportional-autoscaler | `10Mi` |
+| `autoscaler.resources.requests.cpu` | Container requested CPU for cluster-proportional-autoscaler | `20m` |
+| `autoscaler.resources.requests.memory` | Container requested memory for cluster-proportional-autoscaler | `10Mi` |
+| `autoscaler.configmap.annotations` | Annotations to add to autoscaler config map. For example to stop CI renaming them | {} |
+| `autoscaler.livenessProbe.enabled` | Enable/disable the Liveness probe | `true` |
+| `autoscaler.livenessProbe.initialDelaySeconds` | Delay before liveness probe is initiated | `10` |
+| `autoscaler.livenessProbe.periodSeconds` | How often to perform the probe | `5` |
+| `autoscaler.livenessProbe.timeoutSeconds` | When the probe times out | `5` |
+| `autoscaler.livenessProbe.failureThreshold` | Minimum consecutive failures for the probe to be considered failed after having succeeded. | `3` |
+| `autoscaler.livenessProbe.successThreshold` | Minimum consecutive successes for the probe to be considered successful after having failed. | `1` |
+| `autoscaler.extraContainers` | Optional array of sidecar containers | [] |
+| `deployment.enabled` | Optionally disable the main deployment and its respective resources. | `true` |
+| `deployment.name` | Name of the deployment if `deployment.enabled` is true. Otherwise the name of an existing deployment for the autoscaler or HPA to target. | `""` |
+| `deployment.annotations` | Annotations to add to the main deployment | `{}` |
+| `deployment.selector` | Pod selector | `{}` |
+| `deployment.dnsPolicy` | DNS policy for the pod (Default, ClusterFirst, ClusterFirstWithHostNet, None) | `"Default"` |
+| `deployment.dnsConfig` | Custom DNS configuration (nameservers, searches, options). Required when dnsPolicy is "None" | `{}` |
+| `clusterRole.nameOverride` | ClusterRole name override | |
+
+See `values.yaml` for configuration notes. Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
+
+```console
+$ helm install coredns \
+ coredns/coredns \
+ --set rbac.create=false
+```
+
+The above command disables automatic creation of RBAC rules.
+
+Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
+
+```console
+$ helm install coredns coredns/coredns -f values.yaml
+```
+
+> **Tip**: You can use the default [values.yaml](/charts/coredns/values.yaml)
+
+## Caveats
+
+The chart will automatically determine which protocols to listen on based on
+the protocols you define in your zones. This means that you could potentially
+use both "TCP" and "UDP" on a single port.
+Some cloud environments like "GCE" or "Azure container service" cannot
+create external loadbalancers with both "TCP" and "UDP" protocols. So
+When deploying CoreDNS with `serviceType="LoadBalancer"` on such cloud
+environments, make sure you do not attempt to use both protocols at the same
+time.
+
+## Autoscaling
+
+By setting `autoscaler.enabled = true` a
+[cluster-proportional-autoscaler](https://github.com/kubernetes-incubator/cluster-proportional-autoscaler)
+will be deployed. This will default to a coredns replica for every 256 cores, or
+16 nodes in the cluster. These can be changed with `autoscaler.coresPerReplica`
+and `autoscaler.nodesPerReplica`. When cluster is using large nodes (with more
+cores), `coresPerReplica` should dominate. If using small nodes,
+`nodesPerReplica` should dominate.
+
+This also creates a ServiceAccount, ClusterRole, and ClusterRoleBinding for
+the autoscaler deployment.
+
+`replicaCount` is ignored if this is enabled.
+
+By setting `hpa.enabled = true` a [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)
+is enabled for Coredns deployment. This can scale number of replicas based on meitrics
+like CpuUtilization, MemoryUtilization or Custom ones.
+
+## Adopting existing CoreDNS resources
+
+If you do not want to delete the existing CoreDNS resources in your cluster, you can adopt the resources into a release as of Helm 3.2.0.
+
+You will also need to annotate and label your existing resources to allow Helm to assume control of them. See: https://github.com/helm/helm/pull/7649
+
+```
+annotations:
+ meta.helm.sh/release-name: your-release-name
+ meta.helm.sh/release-namespace: your-release-namespace
+labels:
+ app.kubernetes.io/managed-by: Helm
+```
+
+Once you have annotated and labeled all the resources this chart specifies, you may need to locally template the chart and compare against existing manifest to ensure there are no changes/diffs.s If
+you have been careful this should not diff and leave all the resources unmodified and now under management of helm.
+
+Some values to investigate to help adopt your existing manifests to the Helm release are:
+
+- k8sAppLabelOverride
+- service.name
+- customLabels
+
+In some cases, you will need to orphan delete your existing deployment since selector labels are immutable.
+
+```
+kubectl delete deployment coredns --cascade=orphan
+```
+
+This will delete the deployment and leave the replicaset to ensure no downtime in the cluster. You will need to manually delete the replicaset AFTER Helm has released a new deployment.
+
+Here is an example script to modify the annotations and labels of existing resources:
+
+WARNING: Substitute YOUR_HELM_RELEASE_NAME_HERE with the name of your helm release.
+
+```
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+for kind in config service serviceAccount; do
+ echo "setting annotations and labels on $kind/coredns"
+ kubectl -n kube-system annotate --overwrite $kind coredns meta.helm.sh/release-name=YOUR_HELM_RELEASE_NAME_HERE
+ kubectl -n kube-system annotate --overwrite $kind coredns meta.helm.sh/release-namespace=kube-system
+ kubectl -n kube-system label --overwrite $kind coredns app.kubernetes.io/managed-by=Helm
+done
+```
+
+NOTE: Sometimes, previous deployments of kube-dns that have been migrated to CoreDNS still use kube-dns for the service name as well.
+
+```
+echo "setting annotations and labels on service/kube-dns"
+kubectl -n kube-system annotate --overwrite service kube-dns meta.helm.sh/release-name=YOUR_HELM_RELEASE_NAME_HERE
+kubectl -n kube-system annotate --overwrite service kube-dns meta.helm.sh/release-namespace=kube-system
+kubectl -n kube-system label --overwrite service kube-dns app.kubernetes.io/managed-by=Helm
+```
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/NOTES.txt b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/NOTES.txt
new file mode 100644
index 00000000..3a1883b3
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/NOTES.txt
@@ -0,0 +1,30 @@
+{{- if .Values.isClusterService }}
+CoreDNS is now running in the cluster as a cluster-service.
+{{- else }}
+CoreDNS is now running in the cluster.
+It can be accessed using the below endpoint
+{{- if contains "NodePort" .Values.serviceType }}
+ export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "coredns.fullname" . }})
+ export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+ echo "$NODE_IP:$NODE_PORT"
+{{- else if contains "LoadBalancer" .Values.serviceType }}
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+ You can watch the status by running 'kubectl get svc -w {{ template "coredns.fullname" . }}'
+
+ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "coredns.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
+ echo $SERVICE_IP
+{{- else if contains "ClusterIP" .Values.serviceType }}
+ "{{ template "coredns.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local"
+ from within the cluster
+{{- end }}
+{{- end }}
+
+It can be tested with the following:
+
+1. Launch a Pod with DNS tools:
+
+kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
+
+2. Query the DNS server:
+
+/ # host kubernetes
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/_helpers.tpl b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/_helpers.tpl
new file mode 100644
index 00000000..2c2a9d61
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/_helpers.tpl
@@ -0,0 +1,236 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "coredns.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 "coredns.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 -}}
+
+{{/*
+Common labels
+*/}}
+{{- define "coredns.labels" -}}
+app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
+app.kubernetes.io/instance: {{ .Release.Name | quote }}
+helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
+{{- if .Values.isClusterService }}
+k8s-app: {{ template "coredns.k8sapplabel" . }}
+kubernetes.io/cluster-service: "true"
+kubernetes.io/name: "CoreDNS"
+{{- end }}
+app.kubernetes.io/name: {{ template "coredns.name" . }}
+{{- end -}}
+
+{{/*
+Common labels with autoscaler
+*/}}
+{{- define "coredns.labels.autoscaler" -}}
+app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
+app.kubernetes.io/instance: {{ .Release.Name | quote }}
+helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
+{{- if .Values.isClusterService }}
+k8s-app: {{ template "coredns.k8sapplabel" . }}-autoscaler
+kubernetes.io/cluster-service: "true"
+kubernetes.io/name: "CoreDNS"
+{{- end }}
+app.kubernetes.io/name: {{ template "coredns.name" . }}-autoscaler
+{{- end -}}
+
+{{/*
+Allow k8s-app label to be overridden
+*/}}
+{{- define "coredns.k8sapplabel" -}}
+{{- default .Chart.Name .Values.k8sAppLabelOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Generate the list of ports automatically from the server definitions
+*/}}
+{{- define "coredns.servicePorts" -}}
+ {{/* Set ports to be an empty dict */}}
+ {{- $ports := dict -}}
+ {{/* Iterate through each of the server blocks */}}
+ {{- range .Values.servers -}}
+ {{/* Capture port to avoid scoping awkwardness */}}
+ {{- $port := toString .port -}}
+ {{- $serviceport := default .port .servicePort -}}
+
+ {{/* If none of the server blocks has mentioned this port yet take note of it */}}
+ {{- if not (hasKey $ports $port) -}}
+ {{- $ports := set $ports $port (dict "istcp" false "isudp" false "serviceport" $serviceport) -}}
+ {{- end -}}
+ {{/* Retrieve the inner dict that holds the protocols for a given port */}}
+ {{- $innerdict := index $ports $port -}}
+
+ {{/*
+ Look at each of the zones and check which protocol they serve
+ At the moment the following are supported by CoreDNS:
+ UDP: dns://
+ TCP: tls://, grpc://, https://
+ */}}
+ {{- range .zones -}}
+ {{- if has (default "" .scheme) (list "dns://" "") -}}
+ {{/* Optionally enable tcp for this service as well */}}
+ {{- if eq (default false .use_tcp) true }}
+ {{- $innerdict := set $innerdict "istcp" true -}}
+ {{- end }}
+ {{- $innerdict := set $innerdict "isudp" true -}}
+ {{- end -}}
+
+ {{- if has (default "" .scheme) (list "tls://" "grpc://" "https://") -}}
+ {{- $innerdict := set $innerdict "istcp" true -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{/* If none of the zones specify scheme, default to dns:// udp */}}
+ {{- if and (not (index $innerdict "istcp")) (not (index $innerdict "isudp")) -}}
+ {{- $innerdict := set $innerdict "isudp" true -}}
+ {{- end -}}
+
+ {{- if .nodePort -}}
+ {{- $innerdict := set $innerdict "nodePort" .nodePort -}}
+ {{- end -}}
+
+ {{/* Write the dict back into the outer dict */}}
+ {{- $ports := set $ports $port $innerdict -}}
+ {{- end -}}
+
+ {{/* Write out the ports according to the info collected above */}}
+ {{- range $port, $innerdict := $ports -}}
+ {{- $portList := list -}}
+ {{- if index $innerdict "isudp" -}}
+ {{- $portList = append $portList (dict "port" (get $innerdict "serviceport") "protocol" "UDP" "name" (printf "udp-%s" $port) "targetPort" ($port | int)) -}}
+ {{- end -}}
+ {{- if index $innerdict "istcp" -}}
+ {{- $portList = append $portList (dict "port" (get $innerdict "serviceport") "protocol" "TCP" "name" (printf "tcp-%s" $port) "targetPort" ($port | int)) -}}
+ {{- end -}}
+
+ {{- range $portDict := $portList -}}
+ {{- if index $innerdict "nodePort" -}}
+ {{- $portDict := set $portDict "nodePort" (get $innerdict "nodePort" | int) -}}
+ {{- end -}}
+
+ {{- printf "- %s\n" (toJson $portDict) -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+
+{{/*
+Generate the list of ports automatically from the server definitions
+*/}}
+{{- define "coredns.containerPorts" -}}
+ {{/* Set ports to be an empty dict */}}
+ {{- $ports := dict -}}
+ {{/* Iterate through each of the server blocks */}}
+ {{- range .Values.servers -}}
+ {{/* Capture port to avoid scoping awkwardness */}}
+ {{- $port := toString .port -}}
+
+ {{/* If none of the server blocks has mentioned this port yet take note of it */}}
+ {{- if not (hasKey $ports $port) -}}
+ {{- $ports := set $ports $port (dict "istcp" false "isudp" false) -}}
+ {{- end -}}
+ {{/* Retrieve the inner dict that holds the protocols for a given port */}}
+ {{- $innerdict := index $ports $port -}}
+
+ {{/*
+ Look at each of the zones and check which protocol they serve
+ At the moment the following are supported by CoreDNS:
+ UDP: dns://
+ TCP: tls://, grpc://, https://
+ */}}
+ {{- range .zones -}}
+ {{- if has (default "" .scheme) (list "dns://" "") -}}
+ {{/* Optionally enable tcp for this service as well */}}
+ {{- if eq (default false .use_tcp) true }}
+ {{- $innerdict := set $innerdict "istcp" true -}}
+ {{- end }}
+ {{- $innerdict := set $innerdict "isudp" true -}}
+ {{- end -}}
+
+ {{- if has (default "" .scheme) (list "tls://" "grpc://" "https://") -}}
+ {{- $innerdict := set $innerdict "istcp" true -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{/* If none of the zones specify scheme, default to dns:// udp */}}
+ {{- if and (not (index $innerdict "istcp")) (not (index $innerdict "isudp")) -}}
+ {{- $innerdict := set $innerdict "isudp" true -}}
+ {{- end -}}
+
+ {{- if .hostPort -}}
+ {{- $innerdict := set $innerdict "hostPort" .hostPort -}}
+ {{- end -}}
+
+ {{/* Write the dict back into the outer dict */}}
+ {{- $ports := set $ports $port $innerdict -}}
+
+ {{/* Fetch port from the configuration if the prometheus section exists */}}
+ {{- range .plugins -}}
+ {{- if eq .name "prometheus" -}}
+ {{- $prometheus_addr := toString .parameters -}}
+ {{- $prometheus_addr_list := regexSplit ":" $prometheus_addr -1 -}}
+ {{- $prometheus_port := index $prometheus_addr_list 1 -}}
+ {{- $ports := set $ports $prometheus_port (dict "istcp" true "isudp" false) -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{/* Write out the ports according to the info collected above */}}
+ {{- range $port, $innerdict := $ports -}}
+ {{- $portList := list -}}
+ {{- if index $innerdict "isudp" -}}
+ {{- $portList = append $portList (dict "containerPort" ($port | int) "protocol" "UDP" "name" (printf "udp-%s" $port)) -}}
+ {{- end -}}
+ {{- if index $innerdict "istcp" -}}
+ {{- $portList = append $portList (dict "containerPort" ($port | int) "protocol" "TCP" "name" (printf "tcp-%s" $port)) -}}
+ {{- end -}}
+
+ {{- range $portDict := $portList -}}
+ {{- if index $innerdict "hostPort" -}}
+ {{- $portDict := set $portDict "hostPort" (get $innerdict "hostPort" | int) -}}
+ {{- end -}}
+
+ {{- printf "- %s\n" (toJson $portDict) -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "coredns.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create -}}
+ {{ default (include "coredns.fullname" .) .Values.serviceAccount.name }}
+{{- else -}}
+ {{ default "default" .Values.serviceAccount.name }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "coredns.clusterRoleName" -}}
+{{- if and .Values.clusterRole .Values.clusterRole.nameOverride -}}
+ {{ .Values.clusterRole.nameOverride }}
+{{- else -}}
+ {{ template "coredns.fullname" . }}
+{{- end -}}
+{{- end -}}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrole-autoscaler.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrole-autoscaler.yaml
new file mode 100644
index 00000000..9bf57d23
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrole-autoscaler.yaml
@@ -0,0 +1,30 @@
+{{- if and .Values.autoscaler.enabled .Values.rbac.create }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ template "coredns.fullname" . }}-autoscaler
+ labels: {{- include "coredns.labels.autoscaler" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+rules:
+ - apiGroups: [""]
+ resources: ["nodes"]
+ verbs: ["list","watch"]
+ - apiGroups: [""]
+ resources: ["replicationcontrollers/scale"]
+ verbs: ["get", "update"]
+ - apiGroups: ["extensions", "apps"]
+ resources: ["deployments/scale", "replicasets/scale"]
+ verbs: ["get", "update"]
+# Remove the configmaps rule once below issue is fixed:
+# kubernetes-incubator/cluster-proportional-autoscaler#16
+ - apiGroups: [""]
+ resources: ["configmaps"]
+ verbs: ["get", "create"]
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrole.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrole.yaml
new file mode 100644
index 00000000..63ba17fd
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrole.yaml
@@ -0,0 +1,50 @@
+{{- if and .Values.deployment.enabled .Values.rbac.create }}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ template "coredns.clusterRoleName" . }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - endpoints
+ - services
+ - pods
+ - namespaces
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - list
+ - watch
+{{- if .Values.rbac.pspEnable }}
+- apiGroups:
+ - policy
+ - extensions
+ resources:
+ - podsecuritypolicies
+ verbs:
+ - use
+ resourceNames:
+ - {{ template "coredns.fullname" . }}
+{{- end }}
+{{- if .Values.rbac.multiclusterEnable }}
+- apiGroups:
+ - multicluster.x-k8s.io
+ resources:
+ - serviceexports
+ - serviceimports
+ verbs:
+ - list
+ - watch
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrolebinding-autoscaler.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrolebinding-autoscaler.yaml
new file mode 100644
index 00000000..ef32306f
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrolebinding-autoscaler.yaml
@@ -0,0 +1,23 @@
+{{- if and .Values.autoscaler.enabled .Values.rbac.create }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ template "coredns.fullname" . }}-autoscaler
+ labels: {{- include "coredns.labels.autoscaler" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ template "coredns.fullname" . }}-autoscaler
+subjects:
+- kind: ServiceAccount
+ name: {{ template "coredns.fullname" . }}-autoscaler
+ namespace: {{ .Release.Namespace }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrolebinding.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrolebinding.yaml
new file mode 100644
index 00000000..4537c937
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/clusterrolebinding.yaml
@@ -0,0 +1,19 @@
+{{- if and .Values.deployment.enabled .Values.rbac.create }}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ template "coredns.clusterRoleName" . }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ template "coredns.clusterRoleName" . }}
+subjects:
+- kind: ServiceAccount
+ name: {{ template "coredns.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/configmap-autoscaler.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/configmap-autoscaler.yaml
new file mode 100644
index 00000000..b10eb59e
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/configmap-autoscaler.yaml
@@ -0,0 +1,33 @@
+{{- if .Values.autoscaler.enabled }}
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: {{ template "coredns.fullname" . }}-autoscaler
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels.autoscaler" . | nindent 4 }}
+ {{- if .Values.customLabels }}
+ {{- toYaml .Values.customLabels | nindent 4 }}
+ {{- end }}
+ {{- if or .Values.autoscaler.configmap.annotations .Values.customAnnotations }}
+ annotations:
+ {{- if .Values.customAnnotations }}
+ {{- toYaml .Values.customAnnotations | nindent 4 }}
+ {{- end }}
+ {{- if .Values.autoscaler.configmap.annotations -}}
+ {{ toYaml .Values.autoscaler.configmap.annotations | nindent 4 }}
+ {{- end }}
+ {{- end }}
+data:
+ # When cluster is using large nodes(with more cores), "coresPerReplica" should dominate.
+ # If using small nodes, "nodesPerReplica" should dominate.
+ linear: |-
+ {
+ "coresPerReplica": {{ .Values.autoscaler.coresPerReplica | float64 }},
+ "nodesPerReplica": {{ .Values.autoscaler.nodesPerReplica | float64 }},
+ "preventSinglePointFailure": {{ .Values.autoscaler.preventSinglePointFailure }},
+ "min": {{ .Values.autoscaler.min | int }},
+ "max": {{ .Values.autoscaler.max | int }},
+ "includeUnschedulableNodes": {{ .Values.autoscaler.includeUnschedulableNodes }}
+ }
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/configmap.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/configmap.yaml
new file mode 100644
index 00000000..e37858c1
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/configmap.yaml
@@ -0,0 +1,37 @@
+{{- if .Values.deployment.enabled }}
+{{- if not .Values.deployment.skipConfig }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ template "coredns.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+data:
+ Corefile: |-
+ {{- range $name, $conf := .Values.extraConfig }}
+ {{ $name }}{{ if $conf.parameters }} {{ $conf.parameters }}{{ end }}
+ {{- end }}
+ {{ range .Values.servers }}
+ {{- range $idx, $zone := .zones }}{{ if $idx }} {{ else }}{{ end }}{{ default "" $zone.scheme }}{{ default "." $zone.zone }}{{ else }}.{{ end -}}
+ {{- if .port }}:{{ .port }} {{ end -}}
+ {
+ {{- range .plugins }}
+ {{ .name }}{{ if .parameters }} {{ .parameters }}{{ end }}{{ if .configBlock }} {
+{{ .configBlock | indent 12 }}
+ }{{ end }}
+ {{- end }}
+ }
+ {{ end }}
+ {{- range .Values.zoneFiles }}
+ {{ .filename }}: {{ toYaml .contents | indent 4 }}
+ {{- end }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/deployment-autoscaler.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/deployment-autoscaler.yaml
new file mode 100644
index 00000000..bdbcaad2
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/deployment-autoscaler.yaml
@@ -0,0 +1,98 @@
+{{- if and (.Values.autoscaler.enabled) (not .Values.hpa.enabled) }}
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ template "coredns.fullname" . }}-autoscaler
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels.autoscaler" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+spec:
+ selector:
+ matchLabels:
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ {{- if .Values.isClusterService }}
+ k8s-app: {{ template "coredns.k8sapplabel" . }}-autoscaler
+ {{- end }}
+ app.kubernetes.io/name: {{ template "coredns.name" . }}-autoscaler
+ template:
+ metadata:
+ labels:
+ {{- if .Values.isClusterService }}
+ {{- if not (hasKey .Values.customLabels "k8s-app")}}
+ k8s-app: {{ template "coredns.k8sapplabel" . }}-autoscaler
+ {{- end }}
+ {{- end }}
+ app.kubernetes.io/name: {{ template "coredns.name" . }}-autoscaler
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ {{- if .Values.customLabels }}
+ {{ toYaml .Values.customLabels | nindent 8 }}
+ {{- end }}
+ annotations:
+ checksum/configmap: {{ include (print $.Template.BasePath "/configmap-autoscaler.yaml") . | sha256sum }}
+ {{- if .Values.isClusterService }}
+ scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
+ {{- end }}
+ {{- with .Values.autoscaler.podAnnotations }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ serviceAccountName: {{ template "coredns.fullname" . }}-autoscaler
+ {{- $priorityClassName := default .Values.priorityClassName .Values.autoscaler.priorityClassName }}
+ {{- if $priorityClassName }}
+ priorityClassName: {{ $priorityClassName | quote }}
+ {{- end }}
+ {{- if .Values.autoscaler.affinity }}
+ affinity:
+{{ toYaml .Values.autoscaler.affinity | indent 8 }}
+ {{- end }}
+ {{- if .Values.autoscaler.tolerations }}
+ tolerations:
+{{ toYaml .Values.autoscaler.tolerations | indent 8 }}
+ {{- end }}
+ {{- if .Values.autoscaler.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.autoscaler.nodeSelector | indent 8 }}
+ {{- end }}
+ {{- if .Values.autoscaler.image.pullSecrets }}
+ imagePullSecrets:
+{{ toYaml .Values.autoscaler.image.pullSecrets | indent 8 }}
+ {{- end }}
+ containers:
+ - name: autoscaler
+ image: "{{ .Values.autoscaler.image.repository }}:{{ .Values.autoscaler.image.tag }}"
+ imagePullPolicy: {{ .Values.autoscaler.image.pullPolicy }}
+ resources:
+{{ toYaml .Values.autoscaler.resources | indent 10 }}
+ {{- if .Values.autoscaler.livenessProbe.enabled }}
+ livenessProbe:
+ httpGet:
+ path: /healthz
+ port: 8080
+ scheme: HTTP
+ initialDelaySeconds: {{ .Values.autoscaler.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.autoscaler.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.autoscaler.livenessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.autoscaler.livenessProbe.successThreshold }}
+ failureThreshold: {{ .Values.autoscaler.livenessProbe.failureThreshold }}
+ {{- end }}
+ command:
+ - /cluster-proportional-autoscaler
+ - --namespace={{ .Release.Namespace }}
+ - --configmap={{ template "coredns.fullname" . }}-autoscaler
+ - --target=Deployment/{{ default (include "coredns.fullname" .) .Values.deployment.name }}
+ - --logtostderr=true
+ - --v=2
+ {{- if .Values.autoscaler.customFlags }}
+{{ toYaml .Values.autoscaler.customFlags | indent 10 }}
+ {{- end }}
+{{- if .Values.autoscaler.extraContainers }}
+{{ toYaml .Values.autoscaler.extraContainers | indent 6 }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/deployment.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/deployment.yaml
new file mode 100644
index 00000000..62d9c768
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/deployment.yaml
@@ -0,0 +1,187 @@
+{{- if .Values.deployment.enabled }}
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ default (include "coredns.fullname" .) .Values.deployment.name }}
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+ app.kubernetes.io/version: {{ .Values.image.tag | default .Chart.AppVersion | replace ":" "-" | replace "@" "_" | trunc 63 | trimSuffix "-" | quote }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+ {{- if or .Values.deployment.annotations .Values.customAnnotations }}
+ annotations:
+ {{- if .Values.customAnnotations }}
+ {{- toYaml .Values.customAnnotations | nindent 4 }}
+ {{- end }}
+ {{- if .Values.deployment.annotations }}
+ {{- toYaml .Values.deployment.annotations | nindent 4 }}
+ {{- end }}
+ {{- end }}
+spec:
+ {{- if and (not .Values.autoscaler.enabled) (not .Values.hpa.enabled) }}
+ replicas: {{ .Values.replicaCount }}
+ {{- end }}
+ strategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxUnavailable: {{ .Values.rollingUpdate.maxUnavailable }}
+ maxSurge: {{ .Values.rollingUpdate.maxSurge }}
+ selector:
+ {{- if .Values.deployment.selector }}
+ {{- toYaml .Values.deployment.selector | nindent 4 }}
+ {{- else }}
+ matchLabels:
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ {{- if .Values.isClusterService }}
+ k8s-app: {{ template "coredns.k8sapplabel" . }}
+ {{- end }}
+ app.kubernetes.io/name: {{ template "coredns.name" . }}
+ {{- end }}
+ template:
+ metadata:
+ labels:
+ {{- if .Values.isClusterService }}
+ k8s-app: {{ template "coredns.k8sapplabel" . }}
+ {{- end }}
+ app.kubernetes.io/name: {{ template "coredns.name" . }}
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 8 }}
+{{- end }}
+{{- if .Values.podLabels }}
+{{ toYaml .Values.podLabels | indent 8 }}
+{{- end }}
+ annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ {{- if .Values.isClusterService }}
+ scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
+ {{- end }}
+{{- if .Values.podAnnotations }}
+{{ toYaml .Values.podAnnotations | indent 8 }}
+{{- end }}
+ spec:
+ {{- if .Values.podSecurityContext }}
+ securityContext: {{ toYaml .Values.podSecurityContext | nindent 8 }}
+ {{- end }}
+ {{- if .Values.terminationGracePeriodSeconds }}
+ terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }}
+ {{- end }}
+ serviceAccountName: {{ template "coredns.serviceAccountName" . }}
+ {{- if eq .Values.automountServiceAccountToken false }}
+ automountServiceAccountToken: false
+ {{- end }}
+ {{- if .Values.priorityClassName }}
+ priorityClassName: {{ .Values.priorityClassName | quote }}
+ {{- end }}
+ {{- if .Values.isClusterService }}
+ dnsPolicy: {{ .Values.deployment.dnsPolicy }}
+ {{- end }}
+ {{- if and (eq .Values.deployment.dnsPolicy "None") (not .Values.deployment.dnsConfig) }}
+ {{- fail "dnsConfig is required when dnsPolicy is set to None" }}
+ {{- end }}
+ {{- with .Values.deployment.dnsConfig }}
+ dnsConfig:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- if .Values.affinity }}
+ affinity:
+{{ tpl (toYaml .Values.affinity) $ | indent 8 }}
+ {{- end }}
+ {{- if .Values.topologySpreadConstraints }}
+ topologySpreadConstraints:
+{{ tpl (toYaml .Values.topologySpreadConstraints) $ | indent 8 }}
+ {{- end }}
+ {{- if .Values.tolerations }}
+ tolerations:
+{{ toYaml .Values.tolerations | indent 8 }}
+ {{- end }}
+ {{- if .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.nodeSelector | indent 8 }}
+ {{- end }}
+ {{- if .Values.image.pullSecrets }}
+ imagePullSecrets:
+{{ toYaml .Values.image.pullSecrets | indent 8 }}
+ {{- end }}
+ {{- if .Values.initContainers }}
+ initContainers:
+{{ toYaml .Values.initContainers | indent 8 }}
+ {{- end }}
+ containers:
+ - name: "coredns"
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ args: [ "-conf", "/etc/coredns/Corefile" ]
+ volumeMounts:
+ - name: config-volume
+ mountPath: /etc/coredns
+{{- range .Values.extraSecrets }}
+ - name: {{ .name }}
+ mountPath: {{ .mountPath }}
+ readOnly: true
+{{- end }}
+{{- if .Values.extraVolumeMounts }}
+{{- toYaml .Values.extraVolumeMounts | nindent 8}}
+{{- end }}
+{{- if .Values.env }}
+ env:
+{{- toYaml .Values.env | nindent 10}}
+{{- end }}
+ resources:
+{{ toYaml .Values.resources | indent 10 }}
+ ports:
+{{ include "coredns.containerPorts" . | indent 8 }}
+ {{- if .Values.livenessProbe.enabled }}
+ livenessProbe:
+ httpGet:
+ path: /health
+ port: 8080
+ scheme: HTTP
+ initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.livenessProbe.successThreshold }}
+ failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
+ {{- end }}
+ {{- if .Values.readinessProbe.enabled }}
+ readinessProbe:
+ httpGet:
+ path: /ready
+ port: 8181
+ scheme: HTTP
+ initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.readinessProbe.successThreshold }}
+ failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
+ {{- end }}
+{{- if .Values.securityContext }}
+ securityContext:
+{{- toYaml .Values.securityContext | nindent 10 }}
+{{- end }}
+{{- if .Values.extraContainers }}
+{{ toYaml .Values.extraContainers | indent 6 }}
+{{- end }}
+ volumes:
+ - name: config-volume
+ configMap:
+ name: {{ template "coredns.fullname" . }}
+ items:
+ - key: Corefile
+ path: Corefile
+ {{ range .Values.zoneFiles }}
+ - key: {{ .filename }}
+ path: {{ .filename }}
+ {{ end }}
+{{- range .Values.extraSecrets }}
+ - name: {{ .name }}
+ secret:
+ secretName: {{ .name }}
+ defaultMode: {{ default 400 .defaultMode }}
+{{- end }}
+{{- if .Values.extraVolumes }}
+{{ toYaml .Values.extraVolumes | indent 8 }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/hpa.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/hpa.yaml
new file mode 100644
index 00000000..7fcc9931
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/hpa.yaml
@@ -0,0 +1,33 @@
+{{- if and (.Values.hpa.enabled) (not .Values.autoscaler.enabled) }}
+---
+{{- if .Capabilities.APIVersions.Has "autoscaling/v2" }}
+apiVersion: autoscaling/v2
+{{- else }}
+apiVersion: autoscaling/v2beta2
+{{- end }}
+kind: HorizontalPodAutoscaler
+metadata:
+ name: {{ template "coredns.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+spec:
+ scaleTargetRef:
+ apiVersion: apps/v1
+ kind: Deployment
+ name: {{ default (include "coredns.fullname" .) .Values.deployment.name }}
+ minReplicas: {{ .Values.hpa.minReplicas }}
+ maxReplicas: {{ .Values.hpa.maxReplicas }}
+ metrics:
+{{ toYaml .Values.hpa.metrics | indent 4 }}
+{{- if .Values.hpa.behavior }}
+ behavior:
+{{ toYaml .Values.hpa.behavior | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/poddisruptionbudget.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/poddisruptionbudget.yaml
new file mode 100644
index 00000000..136d8049
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/poddisruptionbudget.yaml
@@ -0,0 +1,26 @@
+{{- if and .Values.deployment.enabled .Values.podDisruptionBudget -}}
+apiVersion: policy/v1
+kind: PodDisruptionBudget
+metadata:
+ name: {{ template "coredns.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+spec:
+ {{- if not .Values.podDisruptionBudget.selector }}
+ selector:
+ matchLabels:
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ {{- if .Values.isClusterService }}
+ k8s-app: {{ template "coredns.k8sapplabel" . }}
+ {{- end }}
+ app.kubernetes.io/name: {{ template "coredns.name" . }}
+ {{- end }}
+{{ toYaml .Values.podDisruptionBudget | indent 2 }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/service-metrics.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/service-metrics.yaml
new file mode 100644
index 00000000..0ae9a157
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/service-metrics.yaml
@@ -0,0 +1,39 @@
+{{- if and .Values.deployment.enabled .Values.prometheus.service.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ template "coredns.fullname" . }}-metrics
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+ app.kubernetes.io/component: metrics
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+ {{- if or .Values.prometheus.service.annotations .Values.service.annotations .Values.customAnnotations }}
+ annotations:
+ {{- if .Values.prometheus.service.annotations }}
+ {{- toYaml .Values.prometheus.service.annotations | nindent 4 }}
+ {{- end }}
+ {{- if .Values.service.annotations }}
+ {{- toYaml .Values.service.annotations | nindent 4 }}
+ {{- end }}
+ {{- if .Values.customAnnotations }}
+ {{- toYaml .Values.customAnnotations | nindent 4 }}
+ {{- end }}
+ {{- end }}
+spec:
+ selector:
+ {{- if .Values.prometheus.service.selector }}
+ {{- toYaml .Values.prometheus.service.selector | nindent 4 }}
+ {{- else }}
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ {{- if .Values.isClusterService }}
+ k8s-app: {{ template "coredns.k8sapplabel" . }}
+ {{- end }}
+ app.kubernetes.io/name: {{ template "coredns.name" . }}
+ {{- end }}
+ ports:
+ - name: metrics
+ port: 9153
+ targetPort: 9153
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/service.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/service.yaml
new file mode 100644
index 00000000..1247d09b
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/service.yaml
@@ -0,0 +1,61 @@
+{{- if .Values.deployment.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ default (include "coredns.fullname" .) .Values.service.name }}
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+ {{- if or .Values.service.annotations .Values.customAnnotations }}
+ annotations:
+ {{- if .Values.service.annotations }}
+ {{- toYaml .Values.service.annotations | nindent 4 }}
+ {{- end }}
+ {{- if .Values.customAnnotations }}
+ {{- toYaml .Values.customAnnotations | nindent 4 }}
+ {{- end }}
+ {{- end }}
+spec:
+ selector:
+ {{- if .Values.service.selector }}
+ {{- toYaml .Values.service.selector | nindent 4 }}
+ {{- else }}
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ {{- if .Values.isClusterService }}
+ k8s-app: {{ template "coredns.k8sapplabel" . }}
+ {{- end }}
+ app.kubernetes.io/name: {{ template "coredns.name" . }}
+ {{- end }}
+ {{- if .Values.service.clusterIP }}
+ clusterIP: {{ .Values.service.clusterIP }}
+ {{- end }}
+ {{- if .Values.service.clusterIPs }}
+ clusterIPs:
+ {{ toYaml .Values.service.clusterIPs | nindent 4 }}
+ {{- end }}
+ {{- if .Values.service.externalIPs }}
+ externalIPs:
+ {{- toYaml .Values.service.externalIPs | nindent 4 }}
+ {{- end }}
+ {{- if .Values.service.externalTrafficPolicy }}
+ externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
+ {{- end }}
+ {{- if .Values.service.loadBalancerIP }}
+ loadBalancerIP: {{ .Values.service.loadBalancerIP }}
+ {{- end }}
+ {{- if .Values.service.loadBalancerClass }}
+ loadBalancerClass: {{ .Values.service.loadBalancerClass }}
+ {{- end }}
+ ports:
+{{ include "coredns.servicePorts" . | indent 2 -}}
+ type: {{ default "ClusterIP" .Values.serviceType }}
+ {{- if .Values.service.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ .Values.service.ipFamilyPolicy }}
+ {{- end }}
+{{- end }}
+ {{- if .Values.service.trafficDistribution }}
+ trafficDistribution: {{ .Values.service.trafficDistribution }}
+ {{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/serviceaccount-autoscaler.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/serviceaccount-autoscaler.yaml
new file mode 100644
index 00000000..bcef6baf
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/serviceaccount-autoscaler.yaml
@@ -0,0 +1,20 @@
+{{- if and .Values.autoscaler.enabled .Values.rbac.create }}
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ template "coredns.fullname" . }}-autoscaler
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels.autoscaler" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+{{- if .Values.autoscaler.image.pullSecrets }}
+imagePullSecrets:
+{{ toYaml .Values.autoscaler.image.pullSecrets | indent 2 }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/serviceaccount.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/serviceaccount.yaml
new file mode 100644
index 00000000..25f08930
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/serviceaccount.yaml
@@ -0,0 +1,24 @@
+{{- if and .Values.deployment.enabled .Values.serviceAccount.create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ template "coredns.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+{{- if .Values.customLabels }}
+{{ toYaml .Values.customLabels | indent 4 }}
+{{- end }}
+ {{- if or .Values.serviceAccount.annotations .Values.customAnnotations }}
+ annotations:
+ {{- if .Values.customAnnotations }}
+ {{- toYaml .Values.customAnnotations | nindent 4 }}
+ {{- end }}
+ {{- if .Values.serviceAccount.annotations }}
+ {{- toYaml .Values.serviceAccount.annotations | nindent 4 }}
+ {{- end }}
+ {{- end }}
+{{- if .Values.image.pullSecrets }}
+imagePullSecrets:
+{{ toYaml .Values.image.pullSecrets | indent 2 }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/servicemonitor.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/servicemonitor.yaml
new file mode 100644
index 00000000..53f8bdb5
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/templates/servicemonitor.yaml
@@ -0,0 +1,40 @@
+{{- if and .Values.deployment.enabled .Values.prometheus.monitor.enabled }}
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+ name: {{ template "coredns.fullname" . }}
+ {{- if .Values.prometheus.monitor.namespace }}
+ namespace: {{ .Values.prometheus.monitor.namespace }}
+ {{- end }}
+ labels: {{- include "coredns.labels" . | nindent 4 }}
+ {{- if .Values.prometheus.monitor.additionalLabels }}
+{{ toYaml .Values.prometheus.monitor.additionalLabels | indent 4 }}
+ {{- end }}
+{{- with .Values.customAnnotations }}
+ annotations:
+{{- toYaml . | nindent 4 }}
+{{- end }}
+spec:
+ {{- if ne .Values.prometheus.monitor.namespace .Release.Namespace }}
+ namespaceSelector:
+ matchNames:
+ - {{ .Release.Namespace }}
+ {{- end }}
+ selector:
+ {{- if .Values.prometheus.monitor.selector }}
+ {{- toYaml .Values.prometheus.monitor.selector | nindent 4 }}
+ {{- else }}
+ matchLabels:
+ app.kubernetes.io/instance: {{ .Release.Name | quote }}
+ {{- if .Values.isClusterService }}
+ k8s-app: {{ template "coredns.k8sapplabel" . }}
+ {{- end }}
+ app.kubernetes.io/name: {{ template "coredns.name" . }}
+ app.kubernetes.io/component: metrics
+ {{- end }}
+ endpoints:
+ - port: metrics
+ {{- if .Values.prometheus.monitor.interval }}
+ interval: {{ .Values.prometheus.monitor.interval }}
+ {{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrole-autoscaler_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrole-autoscaler_test.yaml
new file mode 100644
index 00000000..fabda4e2
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrole-autoscaler_test.yaml
@@ -0,0 +1,62 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: test ClusterRole for autoscaler
+
+templates:
+ - templates/clusterrole-autoscaler.yaml
+
+tests:
+ - it: should render ClusterRole when autoscaler and rbac are enabled
+ set:
+ autoscaler:
+ enabled: true
+ rbac:
+ create: true
+ customLabels:
+ team: devops
+ customAnnotations:
+ note: autoscaler
+
+ asserts:
+ - hasDocuments:
+ count: 1
+
+ - isKind:
+ of: ClusterRole
+
+ - matchRegex:
+ path: metadata.name
+ pattern: ^.*-autoscaler$
+
+ - equal:
+ path: rules[0].resources
+ value: ["nodes"]
+
+ - equal:
+ path: metadata.labels.team
+ value: devops
+
+ - equal:
+ path: metadata.annotations.note
+ value: autoscaler
+
+ - it: should not render ClusterRole if autoscaler is disabled
+ set:
+ autoscaler:
+ enabled: false
+ rbac:
+ create: true
+
+ asserts:
+ - hasDocuments:
+ count: 0
+
+ - it: should not render ClusterRole if rbac is disabled
+ set:
+ autoscaler:
+ enabled: true
+ rbac:
+ create: false
+
+ asserts:
+ - hasDocuments:
+ count: 0
\ No newline at end of file
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrole_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrole_test.yaml
new file mode 100644
index 00000000..c7fa44b5
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrole_test.yaml
@@ -0,0 +1,53 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: ClusterRole RBAC Test
+
+templates:
+ - templates/clusterrole.yaml
+
+set:
+ deployment:
+ enabled: true
+ rbac:
+ create: true
+ pspEnable: true
+
+
+tests:
+ - it: should render ClusterRole with correct name and rules
+ asserts:
+ - isKind:
+ of: ClusterRole
+ - equal:
+ path: metadata.name
+ value: RELEASE-NAME-coredns
+ - contains:
+ path: rules[0].resources
+ content: endpoints
+ - contains:
+ path: rules[0].resources
+ content: services
+ - contains:
+ path: rules[0].resources
+ content: pods
+ - contains:
+ path: rules[0].resources
+ content: namespaces
+
+ - equal:
+ path: rules[1].apiGroups[0]
+ value: discovery.k8s.io
+ - contains:
+ path: rules[1].resources
+ content: endpointslices
+ - equal:
+ path: rules[2].apiGroups[0]
+ value: policy
+ - equal:
+ path: rules[2].apiGroups[1]
+ value: extensions
+ - contains:
+ path: rules[2].resources
+ content: podsecuritypolicies
+ - contains:
+ path: rules[2].verbs
+ content: use
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrolebinding_autoscaler_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrolebinding_autoscaler_test.yaml
new file mode 100644
index 00000000..70380198
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrolebinding_autoscaler_test.yaml
@@ -0,0 +1,60 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: ClusterRoleBinding Autoscaler Test
+
+templates:
+ - templates/clusterrolebinding-autoscaler.yaml
+
+set:
+ autoscaler:
+ enabled: true
+ rbac:
+ create: true
+ customLabels:
+ my-custom-label: "enabled"
+ customAnnotations:
+ custom-annotation: "test-value"
+
+release:
+ namespace: test-namespace
+
+tests:
+ - it: should render ClusterRoleBinding with correct metadata and subject
+ asserts:
+ - isKind:
+ of: ClusterRoleBinding
+
+ - equal:
+ path: metadata.name
+ value: RELEASE-NAME-coredns-autoscaler
+
+ - equal:
+ path: metadata.labels.my-custom-label
+ value: enabled
+
+ - equal:
+ path: metadata.annotations.custom-annotation
+ value: test-value
+
+ - equal:
+ path: roleRef.apiGroup
+ value: rbac.authorization.k8s.io
+
+ - equal:
+ path: roleRef.kind
+ value: ClusterRole
+
+ - equal:
+ path: roleRef.name
+ value: RELEASE-NAME-coredns-autoscaler
+
+ - equal:
+ path: subjects[0].kind
+ value: ServiceAccount
+
+ - equal:
+ path: subjects[0].name
+ value: RELEASE-NAME-coredns-autoscaler
+
+ - equal:
+ path: subjects[0].namespace
+ value: test-namespace
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrolebinding_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrolebinding_test.yaml
new file mode 100644
index 00000000..1ae74be9
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/clusterrolebinding_test.yaml
@@ -0,0 +1,52 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: ClusterRoleBinding Test
+
+templates:
+ - templates/clusterrolebinding.yaml
+
+set:
+ deployment:
+ enabled: true
+ rbac:
+ create: true
+
+ nameOverride: coredns-test
+ serviceAccount:
+ name: coredns-test
+
+release:
+ namespace: test-namespace
+
+tests:
+ - it: should render ClusterRoleBinding with correct metadata and subjects
+ asserts:
+ - isKind:
+ of: ClusterRoleBinding
+
+ - equal:
+ path: metadata.name
+ value: RELEASE-NAME-coredns-test
+
+ - equal:
+ path: roleRef.apiGroup
+ value: rbac.authorization.k8s.io
+
+ - equal:
+ path: roleRef.kind
+ value: ClusterRole
+
+ - equal:
+ path: roleRef.name
+ value: RELEASE-NAME-coredns-test
+
+ - equal:
+ path: subjects[0].kind
+ value: ServiceAccount
+
+ - equal:
+ path: subjects[0].name
+ value: coredns-test
+
+ - equal:
+ path: subjects[0].namespace
+ value: test-namespace
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/configmap_autoscaler_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/configmap_autoscaler_test.yaml
new file mode 100644
index 00000000..66bd4ee6
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/configmap_autoscaler_test.yaml
@@ -0,0 +1,75 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: ConfigMap Autoscaler Test
+
+templates:
+ - templates/configmap-autoscaler.yaml
+
+set:
+ autoscaler:
+ enabled: true
+ coresPerReplica: 256
+ nodesPerReplica: 32
+ preventSinglePointFailure: true
+ min: 1
+ max: 10
+ includeUnschedulableNodes: false
+ configmap:
+ annotations:
+ autoscaler-note: "used by cluster-autoscaler"
+ customLabels:
+ my-custom-label: "enabled"
+ customAnnotations:
+ custom-annotation: "test-value"
+
+release:
+ namespace: test-namespace
+
+tests:
+ - it: should render ConfigMap with correct metadata and autoscaler values
+ asserts:
+ - isKind:
+ of: ConfigMap
+
+ - equal:
+ path: metadata.name
+ value: RELEASE-NAME-coredns-autoscaler
+
+ - equal:
+ path: metadata.namespace
+ value: test-namespace
+
+ - equal:
+ path: metadata.labels.my-custom-label
+ value: enabled
+
+ - equal:
+ path: metadata.annotations.custom-annotation
+ value: test-value
+
+ - equal:
+ path: metadata.annotations.autoscaler-note
+ value: used by cluster-autoscaler
+
+ - matchRegex:
+ path: data.linear
+ pattern: '"coresPerReplica": 256'
+
+ - matchRegex:
+ path: data.linear
+ pattern: '"nodesPerReplica": 32'
+
+ - matchRegex:
+ path: data.linear
+ pattern: '"preventSinglePointFailure": true'
+
+ - matchRegex:
+ path: data.linear
+ pattern: '"min": 1'
+
+ - matchRegex:
+ path: data.linear
+ pattern: '"max": 10'
+
+ - matchRegex:
+ path: data.linear
+ pattern: '"includeUnschedulableNodes": false'
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/configmap_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/configmap_test.yaml
new file mode 100644
index 00000000..f6c208ba
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/configmap_test.yaml
@@ -0,0 +1,41 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: "Test coredns configmap generation"
+templates:
+ - templates/configmap.yaml
+
+tests:
+ - it: "should create a configmap with custom Corefile and zone files"
+ set:
+ deployment:
+ enabled: true
+ skipConfig: false
+ customAnnotations:
+ custom-annotation: "test-value"
+ servers:
+ - zones:
+ - zone: "example.com"
+ scheme: "."
+ port: 5353
+ plugins:
+ - name: forward
+ parameters: ". 8.8.8.8"
+ zoneFiles:
+ - filename: db.example.com
+ contents: |
+ example.com. IN A 192.0.2.1
+
+ asserts:
+ - isKind:
+ of: ConfigMap
+ - matchRegex:
+ path: data.Corefile
+ pattern: "example\\.com:5353 \\{"
+ - matchRegex:
+ path: data.Corefile
+ pattern: "forward \\. 8\\.8\\.8\\.8"
+ - equal:
+ path: metadata.annotations.custom-annotation
+ value: "test-value"
+ - matchRegex:
+ path: 'data["db.example.com"]'
+ pattern: "example\\.com\\.\\s+IN\\s+A\\s+192\\.0\\.2\\.1"
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/deployment-autoscaler_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/deployment-autoscaler_test.yaml
new file mode 100644
index 00000000..3c026ed5
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/deployment-autoscaler_test.yaml
@@ -0,0 +1,77 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: test autoscaler deployment
+templates:
+ - templates/configmap-autoscaler.yaml
+ - templates/deployment-autoscaler.yaml
+
+tests:
+ - it: should render autoscaler deployment with correct image
+ set:
+ autoscaler:
+ enabled: true
+ image:
+ repository: autoscaler
+ tag: v1.0.0
+ pullPolicy: IfNotPresent
+ hpa:
+ enabled: false
+ template: templates/deployment-autoscaler.yaml
+ asserts:
+ - isKind:
+ of: Deployment
+ - equal:
+ path: metadata.name
+ value: RELEASE-NAME-coredns-autoscaler
+ - equal:
+ path: spec.template.spec.containers[0].image
+ value: autoscaler:v1.0.0
+ - equal:
+ path: spec.template.spec.containers[0].imagePullPolicy
+ value: IfNotPresent
+
+ - it: should set correct priorityClassName and tolerations
+ set:
+ autoscaler:
+ enabled: true
+ priorityClassName: system-cluster-critical
+ tolerations:
+ - key: "CriticalAddonsOnly"
+ operator: "Exists"
+ image:
+ repository: autoscaler
+ tag: v1.0.0
+ hpa:
+ enabled: false
+ template: templates/deployment-autoscaler.yaml
+ asserts:
+ - equal:
+ path: spec.template.spec.priorityClassName
+ value: system-cluster-critical
+ - equal:
+ path: spec.template.spec.tolerations[0].key
+ value: CriticalAddonsOnly
+ - equal:
+ path: spec.template.spec.tolerations[0].operator
+ value: Exists
+
+ - it: should not render deployment if autoscaler disabled
+ set:
+ autoscaler:
+ enabled: false
+ hpa:
+ enabled: false
+ template: templates/deployment-autoscaler.yaml
+ asserts:
+ - hasDocuments:
+ count: 0
+
+ - it: should not render deployment if hpa enabled
+ set:
+ autoscaler:
+ enabled: true
+ hpa:
+ enabled: true
+ template: templates/deployment-autoscaler.yaml
+ asserts:
+ - hasDocuments:
+ count: 0
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/deployment_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/deployment_test.yaml
new file mode 100644
index 00000000..db79f642
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/deployment_test.yaml
@@ -0,0 +1,62 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: CoreDNS Deployment Tests
+templates:
+ - templates/configmap.yaml
+ - templates/deployment.yaml
+
+tests:
+ - it: should render a deployment with the correct image
+ set:
+ deployment:
+ enabled: true
+ image:
+ repository: coredns/coredns
+ tag: 1.10.1
+ documentIndex: 0
+ template: templates/deployment.yaml
+ asserts:
+ - equal:
+ path: spec.template.spec.containers[0].image
+ value: coredns/coredns:1.10.1
+
+ - it: should include tolerations when isClusterService is true
+ set:
+ deployment:
+ enabled: true
+ isClusterService: true
+ tolerations:
+ - key: CriticalAddonsOnly
+ operator: Exists
+ documentIndex: 0
+ template: templates/deployment.yaml
+ asserts:
+ - exists:
+ path: spec.template.spec.tolerations
+
+ - it: should contain checksum/config annotation
+ set:
+ deployment:
+ enabled: true
+ documentIndex: 0
+ template: templates/deployment.yaml
+ asserts:
+ - matchRegex:
+ path: spec.template.metadata.annotations.checksum/config
+ pattern: ^[a-f0-9]{64}$
+
+ - it: should set pod security context and priority class
+ set:
+ deployment:
+ enabled: true
+ podSecurityContext:
+ runAsUser: 1000
+ priorityClassName: system-cluster-critical
+ documentIndex: 0
+ template: templates/deployment.yaml
+ asserts:
+ - equal:
+ path: spec.template.spec.securityContext.runAsUser
+ value: 1000
+ - equal:
+ path: spec.template.spec.priorityClassName
+ value: system-cluster-critical
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/hpa_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/hpa_test.yaml
new file mode 100644
index 00000000..68773083
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/hpa_test.yaml
@@ -0,0 +1,110 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: HPA Test
+
+templates:
+ - templates/hpa.yaml
+
+set:
+ hpa:
+ enabled: true
+ minReplicas: 1
+ maxReplicas: 5
+ metrics:
+ - type: Resource
+ resource:
+ name: cpu
+ target:
+ type: Utilization
+ averageUtilization: 80
+ behavior:
+ scaleUp:
+ stabilizationWindowSeconds: 300
+ policies:
+ - type: Percent
+ value: 100
+ periodSeconds: 15
+ deployment:
+ name: coredns
+ customLabels:
+ custom-label: "true"
+ customAnnotations:
+ custom-annotation: "enabled"
+ autoscaler:
+ enabled: false
+
+release:
+ namespace: test-namespace
+
+tests:
+ - it: should render HPA with correct metadata and spec
+ asserts:
+ - isKind:
+ of: HorizontalPodAutoscaler
+
+ - equal:
+ path: metadata.name
+ value: RELEASE-NAME-coredns
+
+ - equal:
+ path: metadata.namespace
+ value: test-namespace
+
+ - equal:
+ path: metadata.labels.custom-label
+ value: "true"
+
+ - equal:
+ path: metadata.annotations.custom-annotation
+ value: "enabled"
+
+ - equal:
+ path: spec.minReplicas
+ value: 1
+
+ - equal:
+ path: spec.maxReplicas
+ value: 5
+
+ - equal:
+ path: spec.scaleTargetRef.apiVersion
+ value: apps/v1
+
+ - equal:
+ path: spec.scaleTargetRef.kind
+ value: Deployment
+
+ - equal:
+ path: spec.scaleTargetRef.name
+ value: coredns
+
+ - equal:
+ path: spec.metrics[0].type
+ value: Resource
+
+ - equal:
+ path: spec.metrics[0].resource.name
+ value: cpu
+
+ - equal:
+ path: spec.metrics[0].resource.target.type
+ value: Utilization
+
+ - equal:
+ path: spec.metrics[0].resource.target.averageUtilization
+ value: 80
+
+ - equal:
+ path: spec.behavior.scaleUp.stabilizationWindowSeconds
+ value: 300
+
+ - equal:
+ path: spec.behavior.scaleUp.policies[0].type
+ value: Percent
+
+ - equal:
+ path: spec.behavior.scaleUp.policies[0].value
+ value: 100
+
+ - equal:
+ path: spec.behavior.scaleUp.policies[0].periodSeconds
+ value: 15
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/poddisruptionbudget_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/poddisruptionbudget_test.yaml
new file mode 100644
index 00000000..963b88d5
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/poddisruptionbudget_test.yaml
@@ -0,0 +1,61 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: PodDisruptionBudget Test
+
+templates:
+ - templates/poddisruptionbudget.yaml
+
+set:
+ deployment:
+ enabled: true
+
+ isClusterService: true
+
+ podDisruptionBudget:
+ maxUnavailable: 1
+
+ customLabels:
+ my-custom-label: "enabled"
+
+ customAnnotations:
+ custom-annotation: "true"
+
+release:
+ namespace: test-namespace
+
+tests:
+ - it: should render PodDisruptionBudget with correct metadata and spec
+ asserts:
+ - isKind:
+ of: PodDisruptionBudget
+
+ - equal:
+ path: metadata.name
+ value: RELEASE-NAME-coredns
+
+ - equal:
+ path: metadata.namespace
+ value: test-namespace
+
+ - equal:
+ path: metadata.labels.my-custom-label
+ value: enabled
+
+ - equal:
+ path: metadata.annotations.custom-annotation
+ value: "true"
+
+ - equal:
+ path: spec.maxUnavailable
+ value: 1
+
+ - equal:
+ path: spec.selector.matchLabels["app.kubernetes.io/instance"]
+ value: RELEASE-NAME
+
+ - equal:
+ path: spec.selector.matchLabels["app.kubernetes.io/name"]
+ value: coredns
+
+ - equal:
+ path: spec.selector.matchLabels["k8s-app"]
+ value: coredns
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/service-metrics_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/service-metrics_test.yaml
new file mode 100644
index 00000000..30db5e60
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/service-metrics_test.yaml
@@ -0,0 +1,81 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: Prometheus Metrics Service Test
+
+templates:
+ - templates/service-metrics.yaml
+
+set:
+ deployment:
+ enabled: true
+
+ prometheus:
+ service:
+ enabled: true
+ annotations:
+ prometheus.io/scrape: "true"
+ selector:
+ app: custom-coredns
+
+ service:
+ annotations:
+ monitoring: "enabled"
+
+ customLabels:
+ my-custom-label: "true"
+
+ customAnnotations:
+ custom-annotation: "true"
+ isClusterService: true
+
+release:
+ namespace: test-namespace
+
+tests:
+ - it: should render Prometheus metrics Service with correct metadata and port
+ asserts:
+ - isKind:
+ of: Service
+
+ - equal:
+ path: metadata.name
+ value: RELEASE-NAME-coredns-metrics
+
+ - equal:
+ path: metadata.namespace
+ value: test-namespace
+
+ - equal:
+ path: metadata.labels["app.kubernetes.io/component"]
+ value: metrics
+
+ - equal:
+ path: metadata.labels["my-custom-label"]
+ value: "true"
+
+ - equal:
+ path: metadata.annotations["prometheus.io/scrape"]
+ value: "true"
+
+ - equal:
+ path: metadata.annotations["monitoring"]
+ value: "enabled"
+
+ - equal:
+ path: metadata.annotations["custom-annotation"]
+ value: "true"
+
+ - equal:
+ path: spec.selector.app
+ value: custom-coredns
+
+ - equal:
+ path: spec.ports[0].name
+ value: metrics
+
+ - equal:
+ path: spec.ports[0].port
+ value: 9153
+
+ - equal:
+ path: spec.ports[0].targetPort
+ value: 9153
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/service_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/service_test.yaml
new file mode 100644
index 00000000..e5fac213
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/service_test.yaml
@@ -0,0 +1,108 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: Service Rendering Test
+
+templates:
+ - templates/service.yaml
+
+set:
+ deployment:
+ enabled: true
+
+ service:
+ name: "custom-service-name"
+ annotations:
+ service-annotation: "value"
+ selector:
+ component: "dns"
+ clusterIP: "10.96.0.10"
+ clusterIPs:
+ - "10.96.0.10"
+ - "fd00::10"
+ externalIPs:
+ - "1.2.3.4"
+ externalTrafficPolicy: "Local"
+ loadBalancerIP: "4.3.2.1"
+ loadBalancerClass: "my-lb-class"
+ ipFamilyPolicy: "PreferDualStack"
+ trafficDistribution: "Topology"
+
+ customLabels:
+ my-custom-label: "enabled"
+
+ customAnnotations:
+ custom-annotation: "test"
+
+ isClusterService: true
+
+release:
+ namespace: test-ns
+
+tests:
+ - it: should render a valid Service with custom values
+ asserts:
+ - isKind:
+ of: Service
+
+ - equal:
+ path: metadata.name
+ value: custom-service-name
+
+ - equal:
+ path: metadata.namespace
+ value: test-ns
+
+ - equal:
+ path: metadata.labels.my-custom-label
+ value: enabled
+
+ - equal:
+ path: metadata.annotations.custom-annotation
+ value: test
+
+ - equal:
+ path: metadata.annotations.service-annotation
+ value: value
+
+ - equal:
+ path: spec.selector.component
+ value: dns
+
+ - equal:
+ path: spec.clusterIP
+ value: 10.96.0.10
+
+ - equal:
+ path: spec.clusterIPs[0]
+ value: 10.96.0.10
+
+ - equal:
+ path: spec.clusterIPs[1]
+ value: fd00::10
+
+ - equal:
+ path: spec.externalIPs[0]
+ value: 1.2.3.4
+
+ - equal:
+ path: spec.externalTrafficPolicy
+ value: Local
+
+ - equal:
+ path: spec.loadBalancerIP
+ value: 4.3.2.1
+
+ - equal:
+ path: spec.loadBalancerClass
+ value: my-lb-class
+
+ - equal:
+ path: spec.type
+ value: ClusterIP
+
+ - equal:
+ path: spec.ipFamilyPolicy
+ value: PreferDualStack
+
+ - equal:
+ path: spec.trafficDistribution
+ value: Topology
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/serviceaccount_autoscaler_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/serviceaccount_autoscaler_test.yaml
new file mode 100644
index 00000000..3b1c3aef
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/serviceaccount_autoscaler_test.yaml
@@ -0,0 +1,48 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: Autoscaler ServiceAccount Test
+
+templates:
+ - templates/serviceaccount-autoscaler.yaml
+
+set:
+ autoscaler:
+ enabled: true
+ image:
+ pullSecrets:
+ - name: my-registry-secret
+ rbac:
+ create: true
+ customLabels:
+ my-custom-label: "true"
+ customAnnotations:
+ custom-annotation: "enabled"
+
+release:
+ name: release-name
+ namespace: test-namespace
+
+tests:
+ - it: should render ServiceAccount with correct name, namespace, labels, annotations, and pullSecrets
+ asserts:
+ - isKind:
+ of: ServiceAccount
+
+ - equal:
+ path: metadata.name
+ value: release-name-coredns-autoscaler
+
+ - equal:
+ path: metadata.namespace
+ value: test-namespace
+
+ - equal:
+ path: metadata.labels.my-custom-label
+ value: "true"
+
+ - equal:
+ path: metadata.annotations.custom-annotation
+ value: "enabled"
+
+ - equal:
+ path: imagePullSecrets[0].name
+ value: my-registry-secret
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/serviceaccount_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/serviceaccount_test.yaml
new file mode 100644
index 00000000..53a79d45
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/serviceaccount_test.yaml
@@ -0,0 +1,47 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: ServiceAccount Test
+
+templates:
+ - templates/serviceaccount.yaml
+
+set:
+ deployment:
+ enabled: true
+ serviceAccount:
+ create: true
+ annotations:
+ serviceaccount-annotation: "true"
+ customAnnotations:
+ custom-annotation: "yes"
+ image:
+ pullSecrets:
+ - name: my-pull-secret
+
+release:
+ namespace: test-namespace
+ name: test-release
+
+tests:
+ - it: should render ServiceAccount with correct name, annotations, and pullSecrets
+ asserts:
+ - isKind:
+ of: ServiceAccount
+
+ - equal:
+ path: metadata.name
+ value: test-release-coredns
+
+ - equal:
+ path: metadata.namespace
+ value: test-namespace
+ - equal:
+ path: metadata.annotations.custom-annotation
+ value: yes
+
+ - equal:
+ path: metadata.annotations.serviceaccount-annotation
+ value: "true"
+
+ - equal:
+ path: imagePullSecrets[0].name
+ value: my-pull-secret
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/servicemonitor_test.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/servicemonitor_test.yaml
new file mode 100644
index 00000000..76ee8105
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/tests/servicemonitor_test.yaml
@@ -0,0 +1,64 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json
+suite: ServiceMonitor Rendering Test
+
+templates:
+ - templates/servicemonitor.yaml
+
+set:
+ deployment:
+ enabled: true
+ prometheus:
+ monitor:
+ enabled: true
+ namespace: monitoring
+ interval: 15s
+ additionalLabels:
+ team: infra
+ selector:
+ matchLabels:
+ my-custom-label: "true"
+ customAnnotations:
+ monitoring: "enabled"
+ isClusterService: true
+
+release:
+ name: test-release
+ namespace: default
+
+tests:
+ - it: should render ServiceMonitor with correct metadata and selector
+ asserts:
+ - isKind:
+ of: ServiceMonitor
+
+ - equal:
+ path: metadata.name
+ value: test-release-coredns
+
+ - equal:
+ path: metadata.namespace
+ value: monitoring
+
+ - equal:
+ path: metadata.labels.team
+ value: infra
+
+ - equal:
+ path: metadata.annotations.monitoring
+ value: "enabled"
+
+ - equal:
+ path: spec.namespaceSelector.matchNames[0]
+ value: default
+
+ - equal:
+ path: spec.selector.matchLabels.my-custom-label
+ value: "true"
+
+ - equal:
+ path: spec.endpoints[0].port
+ value: metrics
+
+ - equal:
+ path: spec.endpoints[0].interval
+ value: 15s
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/values.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/values.yaml
new file mode 100644
index 00000000..5f49cb33
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/coredns/values.yaml
@@ -0,0 +1,427 @@
+# Default values for coredns.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+image:
+ repository: coredns/coredns
+ # Overrides the image tag whose default is the chart appVersion.
+ tag: ""
+ 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/
+ ##
+ pullSecrets: []
+ # pullSecrets:
+ # - name: myRegistryKeySecretName
+
+replicaCount: 1
+
+resources:
+ limits:
+ cpu: 100m
+ memory: 128Mi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+
+rollingUpdate:
+ maxUnavailable: 1
+ maxSurge: 25%
+
+terminationGracePeriodSeconds: 30
+
+podAnnotations: {}
+# cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
+
+podLabels: {}
+
+serviceType: "ClusterIP"
+
+prometheus:
+ service:
+ enabled: false
+ annotations:
+ prometheus.io/scrape: "true"
+ prometheus.io/port: "9153"
+ selector: {}
+ monitor:
+ enabled: false
+ additionalLabels: {}
+ namespace: ""
+ interval: ""
+ selector: {}
+
+service:
+# clusterIP: ""
+# clusterIPs: []
+# loadBalancerIP: ""
+# loadBalancerClass: ""
+# externalIPs: []
+# externalTrafficPolicy: ""
+# ipFamilyPolicy: ""
+# trafficDistribution: PreferClose
+ # The name of the Service
+ # If not set, a name is generated using the fullname template
+ name: ""
+ annotations: {}
+ # Pod selector
+ selector: {}
+
+serviceAccount:
+ create: false
+ # The name of the ServiceAccount to use
+ # If not set and create is true, a name is generated using the fullname template
+ name: ""
+ annotations: {}
+
+rbac:
+ # If true, create & use RBAC resources
+ create: true
+
+clusterRole:
+ # By default a name is generated using the fullname template.
+ # Override here if desired:
+ nameOverride: ""
+
+# isClusterService specifies whether chart should be deployed as cluster-service or normal k8s app.
+isClusterService: true
+
+# Optional priority class to be used for the coredns pods. Used for autoscaler if autoscaler.priorityClassName not set.
+priorityClassName: ""
+
+# Configure the pod level securityContext.
+podSecurityContext: {}
+
+# Configure SecurityContext for Pod.
+# Ensure that required linux capability to bind port number below 1024 is assigned (`CAP_NET_BIND_SERVICE`).
+securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ add:
+ - NET_BIND_SERVICE
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+
+# Default zone is what Kubernetes recommends:
+# https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/#coredns-configmap-options
+servers:
+- zones:
+ - zone: .
+ use_tcp: true
+ port: 53
+ # -- expose the service on a different port
+ # servicePort: 5353
+ # If serviceType is nodePort you can specify nodePort here
+ # nodePort: 30053
+ # hostPort: 53
+ plugins:
+ - name: errors
+ # Serves a /health endpoint on :8080, required for livenessProbe
+ - name: health
+ configBlock: |-
+ lameduck 10s
+ # Serves a /ready endpoint on :8181, required for readinessProbe
+ - name: ready
+ # Required to query kubernetes API for data
+ - name: kubernetes
+ parameters: cluster.local in-addr.arpa ip6.arpa
+ configBlock: |-
+ pods insecure
+ fallthrough in-addr.arpa ip6.arpa
+ ttl 30
+ # Serves a /metrics endpoint on :9153, required for serviceMonitor
+ - name: prometheus
+ parameters: 0.0.0.0:9153
+ - name: forward
+ parameters: . /etc/resolv.conf
+ - name: cache
+ parameters: 30
+ - name: loop
+ - name: reload
+ - name: loadbalance
+
+# Complete example with all the options:
+# - zones: # the `zones` block can be left out entirely, defaults to "."
+# - zone: hello.world. # optional, defaults to "."
+# scheme: tls:// # optional, defaults to "" (which equals "dns://" in CoreDNS)
+# - zone: foo.bar.
+# scheme: dns://
+# use_tcp: true # set this parameter to optionally expose the port on tcp as well as udp for the DNS protocol
+# # Note that this will not work if you are also exposing tls or grpc on the same server
+# port: 12345 # optional, defaults to "" (which equals 53 in CoreDNS)
+# plugins: # the plugins to use for this server block
+# - name: kubernetes # name of plugin, if used multiple times ensure that the plugin supports it!
+# parameters: foo bar # list of parameters after the plugin
+# configBlock: |- # if the plugin supports extra block style config, supply it here
+# hello world
+# foo bar
+
+# Extra configuration that is applied outside of the default zone block.
+# Example to include additional config files, which may come from extraVolumes:
+# extraConfig:
+# import:
+# parameters: /opt/coredns/*.conf
+extraConfig: {}
+
+# To use the livenessProbe, the health plugin needs to be enabled in CoreDNS' server config
+livenessProbe:
+ enabled: true
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 5
+ successThreshold: 1
+# To use the readinessProbe, the ready plugin needs to be enabled in CoreDNS' server config
+readinessProbe:
+ enabled: true
+ initialDelaySeconds: 30
+ periodSeconds: 5
+ timeoutSeconds: 5
+ failureThreshold: 1
+ successThreshold: 1
+
+# 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.21/#topologyspreadconstraint-v1-core
+# and supports Helm templating.
+# For example:
+# topologySpreadConstraints:
+# - labelSelector:
+# matchLabels:
+# app.kubernetes.io/name: '{{ template "coredns.name" . }}'
+# app.kubernetes.io/instance: '{{ .Release.Name }}'
+# topologyKey: topology.kubernetes.io/zone
+# maxSkew: 1
+# whenUnsatisfiable: ScheduleAnyway
+# - labelSelector:
+# matchLabels:
+# app.kubernetes.io/name: '{{ template "coredns.name" . }}'
+# app.kubernetes.io/instance: '{{ .Release.Name }}'
+# topologyKey: kubernetes.io/hostname
+# maxSkew: 1
+# whenUnsatisfiable: ScheduleAnyway
+topologySpreadConstraints: []
+
+# Node labels for pod assignment
+# Ref: https://kubernetes.io/docs/user-guide/node-selection/
+nodeSelector: {}
+
+# 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: []
+
+# https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
+podDisruptionBudget: {}
+
+# configure custom zone files as per https://coredns.io/2017/05/08/custom-dns-entries-for-kubernetes/
+zoneFiles: []
+# - filename: example.db
+# domain: example.com
+# contents: |
+# example.com. IN SOA sns.dns.icann.com. noc.dns.icann.com. 2015082541 7200 3600 1209600 3600
+# example.com. IN NS b.iana-servers.net.
+# example.com. IN NS a.iana-servers.net.
+# example.com. IN A 192.168.99.102
+# *.example.com. IN A 192.168.99.102
+
+# optional array of sidecar containers
+extraContainers: []
+# - name: some-container-name
+# image: some-image:latest
+# imagePullPolicy: Always
+# optional array of extra volumes to create
+extraVolumes: []
+# - name: some-volume-name
+# emptyDir: {}
+# optional array of mount points for extraVolumes
+extraVolumeMounts: []
+# - name: some-volume-name
+# mountPath: /etc/wherever
+
+# optional array of secrets to mount inside coredns container
+# possible usecase: need for secure connection with etcd backend
+extraSecrets: []
+# - name: etcd-client-certs
+# mountPath: /etc/coredns/tls/etcd
+# defaultMode: 420
+# - name: some-fancy-secret
+# mountPath: /etc/wherever
+# defaultMode: 440
+
+# optional array of environment variables for coredns container
+# possible usecase: provides username and password for etcd user authentications
+env: []
+# - name: WHATEVER_ENV
+# value: whatever
+# - name: SOME_SECRET_ENV
+# valueFrom:
+# secretKeyRef:
+# name: some-secret-name
+# key: secret-key
+
+# To support legacy deployments using CoreDNS with the "k8s-app: kube-dns" label selectors.
+# See https://github.com/coredns/helm/blob/master/charts/coredns/README.md#adopting-existing-coredns-resources
+# k8sAppLabelOverride: "kube-dns"
+
+# Custom labels to apply to Deployment, Pod, Configmap, Service, ServiceMonitor. Including autoscaler if enabled.
+customLabels: {}
+
+# Custom annotations to apply to Deployment, Pod, Configmap, Service, ServiceMonitor. Including autoscaler if enabled.
+customAnnotations: {}
+
+## Alternative configuration for HPA deployment if wanted
+## Create HorizontalPodAutoscaler object.
+##
+# hpa:
+# enabled: false
+# minReplicas: 1
+# maxReplicas: 10
+# metrics:
+# metrics:
+# - type: Resource
+# resource:
+# name: memory
+# target:
+# type: Utilization
+# averageUtilization: 60
+# - type: Resource
+# resource:
+# name: cpu
+# target:
+# type: Utilization
+# averageUtilization: 60
+
+hpa:
+ enabled: false
+ minReplicas: 1
+ maxReplicas: 2
+ metrics: []
+
+## Configue a cluster-proportional-autoscaler for coredns
+# See https://github.com/kubernetes-incubator/cluster-proportional-autoscaler
+autoscaler:
+ # Enabled the cluster-proportional-autoscaler
+ enabled: false
+
+ # Number of cores in the cluster per coredns replica
+ coresPerReplica: 256
+ # Number of nodes in the cluster per coredns replica
+ nodesPerReplica: 16
+ # Min size of replicaCount
+ min: 0
+ # Max size of replicaCount (default of 0 is no max)
+ max: 0
+ # Whether to include unschedulable nodes in the nodes/cores calculations - this requires version 1.8.0+ of the autoscaler
+ includeUnschedulableNodes: false
+ # If true does not allow single points of failure to form
+ preventSinglePointFailure: true
+
+ # Annotations for the coredns proportional autoscaler pods
+ podAnnotations: {}
+
+ ## Optionally specify some extra flags to pass to cluster-proprtional-autoscaler.
+ ## Useful for e.g. the nodelabels flag.
+ # customFlags:
+ # - --nodelabels=topology.kubernetes.io/zone=us-east-1a
+
+ image:
+ repository: registry.k8s.io/cpa/cluster-proportional-autoscaler
+ tag: "v1.9.0"
+ 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/
+ ##
+ pullSecrets: []
+ # pullSecrets:
+ # - name: myRegistryKeySecretName
+
+ # Optional priority class to be used for the autoscaler pods. priorityClassName used if not set.
+ priorityClassName: ""
+
+ # expects input structure as per specification https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#affinity-v1-core
+ affinity: {}
+
+ # Node labels for pod assignment
+ # Ref: https://kubernetes.io/docs/user-guide/node-selection/
+ nodeSelector: {}
+
+ # expects input structure as per specification https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.11/#toleration-v1-core
+ tolerations: []
+
+ # resources for autoscaler pod
+ resources:
+ requests:
+ cpu: "20m"
+ memory: "10Mi"
+ limits:
+ cpu: "20m"
+ memory: "10Mi"
+
+ # Options for autoscaler configmap
+ configmap:
+ ## Annotations for the coredns-autoscaler configmap
+ # i.e. strategy.spinnaker.io/versioned: "false" to ensure configmap isn't renamed
+ annotations: {}
+
+ # Enables the livenessProbe for cluster-proportional-autoscaler - this requires version 1.8.0+ of the autoscaler
+ livenessProbe:
+ enabled: true
+ initialDelaySeconds: 10
+ periodSeconds: 5
+ timeoutSeconds: 5
+ failureThreshold: 3
+ successThreshold: 1
+
+ # optional array of sidecar containers
+ extraContainers: []
+ # - name: some-container-name
+ # image: some-image:latest
+ # imagePullPolicy: Always
+
+deployment:
+ skipConfig: false
+ enabled: true
+ name: ""
+ ## Annotations for the coredns deployment
+ annotations: {}
+ ## Pod selector
+ selector: {}
+ # dnsPolicy determines how DNS resolution is handled for the pod.
+ # When isClusterService is true, this defaults to "Default" to avoid circular DNS resolution.
+ # Options: Default, ClusterFirst, ClusterFirstWithHostNet, None
+ # If set to "None", you must provide dnsConfig.
+ dnsPolicy: "Default"
+ # dnsConfig allows fine-grained DNS configuration for the pod.
+ # Only used when dnsPolicy is set to "None" or when custom DNS settings are needed.
+ # Example:
+ # dnsConfig:
+ # nameservers:
+ # - 8.8.8.8
+ # searches:
+ # - my.dns.search.suffix
+ # options:
+ # - name: ndots
+ # value: "2"
+ dnsConfig: {}
+
+# Configures initcontainers for the coredns deployment.
+initContainers: []
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/.helmignore b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/.helmignore
new file mode 100644
index 00000000..e951b6fb
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/.helmignore
@@ -0,0 +1,27 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
+ci/
+schema/
+.schema.yaml
+tests/
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/CHANGELOG.md b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/CHANGELOG.md
new file mode 100644
index 00000000..6b2401c2
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/CHANGELOG.md
@@ -0,0 +1,333 @@
+# ExternalDNS Helm Chart Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+---
+
+
+
+## [UNRELEASED]
+
+## [v1.20.0]
+
+### Added
+
+- Add option to set `annotationPrefix` ([#5889](https://github.com/kubernetes-sigs/external-dns/pull/5889)) _@lexfrei_
+
+### Changed
+
+- Grant `networking.k8s.io/ingresses` and `gateway.solo.io/gateways` permissions when using `gloo-proxy` source. ([#5909](https://github.com/kubernetes-sigs/external-dns/pull/5909)) _@cucxabong_
+- Update _ExternalDNS_ OCI image version to [v0.20.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.20.0). ([#6005](https://github.com/kubernetes-sigs/external-dns/pull/6005)) _@vflaux_
+
+### Fixed
+
+- Fixed the missing schema for `.provider.webhook.serviceMonitor` configs ([#5932](https://github.com/kubernetes-sigs/external-dns/pull/5932)) _@chrisbsmith_
+- Fixed incorrect indentation of selector labels under `spec.template.spec.topologySpreadConstraints` when `topologySpreadConstraints` is set. ([#6054](https://github.com/kubernetes-sigs/external-dns/pull/6054)) _@andylim0221_
+
+## [v1.19.0] - 2025-09-08
+
+### Added
+
+- Add option to configure `annotationFilter` via dedicated chart value. ([#5737](https://github.com/kubernetes-sigs/external-dns/pull/5737)) _@dshatokhin_
+
+### Changed
+
+- Grant `discovery.k8s.io/endpointslices` permission only when using `service` source. ([#5746](https://github.com/kubernetes-sigs/external-dns/pull/5746)) _@vflaux_
+- Update _ExternalDNS_ OCI image version to [v0.19.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.19.0). ([#5819](https://github.com/kubernetes-sigs/external-dns/pull/5819)) _@stevehipwell_
+
+## [v1.18.0] - 2025-07-14
+
+### Changed
+
+- Update RBAC for `Service` source to support `EndpointSlices`. ([#5493](https://github.com/kubernetes-sigs/external-dns/pull/5493)) _@vflaux_
+- Update _ExternalDNS_ OCI image version to [v0.18.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.18.0). ([#5633](https://github.com/kubernetes-sigs/external-dns/pull/5633)) _@elafarge_
+
+### Fixed
+
+- Fixed the lack of schema support for `create-only` dns policy in helm values ([#5627](https://github.com/kubernetes-sigs/external-dns/pull/5627)) _@coltonhughes_
+- Fixed the type of `.extraContainers` from `object` to `list` (array). ([#5564](https://github.com/kubernetes-sigs/external-dns/pull/5564)) _@svengreb_
+
+## [v1.17.0] - 2025-06-04
+
+### Changed
+
+- Allow extraArgs to also be a map enabling overrides of individual values. ([#5293](https://github.com/kubernetes-sigs/external-dns/pull/5293)) _@frittentheke_
+- Update CRD. ([#5287](https://github.com/kubernetes-sigs/external-dns/pull/5287)) _@mloiseleur_
+- Update CRD. ([#5446](https://github.com/kubernetes-sigs/external-dns/pull/5446)) _@mloiseleur_
+- Update _ExternalDNS_ OCI image version to [v0.17.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.17.0). ([#5479](https://github.com/kubernetes-sigs/external-dns/pull/5479)) _@stevehipwell_
+
+### Fixed
+
+- Fix wrong type definitions for webhook probes. ([#5297](https://github.com/kubernetes-sigs/external-dns/pull/5297)) _@semnell_
+- Update schema with latest plugin release. ([#5510](https://github.com/kubernetes-sigs/external-dns/pull/5510)) _@mloiseleur
+
+## [v1.16.1] - 2025-04-10
+
+### Changed
+
+- Set defaults for `automountServiceAccountToken` and `serviceAccount.automountServiceAccountToken` to `true` in Helm chart values. ([#5207](https://github.com/kubernetes-sigs/external-dns/pull/5207)) _@t3mi_
+
+### Fixed
+
+- Correctly handle `txtPrefix` and `txtSuffix` arguments when both are provided. ([#5250](https://github.com/kubernetes-sigs/external-dns/pull/5250)) _@ivankatliarchuk_
+- Add missing types in the schema for empty values. ([#5228](https://github.com/kubernetes-sigs/external-dns/pull/5228)) _@ivankatliarchuk_
+- Add missing types in the schema for empty values. ([#5207](https://github.com/kubernetes-sigs/external-dns/pull/5207)) _@t3mi_
+
+## [v1.16.0] - 2025-03-20
+
+### Added
+
+- Add helm testing framework `helm plugin unittest`. ([#5137](https://github.com/kubernetes-sigs/external-dns/pull/5137)) _@ivankatliarchuk_
+- Add ability to generate schema with `helm plugin schema`. ([#5075](https://github.com/kubernetes-sigs/external-dns/pull/5075)) _@ivankatliarchuk_
+- Add `docs/contributing/dev-guide.md#helm-values` guide. ([#5075](https://github.com/kubernetes-sigs/external-dns/pull/5075)) _@ivankatliarchuk_
+
+### Changed
+
+- Regenerate JSON schema with `helm-values-schema-json' plugin. ([#5075](https://github.com/kubernetes-sigs/external-dns/pull/5075)) _@ivankatliarchuk_
+- Update _ExternalDNS_ OCI image version to [v0.16.1](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.16.1). ([#5201](https://github.com/kubernetes-sigs/external-dns/pull/5201)) _@stevehipwell_
+
+## [v1.15.2] - 2025-02-14
+
+### Changed
+
+- Added `transportservers` resource to ClusterRole when specifying `f5-transportserver` or `f5-virtualserver` as a source. ([#5066](https://github.com/kubernetes-sigs/external-dns/pull/5066)) _@visokoo_
+
+### Fixed
+
+- Fixed handling of non-string types in `serviceAccount.metadata.annotations` field. ([#5067](https://github.com/kubernetes-sigs/external-dns/pull/5067)) _@hjoshi123_
+- Fixed regression where `affinity.nodeAffinity` was being ignored. ([#5046](https://github.com/kubernetes-sigs/external-dns/pull/5046)) _@mkhpalm_
+
+## [v1.15.1] - 2025-01-27
+
+### Added
+
+- Added ability to configure `imagePullSecrets` via helm `global` value. ([#4667](https://github.com/kubernetes-sigs/external-dns/pull/4667)) _@jkroepke_
+- Added options to configure `labelFilter` and `managedRecordTypes` via dedicated helm values. ([#4849](https://github.com/kubernetes-sigs/external-dns/pull/4849)) _@abaguas_
+
+### Changed
+
+- Allow templating `serviceaccount.annotations` keys and values, by rendering them using the `tpl` built-in function. ([#4958](https://github.com/kubernetes-sigs/external-dns/pull/4958)) _@fcrespofastly_
+- Updated _ExternalDNS_ OCI image version to [v0.15.1](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.15.1). ([#5028](https://github.com/kubernetes-sigs/external-dns/pull/5028)) _@stevehipwell_
+
+### Fixed
+
+- Fixed automatic addition of pod selector labels to `affinity` and `topologySpreadConstraints` if not defined. ([#4666](https://github.com/kubernetes-sigs/external-dns/pull/4666)) _@pvickery-ParamountCommerce_
+- Fixed missing Ingress permissions when using Istio sources. ([#4845](https://github.com/kubernetes-sigs/external-dns/pull/4845)) _@joekhoobyar_
+
+## [v1.15.0] - 2024-09-11
+
+### Changed
+
+- Updated _ExternalDNS_ OCI image version to [v0.15.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.15.0). ([#4735](https://github.com/kubernetes-sigs/external-dns/pull/4735)) _@stevehipwell_
+
+### Fixed
+
+- Fixed `provider.webhook.resources` behavior to correctly leverage resource limits. ([#4560](https://github.com/kubernetes-sigs/external-dns/pull/4560)) _@crutonjohn_
+- Fixed `provider.webhook.imagePullPolicy` behavior to correctly leverage pull policy. ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_
+- Fixed to add correct webhook metric port to `Service` and `ServiceMonitor`. ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_
+- Fixed to no longer require the unauthenticated webhook provider port to be exposed for health probes. ([#4691](https://github.com/kubernetes-sigs/external-dns/pull/4691)) _@kimsondrup_ & _@hatrx_
+
+## [v1.14.5] - 2024-06-10
+
+### Added
+
+- Added support for `extraContainers` argument. ([#4432](https://github.com/kubernetes-sigs/external-dns/pull/4432)) _@omerap12_
+- Added support for setting `excludeDomains` argument. ([#4380](https://github.com/kubernetes-sigs/external-dns/pull/4380)) _@bford-evs_
+
+### Changed
+
+- Updated _ExternalDNS_ OCI image version to [v0.14.2](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.14.2). ([#4541](https://github.com/kubernetes-sigs/external-dns/pull/4541)) _@stevehipwell_
+- Updated `DNSEndpoint` CRD. ([#4541](https://github.com/kubernetes-sigs/external-dns/pull/4541)) _@stevehipwell_
+- Changed the implementation for `revisionHistoryLimit` to be more generic. ([#4541](https://github.com/kubernetes-sigs/external-dns/pull/4541)) _@stevehipwell_
+
+### Fixed
+
+- Fixed the `ServiceMonitor` job name to correctly use the instance label. ([#4541](https://github.com/kubernetes-sigs/external-dns/pull/4541)) _@stevehipwell_
+
+## [v1.14.4] - 2024-04-05
+
+### Added
+
+- Added support for setting `dnsConfig`. ([#4265](https://github.com/kubernetes-sigs/external-dns/pull/4265)) _@davhdavh_
+- Added support for `DNSEndpoint` CRD. ([#4322](https://github.com/kubernetes-sigs/external-dns/pull/4322)) _@onedr0p_
+
+### Changed
+
+- Updated _ExternalDNS_ OCI image version to [v0.14.1](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.14.1). ([#4357](https://github.com/kubernetes-sigs/external-dns/pull/4357)) _@stevehipwell_
+
+## [v1.14.3] - 2024-01-26
+
+### Fixed
+
+- Fixed args for webhook deployment. ([#4202](https://github.com/kubernetes-sigs/external-dns/pull/4202)) [@webwurst](https://github.com/webwurst)
+- Fixed support for `gateway-grpcroute`, `gateway-tlsroute`, `gateway-tcproute` & `gateway-udproute`. ([#4205](https://github.com/kubernetes-sigs/external-dns/pull/4205)) [@orenlevi111](https://github.com/orenlevi111)
+- Fixed incorrect implementation for setting the `automountServiceAccountToken`. ([#4208](https://github.com/kubernetes-sigs/external-dns/pull/4208)) [@stevehipwell](https://github.com/stevehipwell)
+
+## [v1.14.2] - 2024-01-22
+
+### Fixed
+
+- Restore template support in `.Values.provider` and `.Values.provider.name`
+
+## [v1.14.1] - 2024-01-12
+
+### Fixed
+
+- Fixed webhook install failure: `"http-webhook-metrics": must be no more than 15 characters`. ([#4173](https://github.com/kubernetes-sigs/external-dns/pull/4173)) [@gabe565](https://github.com/gabe565)
+
+## [v1.14.0] - 2024-01-10
+
+### Added
+
+- Added the option to explicitly enable or disable service account token automounting. ([#3983](https://github.com/kubernetes-sigs/external-dns/pull/3983)) [@gilles-gosuin](https://github.com/gilles-gosuin)
+- Added the option to configure revisionHistoryLimit on the K8s Deployment resource. ([#4008](https://github.com/kubernetes-sigs/external-dns/pull/4008)) [@arnisoph](https://github.com/arnisoph)
+- Added support for webhook providers, as a sidecar. ([#4032](https://github.com/kubernetes-sigs/external-dns/pull/4032) [@mloiseleur](https://github.com/mloiseleur)
+- Added the option to configure ipFamilyPolicy and ipFamilies of external-dns Service. ([#4153](https://github.com/kubernetes-sigs/external-dns/pull/4153)) [@dongjiang1989](https://github.com/dongjiang1989)
+
+### Changed
+
+- Avoid unnecessary pod restart on each helm chart version. ([#4103](https://github.com/kubernetes-sigs/external-dns/pull/4103)) [@jkroepke](https://github.com/jkroepke)
+- Updated _ExternalDNS_ OCI image version to [v0.14.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.14.0). ([#4073](https://github.com/kubernetes-sigs/external-dns/pull/4073)) [@appkins](https://github.com/appkins)
+
+### Deprecated
+
+- The `secretConfiguration` value has been deprecated in favour of creating secrets external to the Helm chart and configuring their use via the `extraVolumes` & `extraVolumeMounts` values. ([#4161](https://github.com/kubernetes-sigs/external-dns/pull/4161)) [@stevehipwell](https://github.com/stevehipwell)
+
+## [v1.13.1] - 2023-09-08
+
+### Added
+
+- Added RBAC for Traefik to ClusterRole. ([#3325](https://github.com/kubernetes-sigs/external-dns/pull/3325)) [@ThomasK33](https://github.com/thomask33)
+- Added support for init containers. ([#3325](https://github.com/kubernetes-sigs/external-dns/pull/3838)) [@calvinbui](https://github.com/calvinbui)
+
+### Changed
+
+- Disallowed privilege escalation in container security context and set the seccomp profile type to `RuntimeDefault`. ([#3689](https://github.com/kubernetes-sigs/external-dns/pull/3689)) [@nrvnrvn](https://github.com/nrvnrvn)
+- Updated _ExternalDNS_ OCI image version to [v0.13.6](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.13.6). ([#3917](https://github.com/kubernetes-sigs/external-dns/pull/3917)) [@stevehipwell](https://github.com/stevehipwell)
+
+### Removed
+
+- Removed RBAC rule for already removed `contour-ingressroute` source. ([#3764](https://github.com/kubernetes-sigs/external-dns/pull/3764)) [@johngmyers](https://github.com/johngmyers)
+
+## [v1.13.0] - 2023-03-30
+
+### All Changes
+
+- Updated _ExternalDNS_ version to [v0.13.5](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.13.5). ([#3661](https://github.com/kubernetes-sigs/external-dns/pull/3661)) [@GMartinez-Sisti](https://github.com/GMartinez-Sisti)
+- Adding missing gateway-httproute cluster role permission. ([#3541](https://github.com/kubernetes-sigs/external-dns/pull/3541)) [@nicon89](https://github.com/nicon89)
+
+## [v1.12.2] - 2023-03-30
+
+### All Changes
+
+- Added support for ServiceMonitor relabelling. ([#3366](https://github.com/kubernetes-sigs/external-dns/pull/3366)) [@jkroepke](https://github.com/jkroepke)
+- Updated chart icon path. ([#3492](https://github.com/kubernetes-sigs/external-dns/pull/3494)) [kundan2707](https://github.com/kundan2707)
+- Added RBAC for Gateway-API resources to ClusterRole. ([#3499](https://github.com/kubernetes-sigs/external-dns/pull/3499)) [@michaelvl](https://github.com/MichaelVL)
+- Added RBAC for F5 VirtualServer to ClusterRole. ([#3503](https://github.com/kubernetes-sigs/external-dns/pull/3503)) [@mikejoh](https://github.com/mikejoh)
+- Added support for running ExternalDNS with namespaced scope. ([#3403](https://github.com/kubernetes-sigs/external-dns/pull/3403)) [@jkroepke](https://github.com/jkroepke)
+- Updated _ExternalDNS_ version to [v0.13.4](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.13.4). ([#3516](https://github.com/kubernetes-sigs/external-dns/pull/3516)) [@stevehipwell](https://github.com/stevehipwell)
+
+## [v1.12.1] - 2023-02-06
+
+### All Changes
+
+- Updated _ExternalDNS_ version to [v0.13.2](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.13.2). ([#3371](https://github.com/kubernetes-sigs/external-dns/pull/3371)) [@stevehipwell](https://github.com/stevehipwell)
+- Added `secretConfiguration.subPath` to mount specific files from secret as a sub-path. ([#3227](https://github.com/kubernetes-sigs/external-dns/pull/3227)) [@jkroepke](https://github.com/jkroepke)
+- Changed to use `registry.k8s.io` instead of `k8s.gcr.io`. ([#3261](https://github.com/kubernetes-sigs/external-dns/pull/3261)) [@johngmyers](https://github.com/johngmyers)
+
+## [v1.12.0] - 2022-11-29
+
+### All Changes
+
+- Added ability to provide ExternalDNS with secret configuration via `secretConfiguration`. ([#3144](https://github.com/kubernetes-sigs/external-dns/pull/3144)) [@jkroepke](https://github.com/jkroepke)
+- Added the ability to template `provider` & `extraArgs`. ([#3144](https://github.com/kubernetes-sigs/external-dns/pull/3144)) [@jkroepke](https://github.com/jkroepke)
+- Added the ability to customise the service account labels. ([#3145](https://github.com/kubernetes-sigs/external-dns/pull/3145)) [@jkroepke](https://github.com/jkroepke)
+- Updated _ExternalDNS_ version to [v0.13.1](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.13.1). ([#3197](https://github.com/kubernetes-sigs/external-dns/pull/3197)) [@stevehipwell](https://github.com/stevehipwell)
+
+## [v1.11.0] - 2022-08-10
+
+### Added
+
+- Added support to configure `dnsPolicy` on the Helm chart deployment. [@michelzanini](https://github.com/michelzanini)
+- Added ability to customise the deployment strategy. [mac-chaffee](https://github.com/mac-chaffee)
+
+### Changed
+
+- Updated _ExternalDNS_ version to [v0.12.2](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.12.2). [@stevehipwell](https://github.com/stevehipwell)
+- Changed default deployment strategy to `Recreate`. [mac-chaffee](https://github.com/mac-chaffee)
+
+## [v1.10.1] - 2022-07-11
+
+### Fixed
+
+- Fixed incorrect addition of `namespace` to `ClusterRole` & `ClusterRoleBinding`. [@stevehipwell](https://github.com/stevehipwell)
+
+## [v1.10.0] - 2022-07-08
+
+### Added
+
+- Added `commonLabels` value to allow the addition of labels to all resources. [@stevehipwell](https://github.com/stevehipwell)
+- Added support for [Process Namespace Sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) via the `shareProcessNamespace`
+ value. ([#2715](https://github.com/kubernetes-sigs/external-dns/pull/2715)) [@wolffberg](https://github.com/wolffberg)
+
+### Changed
+
+- Update _ExternalDNS_ version to [v0.12.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.12.0). [@vojtechmares](https://github.com/vojtechmares)
+- Set resource namespaces to `{{ .Release.Namespace }}` in the templates instead of waiting until apply time for inference. [@stevehipwell](https://github.com/stevehipwell)
+- Fixed `rbac.additionalPermissions` default value.([#2796](https://github.com/kubernetes-sigs/external-dns/pull/2796)) [@tamalsaha](https://github.com/tamalsaha)
+
+## [v1.9.0] - 2022-04-19
+
+### Changed
+
+- Update _ExternalDNS_ version to [v0.11.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.11.0). ([#2690](https://github.com/kubernetes-sigs/external-dns/pull/2690)) [@stevehipwell](https://github.com/stevehipwell)
+
+## [v1.8.0] - 2022-04-13
+
+### Added
+
+- Add annotations to Deployment. ([#2477](https://github.com/kubernetes-sigs/external-dns/pull/2477)) [@beastob](https://github.com/beastob)
+
+### Changed
+
+- Fix RBAC for `istio-virtualservice` source when `istio-gateway` isn't also added. ([#2564](https://github.com/kubernetes-sigs/external-dns/pull/2564)) [@mcwarman](https://github.com/mcwarman)
+
+
+[UNRELEASED]: https://github.com/kubernetes-sigs/external-dns/tree/master/charts/external-dns
+[v1.20.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.20.0
+[v1.19.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.19.0
+[v1.18.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.18.0
+[v1.17.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.17.0
+[v1.16.1]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.16.1
+[v1.16.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.16.0
+[v1.15.2]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.15.2
+[v1.15.1]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.15.1
+[v1.15.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.15.0
+[v1.14.5]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.5
+[v1.14.4]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.4
+[v1.14.3]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.3
+[v1.14.2]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.2
+[v1.14.1]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.1
+[v1.14.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.0
+[v1.13.1]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.13.1
+[v1.13.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.13.0
+[v1.12.2]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.12.2
+[v1.12.1]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.12.1
+[v1.12.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.12.0
+[v1.11.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.11.0
+[v1.10.1]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.10.1
+[v1.10.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.10.0
+[v1.9.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.9.0
+[v1.8.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.8.0
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/Chart.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/Chart.yaml
new file mode 100644
index 00000000..a03ace4e
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/Chart.yaml
@@ -0,0 +1,35 @@
+annotations:
+ artifacthub.io/changes: |-
+ - kind: added
+ description: "Add option to set annotationPrefix (#5889) @lexfrei."
+ - kind: changed
+ description: "Grant networking.k8s.io/ingresses and gateway.solo.io/gateways permissions when using gloo-proxy source."
+ - kind: changed
+ description: "Update ExternalDNS OCI image version to v0.20.0."
+ - kind: fixed
+ description: "Fixed the missing schema for .provider.webhook."
+ - kind: fixed
+ description: "Fixed incorrect indentation of selector labels under spec.template.spec.topologySpreadConstraints when topologySpreadConstraints is set."
+apiVersion: v2
+appVersion: 0.20.0
+description: ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with
+ DNS providers.
+home: https://github.com/kubernetes-sigs/external-dns/
+icon: https://github.com/kubernetes-sigs/external-dns/raw/master/docs/img/external-dns.png
+keywords:
+- kubernetes
+- k8s
+- externaldns
+- external-dns
+- dns
+- service
+- ingress
+- gateway
+maintainers:
+- email: steve.hipwell@gmail.com
+ name: stevehipwell
+name: external-dns
+sources:
+- https://github.com/kubernetes-sigs/external-dns/
+type: application
+version: 1.20.0
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/README.md b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/README.md
new file mode 100644
index 00000000..0bbae925
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/README.md
@@ -0,0 +1,192 @@
+# external-dns
+
+  
+
+ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with DNS providers.
+
+**Homepage:**
+
+## Maintainers
+
+| Name | Email | Url |
+| ---- | ------ | --- |
+| stevehipwell | | |
+
+## Source Code
+
+*
+
+## 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 external-dns external-dns/external-dns --version 1.20.0
+```
+
+## Providers
+
+> Legacy support of setting `provider: ` is deprecated.
+
+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.
+
+See [documentation](https://kubernetes-sigs.github.io/external-dns/#new-providers) for more info on available providers and tutorials.
+
+### Providers with Specific Configuration Support
+
+| Provider | Supported |
+|------------------------|------------|
+| `webhook` | âś… |
+
+### Other Providers
+
+For set up for a specific provider using the Helm chart, see the following links:
+
+* [AWS](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/aws.md#using-helm-with-oidc)
+* [akamai-edgedns](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/akamai-edgedns.md#using-helm)
+* [cloudflare](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/cloudflare.md#using-helm)
+* [digitalocean](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/digitalocean.md#using-helm)
+* [godaddy](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/godaddy.md#using-helm)
+* [ns1](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/ns1.md#using-helm)
+* [plural](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/plural.md#using-helm)
+
+## 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` | ❌ | |
+
+## 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. |
+| annotationFilter | string | `nil` | Filter resources queried for endpoints by annotation selector. |
+| annotationPrefix | string | `nil` | Annotation prefix for external-dns annotations (useful for split horizon DNS with multiple instances). |
+| automountServiceAccountToken | bool | `true` | 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). |
+| dnsConfig | object | `nil` | [DNS config](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config) for the pod, if not set the default will be used. |
+| 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 | `[]` | Limit possible target zones by domain suffixes. |
+| enabled | bool | `nil` | No effect - reserved for use in sub-charting. |
+| env | list | `[]` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `external-dns` container. |
+| excludeDomains | list | `[]` | Intentionally exclude domains from being managed. |
+| extraArgs | object | `{}` | Extra arguments to provide to _ExternalDNS_. An array or map can be used, with maps allowing for value overrides; maps also support slice values to use the same arg multiple times. |
+| extraContainers | list | `[]` | Extra containers to add to the `Deployment`. |
+| 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. |
+| gatewayNamespace | string | `nil` | _Gateway API_ gateway namespace to watch. |
+| global.imagePullSecrets | list | `[]` | Global image pull secrets. |
+| 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. |
+| labelFilter | string | `nil` | Filter resources queried for endpoints by label selector. |
+| 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. |
+| managedRecordTypes | list | `[]` | Record types to manage (default: A, AAAA, CNAME) |
+| 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 `create-only`, `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 [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). |
+| provider.webhook.args | list | `[]` | Extra arguments to provide for the `webhook` container. |
+| provider.webhook.env | list | `[]` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. |
+| provider.webhook.extraVolumeMounts | list | `[]` | Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container. |
+| provider.webhook.image.pullPolicy | string | `"IfNotPresent"` | Image pull policy for the `webhook` container. |
+| provider.webhook.image.repository | string | `nil` | Image repository for the `webhook` container. |
+| provider.webhook.image.tag | string | `nil` | Image tag for the `webhook` container. |
+| provider.webhook.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. |
+| provider.webhook.readinessProbe | object | See _values.yaml_ | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container. |
+| provider.webhook.resources | object | `{}` | [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container. |
+| provider.webhook.securityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. |
+| provider.webhook.service.port | int | `8080` | Webhook exposed HTTP port for the service. |
+| provider.webhook.serviceMonitor | object | See _values.yaml_ | Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. |
+| 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 (**DEPRECATED**). |
+| 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/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `external-dns` container. |
+| service.annotations | object | `{}` | Service annotations. |
+| service.ipFamilies | list | `[]` | Service IP families (e.g. IPv4 and/or IPv6). |
+| service.ipFamilyPolicy | string | `nil` | Service IP family policy. |
+| service.port | int | `7979` | Service HTTP port. |
+| serviceAccount.annotations | object | `{}` | Annotations to add to the service account. Templates are allowed in both the key and the value. Example: `example.com/annotation/{{ .Values.nameOverride }}: {{ .Values.nameOverride }}` |
+| serviceAccount.automountServiceAccountToken | bool | `true` | 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_ when 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/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/README.md.gotmpl b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/README.md.gotmpl
new file mode 100644
index 00000000..fc4ada14
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/README.md.gotmpl
@@ -0,0 +1,94 @@
+{{ 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
+
+> Legacy support of setting `provider: ` is deprecated.
+
+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.
+
+See [documentation](https://kubernetes-sigs.github.io/external-dns/#new-providers) for more info on available providers and tutorials.
+
+### Providers with Specific Configuration Support
+
+| Provider | Supported |
+|------------------------|------------|
+| `webhook` | âś… |
+
+### Other Providers
+
+For set up for a specific provider using the Helm chart, see the following links:
+
+* [AWS](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/aws.md#using-helm-with-oidc)
+* [akamai-edgedns](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/akamai-edgedns.md#using-helm)
+* [cloudflare](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/cloudflare.md#using-helm)
+* [digitalocean](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/digitalocean.md#using-helm)
+* [godaddy](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/godaddy.md#using-helm)
+* [ns1](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/ns1.md#using-helm)
+* [plural](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/plural.md#using-helm)
+
+## 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/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/RELEASE.md b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/RELEASE.md
new file mode 100644
index 00000000..956cb0b5
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/RELEASE.md
@@ -0,0 +1,13 @@
+### Added
+
+- Add option to set `annotationPrefix` ([#5889](https://github.com/kubernetes-sigs/external-dns/pull/5889)) _@lexfrei_
+
+### Changed
+
+- Grant `networking.k8s.io/ingresses` and `gateway.solo.io/gateways` permissions when using `gloo-proxy` source. ([#5909](https://github.com/kubernetes-sigs/external-dns/pull/5909)) _@cucxabong_
+- Update _ExternalDNS_ OCI image version to [v0.20.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.20.0). ([#6005](https://github.com/kubernetes-sigs/external-dns/pull/6005)) _@vflaux_
+
+### Fixed
+
+- Fixed the missing schema for `.provider.webhook.serviceMonitor` configs ([#5932](https://github.com/kubernetes-sigs/external-dns/pull/5932)) _@chrisbsmith_
+- Fixed incorrect indentation of selector labels under `spec.template.spec.topologySpreadConstraints` when `topologySpreadConstraints` is set. ([#6054](https://github.com/kubernetes-sigs/external-dns/pull/6054)) _@andylim0221_
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/crds/dnsendpoints.externaldns.k8s.io.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/crds/dnsendpoints.externaldns.k8s.io.yaml
new file mode 100644
index 00000000..c983c8d7
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/crds/dnsendpoints.externaldns.k8s.io.yaml
@@ -0,0 +1,96 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ api-approved.kubernetes.io: https://github.com/kubernetes-sigs/external-dns/pull/2007
+ name: dnsendpoints.externaldns.k8s.io
+spec:
+ group: externaldns.k8s.io
+ names:
+ kind: DNSEndpoint
+ listKind: DNSEndpointList
+ plural: dnsendpoints
+ singular: dnsendpoint
+ scope: Namespaced
+ versions:
+ - name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ description: |-
+ DNSEndpoint is a contract that a user-specified CRD must implement to be used as a source for external-dns.
+ The user-specified CRD should also have the status sub-resource.
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: DNSEndpointSpec defines the desired state of DNSEndpoint
+ properties:
+ endpoints:
+ items:
+ description: Endpoint is a high-level way of a connection between a service and an IP
+ properties:
+ dnsName:
+ description: The hostname of the DNS record
+ type: string
+ labels:
+ additionalProperties:
+ type: string
+ description: Labels stores labels defined for the Endpoint
+ type: object
+ providerSpecific:
+ description: ProviderSpecific stores provider specific config
+ items:
+ description: ProviderSpecificProperty holds the name and value of a configuration which is specific to individual DNS providers
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ recordTTL:
+ description: TTL for the record
+ format: int64
+ type: integer
+ recordType:
+ description: RecordType type of record, e.g. CNAME, A, AAAA, SRV, TXT etc
+ type: string
+ setIdentifier:
+ description: Identifier to distinguish multiple records with the same name and type (e.g. Route53 records with routing policies other than 'simple')
+ type: string
+ targets:
+ description: The targets the DNS record points to
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ type: object
+ status:
+ description: DNSEndpointStatus defines the observed state of DNSEndpoint
+ properties:
+ observedGeneration:
+ description: The generation observed by the external-dns controller.
+ format: int64
+ type: integer
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/NOTES.txt b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/NOTES.txt
new file mode 100644
index 00000000..dedcff42
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/NOTES.txt
@@ -0,0 +1,18 @@
+***********************************************************************
+* External DNS *
+***********************************************************************
+ Chart version: {{ .Chart.Version }}
+ App version: {{ .Chart.AppVersion }}
+ Image tag: {{ include "external-dns.image" . }}
+***********************************************************************
+
+{{- if eq (typeOf .Values.provider) "string" }}
+đźš§ DEPRECATIONS đźš§
+
+The following features, functions, or methods are deprecated and no longer recommended for use.
+
+{{/* The deprecation message for legacy 'provider: name'. */}}
+{{- if eq (typeOf .Values.provider) "string" -}}
+âť—âť—âť— DEPRECATED âť—âť—âť— The legacy 'provider: ' configuration is in use. Support will be removed in future releases.
+{{- end -}}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/_helpers.tpl b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/_helpers.tpl
new file mode 100644
index 00000000..aad09822
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/_helpers.tpl
@@ -0,0 +1,114 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "external-dns.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 "external-dns.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 "external-dns.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "external-dns.labels" -}}
+helm.sh/chart: {{ include "external-dns.chart" . }}
+{{ include "external-dns.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- with .Values.commonLabels }}
+{{ toYaml . }}
+{{- end }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "external-dns.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "external-dns.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "external-dns.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "external-dns.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
+
+{{/*
+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
+TODO: line eq (typeOf .Values.provider) "string" to be removed in future releases
+*/}}
+{{- define "external-dns.providerName" -}}
+{{- if eq (typeOf .Values.provider) "string" }}
+{{- .Values.provider }}
+{{- else }}
+{{- .Values.provider.name }}
+{{- end }}
+{{- end }}
+
+{{/*
+The image to use for optional webhook sidecar
+*/}}
+{{- define "external-dns.webhookImage" -}}
+{{- with .image }}
+{{- if or (empty .repository) (empty .tag) }}
+{{- fail "ERROR: webhook provider needs an image repository and a tag" }}
+{{- end }}
+{{- printf "%s:%s" .repository .tag }}
+{{- end }}
+{{- end }}
+
+{{/*
+The pod affinity default label Selector
+*/}}
+{{- define "external-dns.labelSelector" -}}
+labelSelector:
+ matchLabels:
+ {{ include "external-dns.selectorLabels" . | nindent 4 }}
+{{- end }}
+
+{{/*
+Check if any Gateway API sources are enabled
+*/}}
+{{- define "external-dns.hasGatewaySources" -}}
+{{- if or (has "gateway-httproute" .Values.sources) (has "gateway-grpcroute" .Values.sources) (has "gateway-tlsroute" .Values.sources) (has "gateway-tcproute" .Values.sources) (has "gateway-udproute" .Values.sources) -}}
+true
+{{- end -}}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/clusterrole.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/clusterrole.yaml
new file mode 100644
index 00000000..b3ef006c
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/clusterrole.yaml
@@ -0,0 +1,163 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: {{ .Values.namespaced | ternary "Role" "ClusterRole" }}
+metadata:
+ name: {{ template "external-dns.fullname" . }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+rules:
+{{- if and (not .Values.namespaced) (or (has "node" .Values.sources) (has "pod" .Values.sources) (has "service" .Values.sources) (has "contour-httpproxy" .Values.sources) (has "gloo-proxy" .Values.sources) (has "openshift-route" .Values.sources) (has "skipper-routegroup" .Values.sources)) }}
+ - apiGroups: [""]
+ resources: ["nodes"]
+ verbs: ["list","watch"]
+{{- end }}
+{{- if or (has "pod" .Values.sources) (has "service" .Values.sources) (has "contour-httpproxy" .Values.sources) (has "gloo-proxy" .Values.sources) (has "openshift-route" .Values.sources) (has "skipper-routegroup" .Values.sources) }}
+ - apiGroups: [""]
+ resources: ["pods"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if or (has "service" .Values.sources) (has "contour-httpproxy" .Values.sources) (has "gloo-proxy" .Values.sources) (has "istio-gateway" .Values.sources) (has "istio-virtualservice" .Values.sources) (has "openshift-route" .Values.sources) (has "skipper-routegroup" .Values.sources) }}
+ - apiGroups: [""]
+ resources: ["services"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "service" .Values.sources }}
+ - apiGroups: ["discovery.k8s.io"]
+ resources: ["endpointslices"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if or (has "ingress" .Values.sources) (has "istio-gateway" .Values.sources) (has "istio-virtualservice" .Values.sources) (has "contour-httpproxy" .Values.sources) (has "openshift-route" .Values.sources) (has "skipper-routegroup" .Values.sources) (has "gloo-proxy" .Values.sources) }}
+ - apiGroups: ["extensions","networking.k8s.io"]
+ resources: ["ingresses"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if or (has "istio-gateway" .Values.sources) (has "istio-virtualservice" .Values.sources) }}
+ - apiGroups: ["networking.istio.io"]
+ resources: ["gateways"]
+ verbs: ["get","watch","list"]
+{{- end }}
+
+{{- if has "istio-virtualservice" .Values.sources }}
+ - apiGroups: ["networking.istio.io"]
+ resources: ["virtualservices"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "ambassador-host" .Values.sources }}
+ - apiGroups: ["getambassador.io"]
+ resources: ["hosts","ingresses"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "contour-httpproxy" .Values.sources }}
+ - apiGroups: ["projectcontour.io"]
+ resources: ["httpproxies"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "crd" .Values.sources }}
+ - apiGroups: ["externaldns.k8s.io"]
+ resources: ["dnsendpoints"]
+ verbs: ["get","watch","list"]
+ - apiGroups: ["externaldns.k8s.io"]
+ resources: ["dnsendpoints/status"]
+ verbs: ["*"]
+{{- end }}
+{{- if include "external-dns.hasGatewaySources" . }}
+{{- if or (not .Values.namespaced) (and .Values.namespaced (not .Values.gatewayNamespace)) }}
+ - apiGroups: ["gateway.networking.k8s.io"]
+ resources: ["gateways"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if not .Values.namespaced }}
+ - apiGroups: [""]
+ resources: ["namespaces"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- end }}
+{{- if has "gateway-httproute" .Values.sources }}
+ - apiGroups: ["gateway.networking.k8s.io"]
+ resources: ["httproutes"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "gateway-grpcroute" .Values.sources }}
+ - apiGroups: ["gateway.networking.k8s.io"]
+ resources: ["grpcroutes"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "gateway-tlsroute" .Values.sources }}
+ - apiGroups: ["gateway.networking.k8s.io"]
+ resources: ["tlsroutes"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "gateway-tcproute" .Values.sources }}
+ - apiGroups: ["gateway.networking.k8s.io"]
+ resources: ["tcproutes"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "gateway-udproute" .Values.sources }}
+ - apiGroups: ["gateway.networking.k8s.io"]
+ resources: ["udproutes"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "gloo-proxy" .Values.sources }}
+ - apiGroups: ["gloo.solo.io","gateway.solo.io"]
+ resources: ["proxies","virtualservices","gateways"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "kong-tcpingress" .Values.sources }}
+ - apiGroups: ["configuration.konghq.com"]
+ resources: ["tcpingresses"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "traefik-proxy" .Values.sources }}
+ - apiGroups: ["traefik.containo.us", "traefik.io"]
+ resources: ["ingressroutes", "ingressroutetcps", "ingressrouteudps"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "openshift-route" .Values.sources }}
+ - apiGroups: ["route.openshift.io"]
+ resources: ["routes"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- if has "skipper-routegroup" .Values.sources }}
+ - apiGroups: ["zalando.org"]
+ resources: ["routegroups"]
+ verbs: ["get","watch","list"]
+ - apiGroups: ["zalando.org"]
+ resources: ["routegroups/status"]
+ verbs: ["patch","update"]
+{{- end }}
+{{- if or (has "f5-virtualserver" .Values.sources) (has "f5-transportserver" .Values.sources) }}
+ - apiGroups: ["cis.f5.com"]
+ resources: ["virtualservers", "transportservers"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- with .Values.rbac.additionalPermissions }}
+ {{- toYaml . | nindent 2 }}
+{{- end }}
+{{- if and .Values.rbac.create .Values.namespaced (include "external-dns.hasGatewaySources" .) }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: {{ template "external-dns.fullname" . }}-namespaces
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+rules:
+ - apiGroups: [""]
+ resources: ["namespaces"]
+ verbs: ["get","watch","list"]
+{{- if .Values.gatewayNamespace }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: {{ template "external-dns.fullname" . }}-gateway
+ namespace: {{ .Values.gatewayNamespace }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+rules:
+ - apiGroups: ["gateway.networking.k8s.io"]
+ resources: ["gateways"]
+ verbs: ["get","watch","list"]
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/clusterrolebinding.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/clusterrolebinding.yaml
new file mode 100644
index 00000000..49400c0b
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/clusterrolebinding.yaml
@@ -0,0 +1,51 @@
+{{- if .Values.rbac.create -}}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: {{ .Values.namespaced | ternary "RoleBinding" "ClusterRoleBinding" }}
+metadata:
+ name: {{ printf "%s-viewer" (include "external-dns.fullname" .) }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: {{ .Values.namespaced | ternary "Role" "ClusterRole" }}
+ name: {{ template "external-dns.fullname" . }}
+subjects:
+ - kind: ServiceAccount
+ name: {{ template "external-dns.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- if and .Values.rbac.create .Values.namespaced (include "external-dns.hasGatewaySources" .) }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: {{ template "external-dns.fullname" . }}-namespaces
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: {{ template "external-dns.fullname" . }}-namespaces
+subjects:
+ - kind: ServiceAccount
+ name: {{ template "external-dns.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- if .Values.gatewayNamespace }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: {{ template "external-dns.fullname" . }}-gateway
+ namespace: {{ .Values.gatewayNamespace }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: {{ template "external-dns.fullname" . }}-gateway
+subjects:
+ - kind: ServiceAccount
+ name: {{ template "external-dns.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+{{- end }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/deployment.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/deployment.yaml
new file mode 100644
index 00000000..b213f754
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/deployment.yaml
@@ -0,0 +1,304 @@
+{{- $defaultSelector := (include "external-dns.labelSelector" $ ) | fromYaml -}}
+{{- $providerName := tpl (include "external-dns.providerName" .) $ }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "external-dns.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+ {{- with .Values.deploymentAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ {{- include "external-dns.selectorLabels" . | nindent 6 }}
+ strategy:
+ {{- toYaml .Values.deploymentStrategy | nindent 4 }}
+ {{- if not (has (quote .Values.revisionHistoryLimit) (list "" (quote ""))) }}
+ revisionHistoryLimit: {{ .Values.revisionHistoryLimit | int64 }}
+ {{- end }}
+ template:
+ metadata:
+ labels:
+ {{- include "external-dns.selectorLabels" . | nindent 8 }}
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- if or .Values.secretConfiguration.enabled .Values.podAnnotations }}
+ annotations:
+ {{- if .Values.secretConfiguration.enabled }}
+ checksum/secret: {{ tpl (toYaml .Values.secretConfiguration.data) . | sha256sum }}
+ {{- end }}
+ {{- with .Values.podAnnotations }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- end }}
+ spec:
+ {{- if not (quote .Values.automountServiceAccountToken | empty) }}
+ automountServiceAccountToken: {{ .Values.automountServiceAccountToken }}
+ {{- end }}
+ {{- with (default .Values.global.imagePullSecrets .Values.imagePullSecrets) }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ serviceAccountName: {{ include "external-dns.serviceAccountName" . }}
+ {{- with .Values.shareProcessNamespace }}
+ shareProcessNamespace: {{ . }}
+ {{- end }}
+ {{- with .Values.podSecurityContext }}
+ securityContext:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.priorityClassName }}
+ priorityClassName: {{ . | quote }}
+ {{- end }}
+ {{- with .Values.terminationGracePeriodSeconds }}
+ terminationGracePeriodSeconds: {{ . }}
+ {{- end }}
+ {{- with .Values.dnsPolicy }}
+ dnsPolicy: {{ . }}
+ {{- end }}
+ {{- with .Values.dnsConfig }}
+ dnsConfig:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.initContainers }}
+ initContainers:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ {{- with .Values.extraContainers }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ - name: external-dns
+ {{- with .Values.securityContext }}
+ securityContext:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ image: {{ include "external-dns.image" . }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ {{- with .Values.env }}
+ env:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ args:
+ - --log-level={{ .Values.logLevel }}
+ - --log-format={{ .Values.logFormat }}
+ - --interval={{ .Values.interval }}
+ {{- if .Values.triggerLoopOnEvent }}
+ - --events
+ {{- end }}
+ {{- range .Values.sources }}
+ - --source={{ . }}
+ {{- end }}
+ - --policy={{ .Values.policy }}
+ - --registry={{ .Values.registry }}
+ {{- if .Values.txtOwnerId }}
+ - --txt-owner-id={{ .Values.txtOwnerId }}
+ {{- end }}
+ {{- if and .Values.txtPrefix .Values.txtSuffix }}
+ {{- fail (printf "'txtPrefix' and 'txtSuffix' are mutually exclusive") }}
+ {{- end }}
+ {{- if .Values.txtPrefix }}
+ - --txt-prefix={{ .Values.txtPrefix }}
+ {{- else if .Values.txtSuffix }}
+ - --txt-suffix={{ .Values.txtSuffix }}
+ {{- end }}
+ {{- if .Values.namespaced }}
+ - --namespace={{ .Release.Namespace }}
+ {{- end }}
+ {{- if .Values.gatewayNamespace }}
+ - --gateway-namespace={{ .Values.gatewayNamespace }}
+ {{- end }}
+ {{- range .Values.domainFilters }}
+ - --domain-filter={{ . }}
+ {{- end }}
+ {{- range .Values.excludeDomains }}
+ - --exclude-domains={{ . }}
+ {{- end }}
+ {{- if .Values.labelFilter }}
+ - --label-filter={{ .Values.labelFilter }}
+ {{- end }}
+ {{- if .Values.annotationFilter }}
+ - --annotation-filter={{ .Values.annotationFilter }}
+ {{- end }}
+ {{- if .Values.annotationPrefix }}
+ - --annotation-prefix={{ .Values.annotationPrefix }}
+ {{- end }}
+ {{- range .Values.managedRecordTypes }}
+ - --managed-record-types={{ . }}
+ {{- end }}
+ - --provider={{ $providerName }}
+ {{- if kindIs "map" .Values.extraArgs }}
+ {{- range $key, $value := .Values.extraArgs }}
+ {{- if not (kindIs "invalid" $value) }}
+ {{- if kindIs "slice" $value }}
+ {{- range $value }}
+ - --{{ $key }}={{ tpl (. | toString) $ }}
+ {{- end }}
+ {{- else }}
+ - --{{ $key }}={{ tpl ($value | toString) $ }}
+ {{- end }}
+ {{- else }}
+ - --{{ $key }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- if kindIs "slice" .Values.extraArgs }}
+ {{- range .Values.extraArgs }}
+ - {{ tpl . $ }}
+ {{- end }}
+ {{- end }}
+ ports:
+ - name: http
+ protocol: TCP
+ containerPort: 7979
+ livenessProbe:
+ {{- toYaml .Values.livenessProbe | nindent 12 }}
+ readinessProbe:
+ {{- toYaml .Values.readinessProbe | nindent 12 }}
+ {{- if or .Values.secretConfiguration.enabled .Values.extraVolumeMounts }}
+ volumeMounts:
+ {{- if .Values.secretConfiguration.enabled }}
+ - name: secrets
+ mountPath: {{ tpl .Values.secretConfiguration.mountPath $ }}
+ {{- with .Values.secretConfiguration.subPath }}
+ subPath: {{ tpl . $ }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.extraVolumeMounts }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.resources }}
+ resources:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ {{- if eq $providerName "webhook" }}
+ {{- with .Values.provider.webhook }}
+ - name: webhook
+ image: {{ include "external-dns.webhookImage" . }}
+ imagePullPolicy: {{ .image.pullPolicy }}
+ {{- with .env }}
+ env:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ {{- with .args }}
+ args:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ ports:
+ - name: http-webhook
+ protocol: TCP
+ containerPort: 8080
+ livenessProbe:
+ {{- toYaml .livenessProbe | nindent 12 }}
+ readinessProbe:
+ {{- toYaml .readinessProbe | nindent 12 }}
+ {{- if .extraVolumeMounts }}
+ volumeMounts:
+ {{- with .extraVolumeMounts }}
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ {{- end }}
+ {{- with .resources }}
+ resources:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ {{- with .securityContext }}
+ securityContext:
+ {{- toYaml . | nindent 12 }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- if or .Values.secretConfiguration.enabled .Values.extraVolumes }}
+ volumes:
+ {{- if .Values.secretConfiguration.enabled }}
+ - name: secrets
+ secret:
+ secretName: {{ include "external-dns.fullname" . }}
+ {{- end }}
+ {{- with .Values.extraVolumes }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.affinity }}
+ affinity:
+ {{- with .nodeAffinity }}
+ nodeAffinity:
+ {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .podAffinity }}
+ podAffinity:
+ {{- with .preferredDuringSchedulingIgnoredDuringExecution }}
+ preferredDuringSchedulingIgnoredDuringExecution:
+ {{- range . }}
+ - podAffinityTerm:
+ {{- if dig "podAffinityTerm" "labelSelector" nil . }}
+ {{- toYaml .podAffinityTerm | nindent 16 }}
+ {{- else }}
+ {{- (merge $defaultSelector .podAffinityTerm) | toYaml | nindent 16 }}
+ {{- end }}
+ weight: {{ .weight }}
+ {{- end }}
+ {{- end }}
+ {{- with .requiredDuringSchedulingIgnoredDuringExecution }}
+ requiredDuringSchedulingIgnoredDuringExecution:
+ {{- range . }}
+ {{- if dig "labelSelector" nil . }}
+ - {{ toYaml . | indent 16 | trim }}
+ {{- else }}
+ - {{ (merge $defaultSelector .) | toYaml | indent 16 | trim }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- with .podAntiAffinity }}
+ podAntiAffinity:
+ {{- with .preferredDuringSchedulingIgnoredDuringExecution }}
+ preferredDuringSchedulingIgnoredDuringExecution:
+ {{- range . }}
+ - podAffinityTerm:
+ {{- if dig "podAffinityTerm" "labelSelector" nil . }}
+ {{- toYaml .podAffinityTerm | nindent 16 }}
+ {{- else }}
+ {{- (merge $defaultSelector .podAffinityTerm) | toYaml | nindent 16 }}
+ {{- end }}
+ weight: {{ .weight }}
+ {{- end }}
+ {{- end }}
+ {{- with .requiredDuringSchedulingIgnoredDuringExecution }}
+ requiredDuringSchedulingIgnoredDuringExecution:
+ {{- range . }}
+ {{- if dig "labelSelector" nil . }}
+ - {{ toYaml . | indent 16 | trim }}
+ {{- else }}
+ - {{ (merge $defaultSelector .) | toYaml | indent 16 | trim }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.topologySpreadConstraints }}
+ topologySpreadConstraints:
+ {{- range . }}
+ - {{ toYaml . | nindent 10 | trim }}
+ {{- if not (hasKey . "labelSelector") }}
+ labelSelector:
+ matchLabels:
+ {{- include "external-dns.selectorLabels" $ | nindent 14 }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.tolerations }}
+ tolerations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/secret.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/secret.yaml
new file mode 100644
index 00000000..89ec1fe5
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/secret.yaml
@@ -0,0 +1,13 @@
+{{- if .Values.secretConfiguration.enabled }}
+apiVersion: v1
+kind: Secret
+metadata:
+ name: {{ include "external-dns.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+data:
+{{- range $key, $value := .Values.secretConfiguration.data }}
+ {{ $key }}: {{ tpl $value $ | b64enc | quote }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/service.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/service.yaml
new file mode 100644
index 00000000..e55e2a36
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/service.yaml
@@ -0,0 +1,36 @@
+{{- $providerName := include "external-dns.providerName" . }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "external-dns.fullname" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+ {{- with .Values.service.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+{{- with .Values.service.ipFamilies }}
+ ipFamilies:
+ {{- toYaml . | nindent 4 }}
+{{- end }}
+{{- with .Values.service.ipFamilyPolicy }}
+ ipFamilyPolicy: {{ . }}
+{{- end }}
+ type: ClusterIP
+ selector:
+ {{- include "external-dns.selectorLabels" . | nindent 4 }}
+ ports:
+ - name: http
+ port: {{ .Values.service.port }}
+ targetPort: http
+ protocol: TCP
+ {{- if eq $providerName "webhook" }}
+ {{- with .Values.provider.webhook.service }}
+ - name: http-webhook
+ port: {{ .port }}
+ targetPort: http-webhook
+ protocol: TCP
+ {{- end }}
+ {{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/serviceaccount.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/serviceaccount.yaml
new file mode 100644
index 00000000..27196a2a
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/serviceaccount.yaml
@@ -0,0 +1,19 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "external-dns.serviceAccountName" . }}
+ namespace: {{ .Release.Namespace }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+ {{- with .Values.serviceAccount.labels }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ {{- with .Values.serviceAccount.annotations }}
+ annotations:
+ {{- range $k, $v := . }}
+ {{- printf "%s: %s" (toYaml (tpl $k $)) (toYaml (tpl $v $)) | nindent 4 }}
+ {{- end }}
+ {{- end }}
+automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/servicemonitor.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/servicemonitor.yaml
new file mode 100644
index 00000000..004756c7
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/templates/servicemonitor.yaml
@@ -0,0 +1,86 @@
+{{- if .Values.serviceMonitor.enabled -}}
+{{- $providerName := include "external-dns.providerName" . }}
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+ name: {{ include "external-dns.fullname" . }}
+ namespace: {{ default .Release.Namespace .Values.serviceMonitor.namespace }}
+ {{- with .Values.serviceMonitor.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ labels:
+ {{- include "external-dns.labels" . | nindent 4 }}
+ {{- with .Values.serviceMonitor.additionalLabels }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ jobLabel: app.kubernetes.io/instance
+ namespaceSelector:
+ matchNames:
+ - {{ .Release.Namespace }}
+ selector:
+ matchLabels:
+ {{- include "external-dns.selectorLabels" . | nindent 6 }}
+ endpoints:
+ - port: http
+ path: /metrics
+ {{- with .Values.serviceMonitor.interval }}
+ interval: {{ . }}
+ {{- end }}
+ {{- with .Values.serviceMonitor.scheme }}
+ scheme: {{ . }}
+ {{- end }}
+ {{- with .Values.serviceMonitor.bearerTokenFile }}
+ bearerTokenFile: {{ . }}
+ {{- end }}
+ {{- with .Values.serviceMonitor.tlsConfig }}
+ tlsConfig:
+ {{- toYaml .| nindent 8 }}
+ {{- end }}
+ {{- with .Values.serviceMonitor.scrapeTimeout }}
+ scrapeTimeout: {{ . }}
+ {{- end }}
+ {{- with .Values.serviceMonitor.metricRelabelings }}
+ metricRelabelings:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.serviceMonitor.relabelings }}
+ relabelings:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- if eq $providerName "webhook" }}
+ {{- with .Values.provider.webhook.serviceMonitor }}
+ - port: http-webhook
+ path: /metrics
+ {{- with .interval }}
+ interval: {{ . }}
+ {{- end }}
+ {{- with .scheme }}
+ scheme: {{ . }}
+ {{- end }}
+ {{- with .bearerTokenFile }}
+ bearerTokenFile: {{ . }}
+ {{- end }}
+ {{- with .tlsConfig }}
+ tlsConfig:
+ {{- toYaml .| nindent 8 }}
+ {{- end }}
+ {{- with .scrapeTimeout }}
+ scrapeTimeout: {{ . }}
+ {{- end }}
+ {{- with .metricRelabelings }}
+ metricRelabelings:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .relabelings }}
+ relabelings:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ {{- with .Values.serviceMonitor.targetLabels }}
+ targetLabels:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/values.schema.json b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/values.schema.json
new file mode 100644
index 00000000..b4c5e3a4
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/values.schema.json
@@ -0,0 +1,892 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "type": "object",
+ "properties": {
+ "affinity": {
+ "description": "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.",
+ "type": "object"
+ },
+ "annotationFilter": {
+ "description": "Filter resources queried for endpoints by annotation selector.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "annotationPrefix": {
+ "description": "Annotation prefix for external-dns annotations (useful for split horizon DNS with multiple instances).",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "automountServiceAccountToken": {
+ "description": "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`.",
+ "type": "boolean"
+ },
+ "commonLabels": {
+ "description": "Labels to add to all chart resources.",
+ "type": "object"
+ },
+ "deploymentAnnotations": {
+ "description": "Annotations to add to the `Deployment`.",
+ "type": "object"
+ },
+ "deploymentStrategy": {
+ "description": "[Deployment Strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).",
+ "type": "object",
+ "properties": {
+ "type": {
+ "default": "Recreate",
+ "type": "string",
+ "enum": [
+ "Recreate",
+ "RollingUpdate"
+ ]
+ }
+ },
+ "additionalProperties": true
+ },
+ "dnsConfig": {
+ "description": "[DNS config](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config) for the pod, if not set the default will be used.",
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "dnsPolicy": {
+ "description": "[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.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "domainFilters": {
+ "description": "Limit possible target zones by domain suffixes.",
+ "type": "array"
+ },
+ "enabled": {
+ "description": "No effect - reserved for use in sub-charting",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "env": {
+ "description": "[Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `external-dns` container.",
+ "type": "array"
+ },
+ "excludeDomains": {
+ "description": "Intentionally exclude domains from being managed.",
+ "type": "array"
+ },
+ "extraArgs": {
+ "description": "Extra arguments to provide to _ExternalDNS_. An array or map can be used, with maps allowing for value overrides; maps also support slice values to use the same arg multiple times.",
+ "type": [
+ "array",
+ "null",
+ "object"
+ ],
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "extraContainers": {
+ "description": "Extra containers to add to the `Deployment`.",
+ "type": "array"
+ },
+ "extraVolumeMounts": {
+ "description": "Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `external-dns` container.",
+ "type": "array"
+ },
+ "extraVolumes": {
+ "description": "Extra [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the `Pod`.",
+ "type": "array"
+ },
+ "fullnameOverride": {
+ "description": "Override the full name of the chart.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "gatewayNamespace": {
+ "description": "_Gateway API_ gateway namespace to watch.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "global": {
+ "type": "object",
+ "properties": {
+ "imagePullSecrets": {
+ "description": "Global image pull secrets.",
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
+ }
+ },
+ "image": {
+ "type": "object",
+ "properties": {
+ "pullPolicy": {
+ "description": "Image pull policy for the `external-dns` container.",
+ "type": "string",
+ "enum": [
+ "IfNotPresent",
+ "Always"
+ ]
+ },
+ "repository": {
+ "description": "Image repository for the `external-dns` container.",
+ "type": "string"
+ },
+ "tag": {
+ "description": "Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "additionalProperties": false
+ },
+ "imagePullSecrets": {
+ "description": "Image pull secrets.",
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "initContainers": {
+ "description": "[Init containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) to add to the `Pod` definition.",
+ "type": "array"
+ },
+ "interval": {
+ "description": "Interval for DNS updates.",
+ "type": "string"
+ },
+ "labelFilter": {
+ "description": "Filter resources queried for endpoints by label selector.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "livenessProbe": {
+ "description": "[Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.",
+ "type": "object",
+ "properties": {
+ "failureThreshold": {
+ "type": "integer"
+ },
+ "httpGet": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "port": {
+ "type": "string"
+ }
+ }
+ },
+ "initialDelaySeconds": {
+ "type": "integer"
+ },
+ "periodSeconds": {
+ "type": "integer"
+ },
+ "successThreshold": {
+ "type": "integer"
+ },
+ "timeoutSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "logFormat": {
+ "description": "Log format.",
+ "default": "text",
+ "type": "string",
+ "enum": [
+ "text",
+ "json"
+ ]
+ },
+ "logLevel": {
+ "description": "Log level.",
+ "default": "info",
+ "type": "string",
+ "enum": [
+ "panic",
+ "debug",
+ "info",
+ "warning",
+ "error",
+ "fatal"
+ ]
+ },
+ "managedRecordTypes": {
+ "description": "Record types to manage (default: A, AAAA, CNAME)",
+ "type": [
+ "array",
+ "null"
+ ],
+ "uniqueItems": true,
+ "items": {
+ "type": "string"
+ }
+ },
+ "nameOverride": {
+ "description": "Override the name of the chart.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "namespaced": {
+ "description": "if `true`, _ExternalDNS_ will run in a namespaced scope (`Role`` and `Rolebinding`` will be namespaced too).",
+ "type": "boolean"
+ },
+ "nodeSelector": {
+ "description": "Node labels to match for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).",
+ "type": "object"
+ },
+ "podAnnotations": {
+ "description": "Annotations to add to the `Pod`.",
+ "type": "object"
+ },
+ "podLabels": {
+ "description": "Labels to add to the `Pod`.",
+ "type": "object"
+ },
+ "podSecurityContext": {
+ "description": "[Pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core), this supports full customisation.",
+ "type": "object",
+ "properties": {
+ "fsGroup": {
+ "type": "integer"
+ },
+ "runAsNonRoot": {
+ "type": "boolean"
+ },
+ "seccompProfile": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "policy": {
+ "description": "How DNS records are synchronized between sources and providers; available values are `create-only`, `sync`, \u0026 `upsert-only`.",
+ "default": "upsert-only",
+ "type": "string",
+ "enum": [
+ "create-only",
+ "sync",
+ "upsert-only"
+ ]
+ },
+ "priorityClassName": {
+ "description": "Priority class name for the `Pod`.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "provider": {
+ "type": [
+ "object",
+ "string"
+ ],
+ "properties": {
+ "name": {
+ "description": "_ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers).",
+ "type": "string"
+ },
+ "webhook": {
+ "type": "object",
+ "properties": {
+ "args": {
+ "description": "Extra arguments to provide for the `webhook` container.",
+ "type": "array"
+ },
+ "env": {
+ "description": "[Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container.",
+ "type": "array"
+ },
+ "extraVolumeMounts": {
+ "description": "Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container.",
+ "type": "array"
+ },
+ "image": {
+ "type": "object",
+ "properties": {
+ "pullPolicy": {
+ "description": "Image pull policy for the `webhook` container.",
+ "type": "string"
+ },
+ "repository": {
+ "description": "Image repository for the `webhook` container.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "tag": {
+ "description": "Image tag for the `webhook` container.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ }
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "cpu": {
+ "type": "string"
+ },
+ "memory": {
+ "type": "string"
+ }
+ }
+ },
+ "livenessProbe": {
+ "description": "[Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.",
+ "type": "object",
+ "properties": {
+ "failureThreshold": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "httpGet": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "port": {
+ "default": "string",
+ "type": [
+ "integer",
+ "string"
+ ]
+ }
+ }
+ },
+ "initialDelaySeconds": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "periodSeconds": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "successThreshold": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "timeoutSeconds": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ }
+ },
+ "readinessProbe": {
+ "description": "[Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container.",
+ "type": "object",
+ "properties": {
+ "failureThreshold": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "httpGet": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "port": {
+ "default": "string",
+ "type": [
+ "integer",
+ "string"
+ ]
+ }
+ }
+ },
+ "initialDelaySeconds": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "periodSeconds": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "successThreshold": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "timeoutSeconds": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ }
+ },
+ "requests": {
+ "type": "object",
+ "properties": {
+ "cpu": {
+ "type": "string"
+ },
+ "memory": {
+ "type": "string"
+ }
+ }
+ },
+ "resources": {
+ "description": "[Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container.",
+ "type": "object"
+ },
+ "securityContext": {
+ "description": "[Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container.",
+ "type": "object"
+ },
+ "service": {
+ "type": "object",
+ "properties": {
+ "port": {
+ "description": "Webhook exposed HTTP port for the service.",
+ "type": "integer"
+ }
+ }
+ },
+ "serviceMonitor": {
+ "description": "Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container.",
+ "type": "object",
+ "properties": {
+ "bearerTokenFile": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "interval": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "metricRelabelings": {
+ "type": "array"
+ },
+ "relabelings": {
+ "type": "array"
+ },
+ "scheme": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "scrapeTimeout": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "tlsConfig": {
+ "type": "object"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "rbac": {
+ "type": "object",
+ "properties": {
+ "additionalPermissions": {
+ "description": "Additional rules to add to the `ClusterRole`.",
+ "type": "array"
+ },
+ "create": {
+ "description": "If `true`, create a `ClusterRole` \u0026 `ClusterRoleBinding` with access to the Kubernetes API.",
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": true
+ },
+ "readinessProbe": {
+ "description": "[Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.",
+ "type": "object",
+ "properties": {
+ "failureThreshold": {
+ "type": "integer"
+ },
+ "httpGet": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "port": {
+ "type": "string"
+ }
+ }
+ },
+ "initialDelaySeconds": {
+ "type": "integer"
+ },
+ "periodSeconds": {
+ "type": "integer"
+ },
+ "successThreshold": {
+ "type": "integer"
+ },
+ "timeoutSeconds": {
+ "type": "integer"
+ }
+ }
+ },
+ "registry": {
+ "description": "Specify the registry for storing ownership and labels. Valid values are `txt`, `aws-sd`, `dynamodb` \u0026 `noop`.",
+ "default": "txt",
+ "type": "string",
+ "enum": [
+ "txt",
+ "aws-sd",
+ "dynamodb",
+ "noop"
+ ]
+ },
+ "resources": {
+ "description": "[Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `external-dns` container.",
+ "type": "object",
+ "properties": {
+ "limits": {
+ "type": "object",
+ "properties": {
+ "cpu": {
+ "type": "string"
+ },
+ "memory": {
+ "type": "string"
+ }
+ }
+ },
+ "requests": {
+ "type": "object",
+ "properties": {
+ "cpu": {
+ "type": "string"
+ },
+ "memory": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "revisionHistoryLimit": {
+ "description": "Specify the number of old `ReplicaSets` to retain to allow rollback of the `Deployment``.",
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0
+ },
+ "secretConfiguration": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "description": "`Secret` data.",
+ "type": "object"
+ },
+ "enabled": {
+ "description": "If `true`, create a `Secret` to store sensitive provider configuration (**DEPRECATED**).",
+ "type": "boolean"
+ },
+ "mountPath": {
+ "description": "Mount path for the `Secret`, this can be templated.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "subPath": {
+ "description": "Sub-path for mounting the `Secret`, this can be templated.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ }
+ },
+ "securityContext": {
+ "description": "[Security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `external-dns` container.",
+ "type": "object",
+ "properties": {
+ "allowPrivilegeEscalation": {
+ "type": "boolean"
+ },
+ "capabilities": {
+ "type": "object",
+ "properties": {
+ "drop": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "privileged": {
+ "type": "boolean"
+ },
+ "readOnlyRootFilesystem": {
+ "type": "boolean"
+ },
+ "runAsGroup": {
+ "type": "integer"
+ },
+ "runAsNonRoot": {
+ "type": "boolean"
+ },
+ "runAsUser": {
+ "type": "integer"
+ }
+ }
+ },
+ "service": {
+ "type": "object",
+ "properties": {
+ "annotations": {
+ "description": "Service annotations.",
+ "type": "object"
+ },
+ "ipFamilies": {
+ "description": "Service IP families (e.g. IPv4 and/or IPv6).",
+ "type": [
+ "array",
+ "null"
+ ],
+ "maxItems": 2,
+ "minItems": 0,
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "IPv4",
+ "IPv6"
+ ]
+ }
+ },
+ "ipFamilyPolicy": {
+ "description": "Service IP family policy.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "enum": [
+ "SingleStack",
+ "PreferDualStack",
+ "RequireDualStack",
+ null
+ ]
+ },
+ "port": {
+ "description": "Service HTTP port.",
+ "default": 7979,
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ },
+ "serviceAccount": {
+ "type": "object",
+ "properties": {
+ "annotations": {
+ "description": "Annotations to add to the service account. Templates are allowed in both the key and the value. Example: `example.com/annotation/{{ .Values.nameOverride }}: {{ .Values.nameOverride }}`",
+ "type": "object"
+ },
+ "automountServiceAccountToken": {
+ "description": "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`.",
+ "type": "boolean"
+ },
+ "create": {
+ "description": "If `true`, create a new `ServiceAccount`.",
+ "type": "boolean"
+ },
+ "labels": {
+ "description": "Labels to add to the service account.",
+ "type": "object"
+ },
+ "name": {
+ "description": "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.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ }
+ },
+ "serviceMonitor": {
+ "type": "object",
+ "properties": {
+ "additionalLabels": {
+ "description": "Additional labels for the `ServiceMonitor`.",
+ "type": "object"
+ },
+ "annotations": {
+ "description": "Annotations to add to the `ServiceMonitor`.",
+ "type": "object"
+ },
+ "bearerTokenFile": {
+ "description": "Provide a bearer token file for the `ServiceMonitor`.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "enabled": {
+ "description": "If `true`, create a `ServiceMonitor` resource to support the _Prometheus Operator_.",
+ "type": "boolean"
+ },
+ "interval": {
+ "description": "If set override the _Prometheus_ default interval.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "metricRelabelings": {
+ "description": "[Metric relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs) to apply to samples before ingestion.",
+ "type": "array"
+ },
+ "namespace": {
+ "description": "If set create the `ServiceMonitor` in an alternate namespace.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "relabelings": {
+ "description": "[Relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) to apply to samples before ingestion.",
+ "type": "array"
+ },
+ "scheme": {
+ "description": "If set overrides the _Prometheus_ default scheme.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "scrapeTimeout": {
+ "description": "If set override the _Prometheus_ default scrape timeout.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "targetLabels": {
+ "description": "Provide target labels for the `ServiceMonitor`.",
+ "type": "array"
+ },
+ "tlsConfig": {
+ "description": "Configure the `ServiceMonitor` [TLS config](https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#tlsconfig).",
+ "type": "object"
+ }
+ }
+ },
+ "shareProcessNamespace": {
+ "description": "If `true`, the `Pod` will have [process namespace sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) enabled.",
+ "type": "boolean"
+ },
+ "sources": {
+ "description": "_Kubernetes_ resources to monitor for DNS entries.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "terminationGracePeriodSeconds": {
+ "description": "Termination grace period for the `Pod` in seconds.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "tolerations": {
+ "description": "Node taints which will be tolerated for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).",
+ "type": "array"
+ },
+ "topologySpreadConstraints": {
+ "description": "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.",
+ "type": "array"
+ },
+ "triggerLoopOnEvent": {
+ "description": "If `true`, triggers run loop on create/update/delete events in addition of regular interval.",
+ "type": "boolean"
+ },
+ "txtOwnerId": {
+ "description": "Specify an identifier for this instance of _ExternalDNS_ when using a registry other than `noop`.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "txtPrefix": {
+ "description": "Specify a prefix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtSuffix`.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "txtSuffix": {
+ "description": "Specify a suffix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtPrefix`.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "additionalProperties": true
+}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/values.yaml b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/values.yaml
new file mode 100644
index 00000000..46fbe8f7
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/charts/external-dns/values.yaml
@@ -0,0 +1,322 @@
+# Default values for external-dns.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+global:
+ # -- Global image pull secrets.
+ imagePullSecrets: [] # @schema item: object
+
+image: # @schema additionalProperties: false
+ # -- Image repository for the `external-dns` container.
+ repository: registry.k8s.io/external-dns/external-dns
+ # -- Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set.
+ tag: # @schema type:[string, null]
+ # -- Image pull policy for the `external-dns` container.
+ pullPolicy: IfNotPresent # @schema enum:[IfNotPresent, Always]
+
+# -- Image pull secrets.
+imagePullSecrets: [] # @schema item: object
+
+# -- (string) Override the name of the chart.
+nameOverride: # @schema type:[string, null]; default: null
+
+# -- (string) Override the full name of the chart.
+fullnameOverride: # @schema type:[string, null]; default: null
+
+# -- Labels to add to all chart resources.
+commonLabels: {}
+
+serviceAccount:
+ # -- If `true`, create a new `ServiceAccount`.
+ create: true
+ # -- Labels to add to the service account.
+ labels: {}
+ # -- Annotations to add to the service account. Templates are allowed in both the key and the value. Example: `example.com/annotation/{{ .Values.nameOverride }}: {{ .Values.nameOverride }}`
+ 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: # @schema type:[string, null]; default: null
+ # -- 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: true
+
+service:
+ # -- Service annotations.
+ annotations: {}
+ # -- Service HTTP port.
+ port: 7979 # @schema minimum:0; default:7979
+ # -- Service IP families (e.g. IPv4 and/or IPv6).
+ ipFamilies: [] # @schema type: [array, null]; item: string; itemEnum: ["IPv4", "IPv6"]; minItems:0; maxItems:2; uniqueItems: true
+ # - IPv4
+ # - IPv6
+ # -- Service IP family policy.
+ ipFamilyPolicy: # @schema type: [string, null]; enum:[SingleStack, PreferDualStack, RequireDualStack, null]
+
+rbac: # @schema additionalProperties: true
+ # -- If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API.
+ create: true
+ # -- Additional rules to add to the `ClusterRole`.
+ additionalPermissions: []
+
+# -- Annotations to add to the `Deployment`.
+deploymentAnnotations: {}
+
+# -- Extra containers to add to the `Deployment`.
+extraContainers: []
+
+# -- [Deployment Strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).
+deploymentStrategy: # @schema additionalProperties: true
+ type: Recreate # @schema enum:[Recreate, RollingUpdate]; type:string; default: Recreate
+
+# -- (int) Specify the number of old `ReplicaSets` to retain to allow rollback of the `Deployment``.
+revisionHistoryLimit: # @schema type:[integer, null];minimum:0
+
+# -- Labels to add to the `Pod`.
+podLabels: {}
+
+# -- 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: true
+
+# -- 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
+
+# -- (string) Priority class name for the `Pod`.
+priorityClassName: # @schema type:[string, null]; default: null
+
+# -- (int) Termination grace period for the `Pod` in seconds.
+terminationGracePeriodSeconds: # @schema type:[integer, null]
+
+# -- (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: # @schema type:[string, null]; default: null
+
+# -- (object) [DNS config](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config) for the pod, if not set the default will be used.
+dnsConfig: # @schema type:[object, null]; default: null
+
+# -- [Init containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) to add to the `Pod` definition.
+initContainers: []
+
+# -- [Security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) 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
+ port: http
+ initialDelaySeconds: 10
+ periodSeconds: 10
+ timeoutSeconds: 5
+ 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
+ port: http
+ initialDelaySeconds: 5
+ periodSeconds: 10
+ timeoutSeconds: 5
+ failureThreshold: 6
+ successThreshold: 1
+
+# -- 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: {}
+
+# -- 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: # @schema type:[string, null]; default: null
+ # -- (string) If set override the _Prometheus_ default interval.
+ interval: # @schema type:[string, null]; default: null
+ # -- (string) If set override the _Prometheus_ default scrape timeout.
+ scrapeTimeout: # @schema type:[string, null]; default: null
+ # -- (string) If set overrides the _Prometheus_ default scheme.
+ scheme: # @schema type:[string, null]; default: null
+ # -- 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: # @schema type:[string, null]; default: null
+ # -- [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 # @schema enum:[panic, debug, info, warning, error, fatal]; type:string; default: "info"
+
+# -- Log format.
+logFormat: text # @schema enum:["text", "json"]; type:string; default: "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
+
+# -- _Gateway API_ gateway namespace to watch.
+gatewayNamespace: # @schema type:[string, null]; default: null
+
+# -- _Kubernetes_ resources to monitor for DNS entries.
+sources:
+ - service
+ - ingress
+
+# -- How DNS records are synchronized between sources and providers; available values are `create-only`, `sync`, & `upsert-only`.
+policy: upsert-only # @schema enum:[create-only, sync, upsert-only]; type:string; default: "upsert-only"
+
+# -- Specify the registry for storing ownership and labels.
+# Valid values are `txt`, `aws-sd`, `dynamodb` & `noop`.
+registry: txt # @schema enum:[txt, aws-sd, dynamodb, noop]; default: "txt"
+# -- (string) Specify an identifier for this instance of _ExternalDNS_ when using a registry other than `noop`.
+txtOwnerId: # @schema type:[string, null]; default: null
+# -- (string) Specify a prefix for the domain names of TXT records created for the `txt` registry.
+# Mutually exclusive with `txtSuffix`.
+txtPrefix: # @schema type:[string, null]; default: null
+# -- (string) Specify a suffix for the domain names of TXT records created for the `txt` registry.
+# Mutually exclusive with `txtPrefix`.
+txtSuffix: # @schema type:[string, null]; default: null
+
+# -- Limit possible target zones by domain suffixes.
+domainFilters: []
+
+# -- Intentionally exclude domains from being managed.
+excludeDomains: []
+
+# -- Filter resources queried for endpoints by label selector.
+labelFilter: # @schema type: [string,null]; default: null
+
+# -- Filter resources queried for endpoints by annotation selector.
+annotationFilter: # @schema type: [string,null]; default: null
+
+# -- Annotation prefix for external-dns annotations (useful for split horizon DNS with multiple instances).
+annotationPrefix: # @schema type: [string,null]; default: null
+
+# -- Record types to manage (default: A, AAAA, CNAME)
+managedRecordTypes: [] # @schema type: [array, null]; item: string; uniqueItems: true
+
+provider: # @schema type: [object, string]
+ # -- _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers).
+ name: aws
+ webhook:
+ image:
+ # -- (string) Image repository for the `webhook` container.
+ repository: # @schema type:[string, null]; default: null
+ # -- (string) Image tag for the `webhook` container.
+ tag: # @schema type:[string, null]; default: null
+ # -- Image pull policy for the `webhook` container.
+ pullPolicy: IfNotPresent
+ # -- [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container.
+ env: []
+ # -- Extra arguments to provide for the `webhook` container.
+ args: []
+ # -- Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container.
+ extraVolumeMounts: []
+ # -- [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container.
+ resources: {}
+ # -- [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container.
+ # @default -- See _values.yaml_
+ securityContext: {}
+ # -- [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 # @schema type:[string, null]; default: null
+ port: http-webhook # @schema type:[integer,string]; default: string
+ initialDelaySeconds: 10 # @schema type:[integer, null]; default: null
+ periodSeconds: 10 # @schema type:[integer, null]; default: null
+ timeoutSeconds: 5 # @schema type:[integer, null]; default: null
+ failureThreshold: 2 # @schema type:[integer, null]; default: null
+ successThreshold: 1 # @schema type:[integer, null]; default: null
+ # -- [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container.
+ # @default -- See _values.yaml_
+ readinessProbe:
+ httpGet:
+ path: /healthz # @schema type:[string, null]; default: null
+ port: http-webhook # @schema type:[integer,string]; default: string
+ initialDelaySeconds: 5 # @schema type:[integer, null]; default: null
+ periodSeconds: 10 # @schema type:[integer, null]; default: null
+ timeoutSeconds: 5 # @schema type:[integer, null]; default: null
+ failureThreshold: 6 # @schema type:[integer, null]; default: null
+ successThreshold: 1 # @schema type:[integer, null]; default: null
+ service:
+ # -- Webhook exposed HTTP port for the service.
+ port: 8080
+ # -- Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container.
+ # @default -- See _values.yaml_
+ serviceMonitor:
+ interval: # @schema type:[string, null]; default: null
+ scheme: # @schema type:[string, null]; default: null
+ tlsConfig: {}
+ bearerTokenFile: # @schema type:[string, null]; default: null
+ scrapeTimeout: # @schema type:[string, null]; default: null
+ metricRelabelings: []
+ relabelings: []
+
+# -- Extra arguments to provide to _ExternalDNS_.
+# An array or map can be used, with maps allowing for value overrides; maps also support slice values to use the same arg multiple times.
+extraArgs: {} # @schema type: [array, null, object]; item: string; uniqueItems: true
+
+secretConfiguration:
+ # -- If `true`, create a `Secret` to store sensitive provider configuration (**DEPRECATED**).
+ enabled: false
+ # -- Mount path for the `Secret`, this can be templated.
+ mountPath: # @schema type:[string, null]; default: null
+ # -- Sub-path for mounting the `Secret`, this can be templated.
+ subPath: # @schema type:[string, null]; default: null
+ # -- `Secret` data.
+ data: {}
+
+# -- (bool) No effect - reserved for use in sub-charting.
+enabled: # @schema type: [boolean, null]; description: No effect - reserved for use in sub-charting
diff --git a/packs/k8gb-0.19.0/charts/k8gb/crd/dns-endpoint-crd-manifest.yaml b/packs/k8gb-0.19.0/charts/k8gb/crd/dns-endpoint-crd-manifest.yaml
new file mode 100644
index 00000000..9254f89d
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/crd/dns-endpoint-crd-manifest.yaml
@@ -0,0 +1,93 @@
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.5.0
+ api-approved.kubernetes.io: "https://github.com/kubernetes-sigs/external-dns/pull/2007"
+ creationTimestamp: null
+ name: dnsendpoints.externaldns.k8s.io
+spec:
+ group: externaldns.k8s.io
+ names:
+ kind: DNSEndpoint
+ listKind: DNSEndpointList
+ plural: dnsendpoints
+ singular: dnsendpoint
+ scope: Namespaced
+ versions:
+ - name: v1alpha1
+ schema:
+ openAPIV3Schema:
+ properties:
+ apiVersion:
+ description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+ type: string
+ kind:
+ description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: DNSEndpointSpec defines the desired state of DNSEndpoint
+ properties:
+ endpoints:
+ items:
+ description: Endpoint is a high-level way of a connection between a service and an IP
+ properties:
+ dnsName:
+ description: The hostname of the DNS record
+ type: string
+ labels:
+ additionalProperties:
+ type: string
+ description: Labels stores labels defined for the Endpoint
+ type: object
+ providerSpecific:
+ description: ProviderSpecific stores provider specific config
+ items:
+ description: ProviderSpecificProperty holds the name and value of a configuration which is specific to individual DNS providers
+ properties:
+ name:
+ type: string
+ value:
+ type: string
+ type: object
+ type: array
+ recordTTL:
+ description: TTL for the record
+ format: int64
+ type: integer
+ recordType:
+ description: RecordType type of record, e.g. CNAME, A, SRV, TXT etc
+ type: string
+ setIdentifier:
+ description: Identifier to distinguish multiple records with the same name and type (e.g. Route53 records with routing policies other than 'simple')
+ type: string
+ targets:
+ description: The targets the DNS record points to
+ items:
+ type: string
+ type: array
+ type: object
+ type: array
+ type: object
+ status:
+ description: DNSEndpointStatus defines the observed state of DNSEndpoint
+ properties:
+ observedGeneration:
+ description: The generation observed by the external-dns controller.
+ format: int64
+ type: integer
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
+status:
+ acceptedNames:
+ kind: ""
+ plural: ""
+ conditions: []
+ storedVersions: []
diff --git a/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.absa.oss_gslbs.yaml b/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.absa.oss_gslbs.yaml
new file mode 100644
index 00000000..c7e1ea8f
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.absa.oss_gslbs.yaml
@@ -0,0 +1,494 @@
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.20.1
+ name: gslbs.k8gb.absa.oss
+spec:
+ group: k8gb.absa.oss
+ names:
+ kind: Gslb
+ listKind: GslbList
+ plural: gslbs
+ singular: gslb
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .spec.strategy.type
+ name: strategy
+ type: string
+ - jsonPath: .status.geoTag
+ name: geoTag
+ type: string
+ - jsonPath: .status.hosts
+ name: hosts
+ priority: 1
+ type: string
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: Gslb is the Schema for the gslbs API
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: GslbSpec defines the desired state of Gslb
+ properties:
+ ingress:
+ description: Gslb-enabled Ingress Spec
+ properties:
+ backend:
+ description: |-
+ A default backend capable of servicing requests that don't match any
+ rule. At least one of 'backend' or 'rules' must be specified. This field
+ is optional to allow the loadbalancer controller or defaulting logic to
+ specify a global default.
+ properties:
+ resource:
+ description: |-
+ resource is an ObjectRef to another Kubernetes resource in the namespace
+ of the Ingress object. If resource is specified, a service.Name and
+ service.Port must not be specified.
+ This is a mutually exclusive setting with "Service".
+ properties:
+ apiGroup:
+ description: |-
+ APIGroup is the group for the resource being referenced.
+ If APIGroup is not specified, the specified Kind must be in the core API group.
+ For any other third-party types, APIGroup is required.
+ type: string
+ kind:
+ description: Kind is the type of resource being referenced
+ type: string
+ name:
+ description: Name is the name of resource being referenced
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ service:
+ description: |-
+ service references a service as a backend.
+ This is a mutually exclusive setting with "Resource".
+ properties:
+ name:
+ description: |-
+ name is the referenced service. The service must exist in
+ the same namespace as the Ingress object.
+ type: string
+ port:
+ description: |-
+ port of the referenced service. A port name or port number
+ is required for a IngressServiceBackend.
+ properties:
+ name:
+ description: |-
+ name is the name of the port on the Service.
+ This is a mutually exclusive setting with "Number".
+ type: string
+ number:
+ description: |-
+ number is the numerical port number (e.g. 80) on the Service.
+ This is a mutually exclusive setting with "Name".
+ format: int32
+ type: integer
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - name
+ type: object
+ type: object
+ ingressClassName:
+ description: |-
+ IngressClassName is the name of the IngressClass cluster resource. The
+ associated IngressClass defines which controller will implement the
+ resource. This replaces the deprecated `kubernetes.io/ingress.class`
+ annotation. For backwards compatibility, when that annotation is set, it
+ must be given precedence over this field. The controller may emit a
+ warning if the field and annotation have different values.
+ Implementations of this API should ignore Ingresses without a class
+ specified. An IngressClass resource may be marked as default, which can
+ be used to set a default value for this field. For more information,
+ refer to the IngressClass documentation.
+ type: string
+ rules:
+ description: |-
+ A list of host rules used to configure the Ingress. If unspecified, or
+ no rule matches, all traffic is sent to the default backend.
+ items:
+ description: |-
+ IngressRule represents the rules mapping the paths under a specified host to
+ the related backend services. Incoming requests are first evaluated for a host
+ match, then routed to the backend associated with the matching IngressRuleValue.
+ properties:
+ host:
+ description: "Host is the fully qualified domain name of
+ a network host, as defined by RFC 3986.\nNote the following
+ deviations from the \"host\" part of the\nURI as defined
+ in RFC 3986:\n1. IPs are not allowed. Currently an IngressRuleValue
+ can only apply to\n the IP in the Spec of the parent
+ Ingress.\n2. The `:` delimiter is not respected because
+ ports are not allowed.\n\t Currently the port of an Ingress
+ is implicitly :80 for http and\n\t :443 for https.\nBoth
+ these may change in the future.\nIncoming requests are
+ matched against the host before the\nIngressRuleValue.
+ If the host is unspecified, the Ingress routes all\ntraffic
+ based on the specified IngressRuleValue.\n\nHost can be
+ \"precise\" which is a domain name without the terminating
+ dot of\na network host (e.g. \"foo.bar.com\") or \"wildcard\",
+ which is a domain name\nprefixed with a single wildcard
+ label (e.g. \"*.foo.com\").\nThe wildcard character '*'
+ must appear by itself as the first DNS label and\nmatches
+ only a single label. You cannot have a wildcard label
+ by itself (e.g. Host == \"*\").\nRequests will be matched
+ against the Host field in the following way:\n1. If Host
+ is precise, the request matches this rule if the http
+ host header is equal to Host.\n2. If Host is a wildcard,
+ then the request matches this rule if the http host header\nis
+ to equal to the suffix (removing the first label) of the
+ wildcard rule."
+ type: string
+ http:
+ description: |-
+ HTTPIngressRuleValue is a list of http selectors
+ pointing to backends. In the example: http:///?
+ -> backend where where parts of the url correspond to
+ RFC 3986, this resource will be used to match against
+ everything after the last '/' and before the first '?'
+ or '#'.
+ properties:
+ paths:
+ description: paths is a collection of paths that map
+ requests to backends.
+ items:
+ description: |-
+ HTTPIngressPath associates a path with a backend. Incoming urls matching the
+ path are forwarded to the backend.
+ properties:
+ backend:
+ description: |-
+ backend defines the referenced service endpoint to which the traffic
+ will be forwarded to.
+ properties:
+ resource:
+ description: |-
+ resource is an ObjectRef to another Kubernetes resource in the namespace
+ of the Ingress object. If resource is specified, a service.Name and
+ service.Port must not be specified.
+ This is a mutually exclusive setting with "Service".
+ properties:
+ apiGroup:
+ description: |-
+ APIGroup is the group for the resource being referenced.
+ If APIGroup is not specified, the specified Kind must be in the core API group.
+ For any other third-party types, APIGroup is required.
+ type: string
+ kind:
+ description: Kind is the type of resource
+ being referenced
+ type: string
+ name:
+ description: Name is the name of resource
+ being referenced
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ service:
+ description: |-
+ service references a service as a backend.
+ This is a mutually exclusive setting with "Resource".
+ properties:
+ name:
+ description: |-
+ name is the referenced service. The service must exist in
+ the same namespace as the Ingress object.
+ type: string
+ port:
+ description: |-
+ port of the referenced service. A port name or port number
+ is required for a IngressServiceBackend.
+ properties:
+ name:
+ description: |-
+ name is the name of the port on the Service.
+ This is a mutually exclusive setting with "Number".
+ type: string
+ number:
+ description: |-
+ number is the numerical port number (e.g. 80) on the Service.
+ This is a mutually exclusive setting with "Name".
+ format: int32
+ type: integer
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - name
+ type: object
+ type: object
+ path:
+ description: |-
+ path is matched against the path of an incoming request. Currently it can
+ contain characters disallowed from the conventional "path" part of a URL
+ as defined by RFC 3986. Paths must begin with a '/' and must be present
+ when using PathType with value "Exact" or "Prefix".
+ type: string
+ pathType:
+ description: |-
+ pathType determines the interpretation of the path matching. PathType can
+ be one of the following values:
+ * Exact: Matches the URL path exactly.
+ * Prefix: Matches based on a URL path prefix split by '/'. Matching is
+ done on a path element by element basis. A path element refers is the
+ list of labels in the path split by the '/' separator. A request is a
+ match for path p if every p is an element-wise prefix of p of the
+ request path. Note that if the last element of the path is a substring
+ of the last element in request path, it is not a match (e.g. /foo/bar
+ matches /foo/bar/baz, but does not match /foo/barbaz).
+ * ImplementationSpecific: Interpretation of the Path matching is up to
+ the IngressClass. Implementations can treat this as a separate PathType
+ or treat it identically to Prefix or Exact path types.
+ Implementations are required to support all path types.
+ type: string
+ required:
+ - backend
+ - pathType
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - paths
+ type: object
+ required:
+ - http
+ type: object
+ type: array
+ tls:
+ description: |-
+ TLS configuration. Currently the Ingress only supports a single TLS
+ port, 443. If multiple members of this list specify different hosts, they
+ will be multiplexed on the same port according to the hostname specified
+ through the SNI TLS extension, if the ingress controller fulfilling the
+ ingress supports SNI.
+ items:
+ description: IngressTLS describes the transport layer security
+ associated with an ingress.
+ properties:
+ hosts:
+ description: |-
+ hosts is a list of hosts included in the TLS certificate. The values in
+ this list must match the name/s used in the tlsSecret. Defaults to the
+ wildcard host setting for the loadbalancer controller fulfilling this
+ Ingress, if left unspecified.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ secretName:
+ description: |-
+ secretName is the name of the secret used to terminate TLS traffic on
+ port 443. Field is left optional to allow TLS routing based on SNI
+ hostname alone. If the SNI host in a listener conflicts with the "Host"
+ header field used by an IngressRule, the SNI host is used for termination
+ and value of the "Host" header is used for routing.
+ type: string
+ type: object
+ type: array
+ type: object
+ resourceRef:
+ description: ResourceRef spec
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements.
+ The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies
+ to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ strategy:
+ description: Gslb Strategy spec
+ properties:
+ dnsTtlSeconds:
+ description: Defines DNS record TTL in seconds
+ type: integer
+ primaryGeoTag:
+ description: Primary Geo Tag. Valid for failover strategy only
+ type: string
+ splitBrainThresholdSeconds:
+ description: Split brain TXT record expiration in seconds. The
+ field is deprecated and not used.
+ type: integer
+ type:
+ description: Load balancing strategy type:(roundRobin|failover)
+ type: string
+ weight:
+ additionalProperties:
+ type: integer
+ description: Weight is defined by map region:weight
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - strategy
+ type: object
+ status:
+ description: GslbStatus defines the observed state of Gslb
+ properties:
+ geoTag:
+ description: Cluster Geo Tag
+ type: string
+ healthyRecords:
+ additionalProperties:
+ items:
+ type: string
+ type: array
+ description: Current Healthy DNS record structure
+ type: object
+ hosts:
+ description: Comma-separated list of hosts
+ type: string
+ loadBalancer:
+ description: LoadBalancer configuration
+ properties:
+ exposedIps:
+ description: ExposedIPs on the local Load Balancer
+ items:
+ type: string
+ type: array
+ type: object
+ servers:
+ description: Servers configuration
+ items:
+ description: Servers holds the GSLB's servers' configuration
+ properties:
+ host:
+ description: Hostname exposed by the GSLB
+ type: string
+ services:
+ description: Kubernetes Services backing the load balanced application
+ items:
+ description: NamespacedName holds a reference to a k8s resource
+ properties:
+ name:
+ description: Name of the resource
+ type: string
+ namespace:
+ description: Namespace where the resource can be found
+ type: string
+ required:
+ - name
+ - namespace
+ type: object
+ type: array
+ type: object
+ type: array
+ serviceHealth:
+ additionalProperties:
+ type: string
+ description: Associated Service status
+ type: object
+ required:
+ - geoTag
+ - healthyRecords
+ - serviceHealth
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.io_gslbs.yaml b/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.io_gslbs.yaml
new file mode 100644
index 00000000..c148b510
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.io_gslbs.yaml
@@ -0,0 +1,494 @@
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.19.0
+ name: gslbs.k8gb.io
+spec:
+ group: k8gb.io
+ names:
+ kind: Gslb
+ listKind: GslbList
+ plural: gslbs
+ singular: gslb
+ scope: Namespaced
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .spec.strategy.type
+ name: strategy
+ type: string
+ - jsonPath: .status.geoTag
+ name: geoTag
+ type: string
+ - jsonPath: .status.hosts
+ name: hosts
+ priority: 1
+ type: string
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: Gslb is the Schema for the gslbs API
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ description: GslbSpec defines the desired state of Gslb
+ properties:
+ ingress:
+ description: Gslb-enabled Ingress Spec
+ properties:
+ backend:
+ description: |-
+ A default backend capable of servicing requests that don't match any
+ rule. At least one of 'backend' or 'rules' must be specified. This field
+ is optional to allow the loadbalancer controller or defaulting logic to
+ specify a global default.
+ properties:
+ resource:
+ description: |-
+ resource is an ObjectRef to another Kubernetes resource in the namespace
+ of the Ingress object. If resource is specified, a service.Name and
+ service.Port must not be specified.
+ This is a mutually exclusive setting with "Service".
+ properties:
+ apiGroup:
+ description: |-
+ APIGroup is the group for the resource being referenced.
+ If APIGroup is not specified, the specified Kind must be in the core API group.
+ For any other third-party types, APIGroup is required.
+ type: string
+ kind:
+ description: Kind is the type of resource being referenced
+ type: string
+ name:
+ description: Name is the name of resource being referenced
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ service:
+ description: |-
+ service references a service as a backend.
+ This is a mutually exclusive setting with "Resource".
+ properties:
+ name:
+ description: |-
+ name is the referenced service. The service must exist in
+ the same namespace as the Ingress object.
+ type: string
+ port:
+ description: |-
+ port of the referenced service. A port name or port number
+ is required for a IngressServiceBackend.
+ properties:
+ name:
+ description: |-
+ name is the name of the port on the Service.
+ This is a mutually exclusive setting with "Number".
+ type: string
+ number:
+ description: |-
+ number is the numerical port number (e.g. 80) on the Service.
+ This is a mutually exclusive setting with "Name".
+ format: int32
+ type: integer
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - name
+ type: object
+ type: object
+ ingressClassName:
+ description: |-
+ IngressClassName is the name of the IngressClass cluster resource. The
+ associated IngressClass defines which controller will implement the
+ resource. This replaces the deprecated `kubernetes.io/ingress.class`
+ annotation. For backwards compatibility, when that annotation is set, it
+ must be given precedence over this field. The controller may emit a
+ warning if the field and annotation have different values.
+ Implementations of this API should ignore Ingresses without a class
+ specified. An IngressClass resource may be marked as default, which can
+ be used to set a default value for this field. For more information,
+ refer to the IngressClass documentation.
+ type: string
+ rules:
+ description: |-
+ A list of host rules used to configure the Ingress. If unspecified, or
+ no rule matches, all traffic is sent to the default backend.
+ items:
+ description: |-
+ IngressRule represents the rules mapping the paths under a specified host to
+ the related backend services. Incoming requests are first evaluated for a host
+ match, then routed to the backend associated with the matching IngressRuleValue.
+ properties:
+ host:
+ description: "Host is the fully qualified domain name of
+ a network host, as defined by RFC 3986.\nNote the following
+ deviations from the \"host\" part of the\nURI as defined
+ in RFC 3986:\n1. IPs are not allowed. Currently an IngressRuleValue
+ can only apply to\n the IP in the Spec of the parent
+ Ingress.\n2. The `:` delimiter is not respected because
+ ports are not allowed.\n\t Currently the port of an Ingress
+ is implicitly :80 for http and\n\t :443 for https.\nBoth
+ these may change in the future.\nIncoming requests are
+ matched against the host before the\nIngressRuleValue.
+ If the host is unspecified, the Ingress routes all\ntraffic
+ based on the specified IngressRuleValue.\n\nHost can be
+ \"precise\" which is a domain name without the terminating
+ dot of\na network host (e.g. \"foo.bar.com\") or \"wildcard\",
+ which is a domain name\nprefixed with a single wildcard
+ label (e.g. \"*.foo.com\").\nThe wildcard character '*'
+ must appear by itself as the first DNS label and\nmatches
+ only a single label. You cannot have a wildcard label
+ by itself (e.g. Host == \"*\").\nRequests will be matched
+ against the Host field in the following way:\n1. If Host
+ is precise, the request matches this rule if the http
+ host header is equal to Host.\n2. If Host is a wildcard,
+ then the request matches this rule if the http host header\nis
+ to equal to the suffix (removing the first label) of the
+ wildcard rule."
+ type: string
+ http:
+ description: |-
+ HTTPIngressRuleValue is a list of http selectors
+ pointing to backends. In the example: http:///?
+ -> backend where where parts of the url correspond to
+ RFC 3986, this resource will be used to match against
+ everything after the last '/' and before the first '?'
+ or '#'.
+ properties:
+ paths:
+ description: paths is a collection of paths that map
+ requests to backends.
+ items:
+ description: |-
+ HTTPIngressPath associates a path with a backend. Incoming urls matching the
+ path are forwarded to the backend.
+ properties:
+ backend:
+ description: |-
+ backend defines the referenced service endpoint to which the traffic
+ will be forwarded to.
+ properties:
+ resource:
+ description: |-
+ resource is an ObjectRef to another Kubernetes resource in the namespace
+ of the Ingress object. If resource is specified, a service.Name and
+ service.Port must not be specified.
+ This is a mutually exclusive setting with "Service".
+ properties:
+ apiGroup:
+ description: |-
+ APIGroup is the group for the resource being referenced.
+ If APIGroup is not specified, the specified Kind must be in the core API group.
+ For any other third-party types, APIGroup is required.
+ type: string
+ kind:
+ description: Kind is the type of resource
+ being referenced
+ type: string
+ name:
+ description: Name is the name of resource
+ being referenced
+ type: string
+ required:
+ - kind
+ - name
+ type: object
+ x-kubernetes-map-type: atomic
+ service:
+ description: |-
+ service references a service as a backend.
+ This is a mutually exclusive setting with "Resource".
+ properties:
+ name:
+ description: |-
+ name is the referenced service. The service must exist in
+ the same namespace as the Ingress object.
+ type: string
+ port:
+ description: |-
+ port of the referenced service. A port name or port number
+ is required for a IngressServiceBackend.
+ properties:
+ name:
+ description: |-
+ name is the name of the port on the Service.
+ This is a mutually exclusive setting with "Number".
+ type: string
+ number:
+ description: |-
+ number is the numerical port number (e.g. 80) on the Service.
+ This is a mutually exclusive setting with "Name".
+ format: int32
+ type: integer
+ type: object
+ x-kubernetes-map-type: atomic
+ required:
+ - name
+ type: object
+ type: object
+ path:
+ description: |-
+ path is matched against the path of an incoming request. Currently it can
+ contain characters disallowed from the conventional "path" part of a URL
+ as defined by RFC 3986. Paths must begin with a '/' and must be present
+ when using PathType with value "Exact" or "Prefix".
+ type: string
+ pathType:
+ description: |-
+ pathType determines the interpretation of the path matching. PathType can
+ be one of the following values:
+ * Exact: Matches the URL path exactly.
+ * Prefix: Matches based on a URL path prefix split by '/'. Matching is
+ done on a path element by element basis. A path element refers is the
+ list of labels in the path split by the '/' separator. A request is a
+ match for path p if every p is an element-wise prefix of p of the
+ request path. Note that if the last element of the path is a substring
+ of the last element in request path, it is not a match (e.g. /foo/bar
+ matches /foo/bar/baz, but does not match /foo/barbaz).
+ * ImplementationSpecific: Interpretation of the Path matching is up to
+ the IngressClass. Implementations can treat this as a separate PathType
+ or treat it identically to Prefix or Exact path types.
+ Implementations are required to support all path types.
+ type: string
+ required:
+ - backend
+ - pathType
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - paths
+ type: object
+ required:
+ - http
+ type: object
+ type: array
+ tls:
+ description: |-
+ TLS configuration. Currently the Ingress only supports a single TLS
+ port, 443. If multiple members of this list specify different hosts, they
+ will be multiplexed on the same port according to the hostname specified
+ through the SNI TLS extension, if the ingress controller fulfilling the
+ ingress supports SNI.
+ items:
+ description: IngressTLS describes the transport layer security
+ associated with an ingress.
+ properties:
+ hosts:
+ description: |-
+ hosts is a list of hosts included in the TLS certificate. The values in
+ this list must match the name/s used in the tlsSecret. Defaults to the
+ wildcard host setting for the loadbalancer controller fulfilling this
+ Ingress, if left unspecified.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ secretName:
+ description: |-
+ secretName is the name of the secret used to terminate TLS traffic on
+ port 443. Field is left optional to allow TLS routing based on SNI
+ hostname alone. If the SNI host in a listener conflicts with the "Host"
+ header field used by an IngressRule, the SNI host is used for termination
+ and value of the "Host" header is used for routing.
+ type: string
+ type: object
+ type: array
+ type: object
+ resourceRef:
+ description: ResourceRef spec
+ properties:
+ apiVersion:
+ description: API version of the referent.
+ type: string
+ fieldPath:
+ description: |-
+ If referring to a piece of an object instead of an entire object, this string
+ should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
+ For example, if the object reference is to a container within a pod, this would take on a value like:
+ "spec.containers{name}" (where "name" refers to the name of the container that triggered
+ the event) or if no container name is specified "spec.containers[2]" (container with
+ index 2 in this pod). This syntax is chosen only to have some well-defined way of
+ referencing a part of an object.
+ type: string
+ kind:
+ description: |-
+ Kind of the referent.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ matchExpressions:
+ description: matchExpressions is a list of label selector requirements.
+ The requirements are ANDed.
+ items:
+ description: |-
+ A label selector requirement is a selector that contains values, a key, and an operator that
+ relates the key and values.
+ properties:
+ key:
+ description: key is the label key that the selector applies
+ to.
+ type: string
+ operator:
+ description: |-
+ operator represents a key's relationship to a set of values.
+ Valid operators are In, NotIn, Exists and DoesNotExist.
+ type: string
+ values:
+ description: |-
+ values is an array of string values. If the operator is In or NotIn,
+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
+ the values array must be empty. This array is replaced during a strategic
+ merge patch.
+ items:
+ type: string
+ type: array
+ x-kubernetes-list-type: atomic
+ required:
+ - key
+ - operator
+ type: object
+ type: array
+ x-kubernetes-list-type: atomic
+ matchLabels:
+ additionalProperties:
+ type: string
+ description: |-
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
+ map is equivalent to an element of matchExpressions, whose key field is "key", the
+ operator is "In", and the values array contains only "value". The requirements are ANDed.
+ type: object
+ name:
+ description: |-
+ Name of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ type: string
+ namespace:
+ description: |-
+ Namespace of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ type: string
+ resourceVersion:
+ description: |-
+ Specific resourceVersion to which this reference is made, if any.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ type: string
+ uid:
+ description: |-
+ UID of the referent.
+ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ type: string
+ type: object
+ x-kubernetes-map-type: atomic
+ strategy:
+ description: Gslb Strategy spec
+ properties:
+ dnsTtlSeconds:
+ description: Defines DNS record TTL in seconds
+ type: integer
+ primaryGeoTag:
+ description: Primary Geo Tag. Valid for failover strategy only
+ type: string
+ splitBrainThresholdSeconds:
+ description: Split brain TXT record expiration in seconds. The
+ field is deprecated and not used.
+ type: integer
+ type:
+ description: Load balancing strategy type:(roundRobin|failover)
+ type: string
+ weight:
+ additionalProperties:
+ type: integer
+ description: Weight is defined by map region:weight
+ type: object
+ required:
+ - type
+ type: object
+ required:
+ - strategy
+ type: object
+ status:
+ description: GslbStatus defines the observed state of Gslb
+ properties:
+ geoTag:
+ description: Cluster Geo Tag
+ type: string
+ healthyRecords:
+ additionalProperties:
+ items:
+ type: string
+ type: array
+ description: Current Healthy DNS record structure
+ type: object
+ hosts:
+ description: Comma-separated list of hosts
+ type: string
+ loadBalancer:
+ description: LoadBalancer configuration
+ properties:
+ exposedIps:
+ description: ExposedIPs on the local Load Balancer
+ items:
+ type: string
+ type: array
+ type: object
+ servers:
+ description: Servers configuration
+ items:
+ description: Servers holds the GSLB's servers' configuration
+ properties:
+ host:
+ description: Hostname exposed by the GSLB
+ type: string
+ services:
+ description: Kubernetes Services backing the load balanced application
+ items:
+ description: NamespacedName holds a reference to a k8s resource
+ properties:
+ name:
+ description: Name of the resource
+ type: string
+ namespace:
+ description: Namespace where the resource can be found
+ type: string
+ required:
+ - name
+ - namespace
+ type: object
+ type: array
+ type: object
+ type: array
+ serviceHealth:
+ additionalProperties:
+ type: string
+ description: Associated Service status
+ type: object
+ required:
+ - geoTag
+ - healthyRecords
+ - serviceHealth
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.io_zonedelegation.yaml b/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.io_zonedelegation.yaml
new file mode 100644
index 00000000..730fa33d
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/crd/k8gb.io_zonedelegation.yaml
@@ -0,0 +1,95 @@
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ annotations:
+ controller-gen.kubebuilder.io/version: v0.20.1
+ name: zonedelegations.k8gb.io
+spec:
+ group: k8gb.io
+ names:
+ kind: ZoneDelegation
+ listKind: ZoneDelegationList
+ plural: zonedelegations
+ shortNames:
+ - zd
+ singular: zonedelegation
+ scope: Cluster
+ versions:
+ - additionalPrinterColumns:
+ - jsonPath: .spec.loadBalancedZone
+ name: LoadBalancedZone
+ type: string
+ - jsonPath: .spec.parentZone
+ name: ParentZone
+ type: string
+ - jsonPath: .spec.dnsZoneNegTTL
+ name: NegTTL
+ type: integer
+ name: v1beta1
+ schema:
+ openAPIV3Schema:
+ description: ZoneDelegation is the Schema for the zonedelegations API
+ properties:
+ apiVersion:
+ description: |-
+ APIVersion defines the versioned schema of this representation of an object.
+ Servers should convert recognized schemas to the latest internal value, and
+ may reject unrecognized values.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ type: string
+ kind:
+ description: |-
+ Kind is a string value representing the REST resource this object represents.
+ Servers may infer this from the endpoint the client submits requests to.
+ Cannot be updated.
+ In CamelCase.
+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ type: string
+ metadata:
+ type: object
+ spec:
+ properties:
+ dnsZoneNegTTL:
+ description: DNSZoneNegTTL specifies the negative TTL for the DNS
+ zone (in seconds)
+ type: integer
+ loadBalancedZone:
+ description: LoadBalancedZone is the DNS zone managed by this ZoneDelegation
+ type: string
+ parentZone:
+ description: ParentZone is the zone under which this load-balanced
+ zone is delegated
+ type: string
+ required:
+ - dnsZoneNegTTL
+ - loadBalancedZone
+ - parentZone
+ type: object
+ status:
+ description: ZoneDelegationStatus defines the observed state of ZoneDelegation
+ properties:
+ dnsServers:
+ description: DNSServers lists the authoritative DNS servers for the
+ delegated zone
+ items:
+ description: DNSServer represents a single DNS server for a zone
+ delegation
+ properties:
+ address:
+ description: Address of the DNS server (IPv4 or IPv6)
+ type: string
+ name:
+ description: Name of the DNS server (FQDN)
+ type: string
+ required:
+ - address
+ - name
+ type: object
+ type: array
+ type: object
+ type: object
+ served: true
+ storage: true
+ subresources:
+ status: {}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/NOTES.txt b/packs/k8gb-0.19.0/charts/k8gb/templates/NOTES.txt
new file mode 100644
index 00000000..3a529a09
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/NOTES.txt
@@ -0,0 +1,25 @@
+done
+ _ ___ _
+ | | _( _ ) __ _| |__
+ | |/ / _ \ / _` | '_ \
+ | < (_) | (_| | |_) |
+ |_|\_\___/ \__, |_.__/ & all dependencies are installed
+ |___/
+
+{{- if and .Values.tracing.enabled .Values.tracing.deployJaeger }}
+
+
+To check the OpenTelemetry (tracing) data:
+------------------------------------------
+kubectl port-forward svc/jaeger-collector -n k8gb 16686
+open http://localhost:16686
+
+{{- end }}
+
+1. Check if your DNS Zone is served by K8GB CoreDNS
+ $ kubectl -n {{ .Release.Namespace }} run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools --command -- /usr/bin/dig @{{ .Release.Name }}-coredns SOA . +short
+
+If everything is fine then you are expected to see similar output:
+```
+ns1.dns. hostmaster.dns. 1616173200 7200 1800 86400 3600
+```
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/_helpers.tpl b/packs/k8gb-0.19.0/charts/k8gb/templates/_helpers.tpl
new file mode 100644
index 00000000..cafa2d0d
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/_helpers.tpl
@@ -0,0 +1,85 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "chart.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 "chart.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 "chart.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Common labels
+*/}}
+{{- define "chart.labels" -}}
+helm.sh/chart: {{ include "chart.chart" . }}
+{{ include "chart.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end -}}
+
+{{/*
+Selector labels
+*/}}
+{{- define "chart.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "chart.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "chart.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create -}}
+ {{ default (include "chart.fullname" .) .Values.serviceAccount.name }}
+{{- else -}}
+ {{ default "default" .Values.serviceAccount.name }}
+{{- end -}}
+{{- end -}}
+
+{{- define "k8gb.edgeDNSServers" -}}
+{{- if .Values.k8gb.edgeDNSServer -}}
+{{ .Values.k8gb.edgeDNSServer }}
+{{- else -}}
+{{ join "," .Values.k8gb.edgeDNSServers }}
+{{- end -}}
+{{- end -}}
+
+{{- define "k8gb.dnsZonesString" -}}
+{{- $entries := list -}}
+{{- range .Values.k8gb.dnsZones }}
+ {{- $dnsZoneNegTTL := toString (.dnsZoneNegTTL | default "300") }}
+ {{- $entry := printf "%s:%s:%s" .parentZone .loadBalancedZone $dnsZoneNegTTL }}
+ {{- $entries = append $entries $entry }}
+{{- end }}
+{{- join ";" $entries }}
+{{- end }}
+
+{{- define "k8gb.metrics_port" -}}
+{{ print (split ":" .Values.k8gb.metricsAddress)._1 }}
+{{- end -}}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/_validators.tpl b/packs/k8gb-0.19.0/charts/k8gb/templates/_validators.tpl
new file mode 100644
index 00000000..806408d1
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/_validators.tpl
@@ -0,0 +1,40 @@
+# Validates that "duplicated" values are consistent across the chart
+
+# Validates that the geo tag in extdns.txtPrefix/extdns.txtOwnerId contains the same value as the geo tag in k8gb.clusterGeoTag
+{{- define "validateGeoTag" -}}
+{{- if .Values.extdns.enabled -}}
+{{- if not (contains .Values.k8gb.clusterGeoTag .Values.extdns.txtPrefix) -}}
+{{- fail (printf "Validation failed: extdns.txtPrefix (%s) does not contain the expected geo tag (%s)" .Values.extdns.txtPrefix .Values.k8gb.clusterGeoTag) -}}
+{{- end -}}
+{{- if not (contains .Values.k8gb.clusterGeoTag .Values.extdns.txtOwnerId) -}}
+{{- fail (printf "Validation failed: extdns.txtOwnerId (%s) does not contain the expected geo tag (%s)" .Values.extdns.txtOwnerId .Values.k8gb.clusterGeoTag) -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+# Validates that the zones in k8gb.dnsZones match the zones in extdns.domainFilters
+{{- define "validateDnsZones" -}}
+
+{{- if .Values.extdns.enabled }}
+
+{{- $parentZones := list -}}
+{{- range .Values.k8gb.dnsZones -}}
+ {{- $parentZones = append $parentZones .parentZone -}}
+{{- end -}}
+
+{{- $extdnsZones := .Values.extdns.domainFilters -}}
+
+{{- range $parentZone := $parentZones -}}
+ {{- if not (has $parentZone $extdnsZones) -}}
+ {{- fail (printf "Validation failed: Parent zone '%s' from k8gb.dnsZones is not present in extdns.domainFilters" $parentZone) -}}
+ {{- end -}}
+{{- end -}}
+
+{{- range $extdnsZone := $extdnsZones -}}
+ {{- if not (has $extdnsZone $parentZones) -}}
+ {{- fail (printf "Validation failed: Domain '%s' from extdns.domainFilters is not present in k8gb.dnsZones.parentZone" $extdnsZone) -}}
+ {{- end -}}
+{{- end -}}
+
+ {{- end }}
+{{- end -}}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/clusterrole.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/clusterrole.yaml
new file mode 100644
index 00000000..c9a6b0c1
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/clusterrole.yaml
@@ -0,0 +1,113 @@
+{{- if .Values.k8gb.deployRbac }}
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ creationTimestamp: null
+ name: k8gb
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+rules:
+{{- if .Values.k8gb.dynamicZones }}
+- apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - list
+ - get
+ - update
+ - patch
+ resourceNames:
+ - "coredns-dynamic"
+{{- end }}
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - services
+ verbs:
+ - 'get'
+ - 'list'
+ - 'watch'
+- apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - 'get'
+ - 'list'
+ - 'watch'
+- apiGroups:
+ - k8gb.io
+ - k8gb.absa.oss
+ resources:
+ - '*'
+ - gslbs
+ verbs:
+ - '*'
+- apiGroups:
+ - networking.k8s.io
+ resources:
+ - ingresses
+ verbs:
+ - '*'
+- apiGroups:
+ - externaldns.k8s.io
+ resources:
+ - dnsendpoints
+ verbs:
+ - '*'
+- apiGroups:
+ - ""
+ resources:
+ - namespaces
+ verbs:
+ - 'list'
+{{- if .Values.gatewayapi.enabled }}
+- apiGroups:
+ - gateway.networking.k8s.io
+ resources:
+ - gateways
+ - httproutes
+ - grpcroutes
+ - tcproutes
+ - tlsroutes
+ - udproutes
+ verbs:
+ - 'get'
+ - 'list'
+ - 'watch'
+{{- end }}
+{{- if .Values.openshift.enabled }}
+- apiGroups:
+ - route.openshift.io
+ resources:
+ - routes/custom-host
+ verbs:
+ - create
+ - update
+- apiGroups:
+ - networking.k8s.io
+ resources:
+ - ingresses/finalizers
+ verbs:
+ - update
+{{- end }}
+{{- if .Values.istio.enabled }}
+- apiGroups:
+ - networking.istio.io
+ resources:
+ - virtualservices
+ - gateways
+ verbs:
+ - 'get'
+ - 'list'
+ - 'watch'
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/coredns/cm.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/coredns/cm.yaml
new file mode 100644
index 00000000..630d8237
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/coredns/cm.yaml
@@ -0,0 +1,57 @@
+{{- if and .Values.coredns.deployment.enabled .Values.coredns.corefile.enabled}}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ .Release.Name }}-coredns
+ namespace: {{ .Release.Namespace }}
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+data:
+ Corefile: |-
+ (k8gbplugins) {
+ errors
+ health
+ {{- if $.Values.coredns.corefile.reload.enabled }}
+ reload {{ $.Values.coredns.corefile.reload.interval }} {{ $.Values.coredns.corefile.reload.jitter }}
+ {{- end }}
+ ready
+ prometheus 0.0.0.0:9153
+ forward . /etc/resolv.conf
+ k8s_crd {
+ filter k8gb.io/dnstype=local
+ negttl {{ .dnsZoneNegTTL | default 30 }}
+ loadbalance weight
+ {{- if .geoDataFilePath }}
+ geodatafilepath {{ .geoDataFilePath }}
+ {{- end }}
+ {{- if .geoDataField }}
+ geodatafield {{ .geoDataField }}
+ {{- end }}
+ }
+ }
+{{- range .Values.k8gb.dnsZones }}
+ {{ .loadBalancedZone }}:5353 {
+ import k8gbplugins
+{{- if .extraPlugins }}
+{{- range .extraPlugins }}
+{{ . | nindent 8 }}
+{{- end }}
+{{- end }}
+ }
+{{- end }}
+{{- with .extraServerBlocks -}}
+{{- tpl . $ | nindent 4 }}
+{{- end }}
+{{- if .Values.k8gb.dynamicZones }}
+ import ../dynamic/*.conf
+{{- end }}
+{{- end }}
+---
+{{- if .Values.k8gb.dynamicZones }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: coredns-dynamic
+ namespace: {{ .Release.Namespace }}
+data: {}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/coredns/rbac.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/coredns/rbac.yaml
new file mode 100644
index 00000000..1b02f8b0
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/coredns/rbac.yaml
@@ -0,0 +1,35 @@
+{{- if and .Values.coredns.deployment.enabled .Values.coredns.rbac.create }}
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: coredns-cluster-role
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - namespaces
+ verbs:
+ - list
+ - watch
+- apiGroups:
+ - externaldns.k8s.io
+ resources:
+ - dnsendpoints
+ verbs:
+ - list
+ - watch
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: coredns-clusterrole-binding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: coredns-cluster-role
+subjects:
+- kind: ServiceAccount
+ name: coredns
+ namespace: {{ .Release.Namespace }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/crds-template.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/crds-template.yaml
new file mode 100644
index 00000000..ca0de7f7
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/crds-template.yaml
@@ -0,0 +1,14 @@
+{{- if .Values.k8gb.deployCrds }}
+
+{{- $files := .Files }}
+{{ $files.Get "crd/k8gb.io_gslbs.yaml" }}
+{{ $files.Get "crd/k8gb.io_zonedelegation.yaml" }}
+{{- if .Values.k8gb.installLegacyCrds }}
+{{ $files.Get "crd/k8gb.absa.oss_gslbs.yaml" }}
+{{- end }}
+
+{{- if not .Values.extdns.enabled }}
+{{ $files.Get "crd/dns-endpoint-crd-manifest.yaml" }}
+{{- end }}
+
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/deployment.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/deployment.yaml
new file mode 100644
index 00000000..53fd7d66
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/deployment.yaml
@@ -0,0 +1,163 @@
+{{ include "validateGeoTag" . }}
+{{ include "validateDnsZones" . }}
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: k8gb
+ namespace: {{ .Release.Namespace }}
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ name: k8gb
+ template:
+ metadata:
+ labels:
+ name: k8gb
+ {{- include "chart.selectorLabels" . | nindent 8 }}
+ {{- with .Values.k8gb.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ annotations:
+ kubectl.kubernetes.io/default-container: k8gb
+ {{- with .Values.k8gb.podAnnotations }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ serviceAccountName: k8gb
+ {{- if .Values.k8gb.tolerations }}
+ tolerations: {{ toYaml .Values.k8gb.tolerations | nindent 8 }}
+ {{- end }}
+ containers:
+ - name: k8gb
+ ports:
+ - containerPort: {{ include "k8gb.metrics_port" . }}
+ name: metrics
+ image: {{ .Values.k8gb.imageRepo }}:{{ .Values.k8gb.imageTag | default .Chart.AppVersion }}
+ imagePullPolicy: IfNotPresent
+ {{- if .Values.k8gb.securityContext }}
+ securityContext:
+ {{- toYaml .Values.k8gb.securityContext | nindent 12 }}
+ {{- end }}
+ resources:
+ requests:
+ memory: {{ .Values.k8gb.resources.requests.memory | default "32Mi" }}
+ cpu: {{ .Values.k8gb.resources.requests.cpu | default "100m" }}
+ limits:
+ memory: {{ .Values.k8gb.resources.limits.memory | default "128Mi" }}
+ cpu: {{ .Values.k8gb.resources.limits.cpu | default "500m" }}
+ env:
+ - name: WATCH_NAMESPACE
+ value: ""
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: OPERATOR_NAME
+ value: "k8gb"
+ - name: COREDNS_SERVICE_TYPE
+ value: {{ quote .Values.coredns.serviceType }}
+ - name: CLUSTER_GEO_TAG
+ value: {{ quote .Values.k8gb.clusterGeoTag }}
+ - name: EXT_GSLB_CLUSTERS_GEO_TAGS
+ value: {{ quote .Values.k8gb.extGslbClustersGeoTags }}
+ - name: EDGE_DNS_SERVERS
+ value: {{ include "k8gb.edgeDNSServers" . }}
+ - name: DNS_ZONES
+ value: {{ include "k8gb.dnsZonesString" . }}
+ - name: RECONCILE_REQUEUE_SECONDS
+ value: {{ quote .Values.k8gb.reconcileRequeueSeconds }}
+ - name: NS_RECORD_TTL
+ value: {{ quote .Values.k8gb.nsRecordTTL }}
+ {{- if .Values.infoblox.enabled }}
+ - name: INFOBLOX_GRID_HOST
+ valueFrom:
+ configMapKeyRef:
+ name: infoblox
+ key: INFOBLOX_GRID_HOST
+ - name: INFOBLOX_WAPI_VERSION
+ valueFrom:
+ configMapKeyRef:
+ name: infoblox
+ key: INFOBLOX_WAPI_VERSION
+ - name: INFOBLOX_WAPI_PORT
+ valueFrom:
+ configMapKeyRef:
+ name: infoblox
+ key: INFOBLOX_WAPI_PORT
+ - name: INFOBLOX_HTTP_REQUEST_TIMEOUT
+ valueFrom:
+ configMapKeyRef:
+ name: infoblox
+ key: INFOBLOX_HTTP_REQUEST_TIMEOUT
+ - name: INFOBLOX_HTTP_POOL_CONNECTIONS
+ valueFrom:
+ configMapKeyRef:
+ name: infoblox
+ key: INFOBLOX_HTTP_POOL_CONNECTIONS
+ - name: INFOBLOX_DNS_VIEW
+ valueFrom:
+ configMapKeyRef:
+ name: infoblox
+ key: INFOBLOX_DNS_VIEW
+ - name: INFOBLOX_WAPI_USERNAME
+ valueFrom:
+ secretKeyRef:
+ name: infoblox
+ key: INFOBLOX_WAPI_USERNAME
+ - name: INFOBLOX_WAPI_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: infoblox
+ key: INFOBLOX_WAPI_PASSWORD
+ {{- end }}
+ {{- if .Values.extdns.enabled }}
+ - name: EXTDNS_ENABLED
+ value: "true"
+ {{- end }}
+ {{- if .Values.tracing.enabled }}
+ {{- with .Values.tracing }}
+ - name: TRACING_ENABLED
+ value: {{ .enabled | quote }}
+ - name: OTEL_EXPORTER_OTLP_ENDPOINT
+ value: {{ .endpoint | quote }}
+ {{- with .samplingRatio }}
+ - name: TRACING_SAMPLING_RATIO
+ value: {{ . | quote }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+ - name: LOG_FORMAT
+ value: {{ quote .Values.k8gb.log.format }}
+ - name: LOG_LEVEL
+ value: {{ quote .Values.k8gb.log.level }}
+ - name: NO_COLOR
+ value: "true"
+ - name: METRICS_ADDRESS
+ value: {{ .Values.k8gb.metricsAddress }}
+ - name: DYNAMIC_ZONES
+ value: {{ .Values.k8gb.dynamicZones | quote }}
+ {{- if .Values.tracing.enabled }}
+ - image: {{ .Values.tracing.sidecarImage.repository }}:{{ .Values.tracing.sidecarImage.tag }}
+ name: otel-collector
+ imagePullPolicy: {{ .Values.tracing.sidecarImage.pullPolicy }}
+ args:
+ - --config=/conf/agent.yaml
+ volumeMounts:
+ - mountPath: /conf
+ name: agent-config
+ volumes:
+ - configMap:
+ items:
+ - key: agent.yaml
+ path: agent.yaml
+ name: agent-config
+ name: agent-config
+ {{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/infoblox-cm.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/infoblox-cm.yaml
new file mode 100644
index 00000000..fca55287
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/infoblox-cm.yaml
@@ -0,0 +1,15 @@
+{{- if .Values.infoblox.enabled }}
+apiVersion: v1
+data:
+ INFOBLOX_GRID_HOST: {{ quote .Values.infoblox.gridHost }}
+ INFOBLOX_WAPI_VERSION: {{ quote .Values.infoblox.wapiVersion }}
+ INFOBLOX_WAPI_PORT: {{ quote .Values.infoblox.wapiPort }}
+ INFOBLOX_HTTP_REQUEST_TIMEOUT: {{ quote .Values.infoblox.httpRequestTimeout }}
+ INFOBLOX_HTTP_POOL_CONNECTIONS: {{ quote .Values.infoblox.httpPoolConnections }}
+ INFOBLOX_DNS_VIEW: {{ quote .Values.infoblox.dnsView }}
+kind: ConfigMap
+metadata:
+ name: infoblox
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/metrics-service.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/metrics-service.yaml
new file mode 100644
index 00000000..c73ab92c
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/metrics-service.yaml
@@ -0,0 +1,16 @@
+{{- if or .Values.k8gb.exposeMetrics .Values.k8gb.serviceMonitor.enabled -}}
+apiVersion: v1
+kind: Service
+metadata:
+ name: k8gb-metrics
+ labels:
+ {{- include "chart.labels" . | nindent 4 }}
+spec:
+ type: ClusterIP
+ ports:
+ - port: {{ include "k8gb.metrics_port" . }}
+ protocol: TCP
+ name: metrics
+ selector:
+ {{- include "chart.selectorLabels" . | nindent 4 }}
+{{- end -}}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/otel/jaeger-deployment.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/otel/jaeger-deployment.yaml
new file mode 100644
index 00000000..2a951e28
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/otel/jaeger-deployment.yaml
@@ -0,0 +1,39 @@
+{{- if .Values.tracing.enabled }}
+{{- if .Values.tracing.deployJaeger }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: jaeger
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+spec:
+ selector:
+ matchLabels:
+ id: jaeger
+ replicas: 1
+ template:
+ metadata:
+ labels:
+ id: jaeger
+ spec:
+ containers:
+ - name: jaeger
+ image: {{ .Values.tracing.jaegerImage.repository }}:{{ .Values.tracing.jaegerImage.tag }}
+ imagePullPolicy: {{ .Values.tracing.jaegerImage.pullPolicy }}
+ readinessProbe:
+ httpGet:
+ path: "/"
+ port: 14269
+ initialDelaySeconds: 5
+ env:
+ - name: COLLECTOR_OTLP_ENABLED
+ value: "true"
+ resources:
+ limits:
+ cpu: 500m
+ memory: 128Mi
+ requests:
+ cpu: 10m
+ memory: 64Mi
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/otel/jaeger-svc.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/otel/jaeger-svc.yaml
new file mode 100644
index 00000000..1874439f
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/otel/jaeger-svc.yaml
@@ -0,0 +1,27 @@
+{{- if .Values.tracing.enabled }}
+{{- if .Values.tracing.deployJaeger }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: jaeger-collector
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+spec:
+ ports:
+ - name: dashboard
+ port: 16686
+ protocol: TCP
+ targetPort: 16686
+ - name: grpc-otlp-collector
+ port: 4317
+ protocol: TCP
+ targetPort: 4317
+ - name: http-otlp-collector
+ port: 4318
+ protocol: TCP
+ targetPort: 4318
+ selector:
+ id: jaeger
+ type: ClusterIP
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/otel/otel-config.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/otel/otel-config.yaml
new file mode 100644
index 00000000..8db88ba9
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/otel/otel-config.yaml
@@ -0,0 +1,36 @@
+{{- if .Values.tracing.enabled }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: agent-config
+ namespace: k8gb
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+data:
+{{- if or .Values.tracing.deployJaeger (not .Values.tracing.otelConfig ) }}
+ agent.yaml: |
+ receivers:
+ otlp:
+ protocols:
+ http:
+ grpc:
+ processors:
+ exporters:
+ otlp:
+ endpoint: jaeger-collector.k8gb:4317
+ tls:
+ insecure: true
+ retry_on_failure:
+ enabled: true
+ logging:
+ service:
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: []
+ exporters: [otlp]
+{{- else -}}
+ agent.yaml: |
+{{ toYaml .Values.tracing.otelConfig | indent 4 }}
+{{- end }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/otel/otel-svc.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/otel/otel-svc.yaml
new file mode 100644
index 00000000..0d141489
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/otel/otel-svc.yaml
@@ -0,0 +1,21 @@
+{{- if .Values.tracing.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: otel-collector
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+spec:
+ ports:
+ - name: http-otlp
+ port: 4318
+ protocol: TCP
+ targetPort: 4318
+ - name: grpc-otlp
+ port: 4317
+ protocol: TCP
+ targetPort: 4317
+ selector:
+ name: k8gb
+ type: ClusterIP
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/role_binding.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/role_binding.yaml
new file mode 100644
index 00000000..3b37994f
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/role_binding.yaml
@@ -0,0 +1,16 @@
+{{- if .Values.k8gb.deployRbac }}
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: k8gb
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+subjects:
+- kind: ServiceAccount
+ name: k8gb
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ kind: ClusterRole
+ name: k8gb
+ apiGroup: rbac.authorization.k8s.io
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/service_account.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/service_account.yaml
new file mode 100644
index 00000000..d54b17e8
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/service_account.yaml
@@ -0,0 +1,10 @@
+{{- if .Values.k8gb.deployRbac }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: k8gb
+ namespace: {{ .Release.Namespace }}
+ labels:
+{{ include "chart.labels" . | indent 4 }}
+imagePullSecrets: {{ toYaml .Values.global.imagePullSecrets | nindent 2 }}
+{{- end }}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/servicemonitor.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/servicemonitor.yaml
new file mode 100644
index 00000000..3f5ed2dd
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/servicemonitor.yaml
@@ -0,0 +1,14 @@
+{{- if .Values.k8gb.serviceMonitor.enabled }}
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+ name: k8gb
+ labels:
+ {{- include "chart.labels" . | nindent 4 }}
+spec:
+ endpoints:
+ - port: metrics
+ selector:
+ matchLabels:
+ {{- include "chart.selectorLabels" . | nindent 6 }}
+{{- end -}}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/templates/validatingadmissionpolicy.yaml b/packs/k8gb-0.19.0/charts/k8gb/templates/validatingadmissionpolicy.yaml
new file mode 100644
index 00000000..e77e670b
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/templates/validatingadmissionpolicy.yaml
@@ -0,0 +1,32 @@
+{{ if .Values.k8gb.validatingAdmissionPolicy.enabled -}}
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingAdmissionPolicyBinding
+metadata:
+ name: k8gb-exposed-ip-annotation
+spec:
+ policyName: k8gb-exposed-ip-annotation
+ matchResources:
+ namespaceSelector: {}
+ validationActions:
+ - Deny
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingAdmissionPolicy
+metadata:
+ name: k8gb-exposed-ip-annotation
+spec:
+ validations:
+ - expression: object.metadata.annotations['k8gb.io/exposed-ip-addresses'].matches('^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$')
+ message: The annotation 'k8gb.io/exposed-ip-addresses' must contain a valid IPv4 address
+ matchConditions:
+ - name: hasExposedIPAddressesAnnotation
+ expression: "has(object.metadata.annotations) && 'k8gb.io/exposed-ip-addresses' in object.metadata.annotations"
+ matchConstraints:
+ resourceRules:
+ - apiGroups: ["k8gb.io", "k8gb.absa.oss"]
+ apiVersions: ["v1beta1"]
+ operations: ["CREATE", "UPDATE"]
+ resources: ["gslbs"]
+ failurePolicy: Fail
+{{ end -}}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/values.schema.json b/packs/k8gb-0.19.0/charts/k8gb/values.schema.json
new file mode 100644
index 00000000..180c0aeb
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/values.schema.json
@@ -0,0 +1,702 @@
+{
+ "title": "values.yaml for k8gb helm chart",
+ "$ref": "#/definitions/All",
+ "definitions": {
+ "All": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "global": {
+ "$ref": "#/definitions/Global"
+ },
+ "k8gb": {
+ "$ref": "#/definitions/k8gb"
+ },
+ "externaldns": {
+ "$ref": "#/definitions/Externaldns"
+ },
+ "extdns": {
+ "type": "object",
+ "description": "Values for the external-dns upstream chart. See https://github.com/kubernetes-sigs/external-dns/tree/master/charts/external-dns for all available options",
+ "additionalProperties": true
+ },
+ "coredns": {
+ "$ref": "#/definitions/Coredns"
+ },
+ "infoblox": {
+ "$ref": "#/definitions/Infoblox"
+ },
+ "openshift": {
+ "$ref": "#/definitions/Openshift"
+ },
+ "tracing": {
+ "$ref": "#/definitions/Tracing"
+ },
+ "istio": {
+ "$ref": "#/definitions/Istio"
+ },
+ "gatewayapi": {
+ "$ref": "#/definitions/GatewayAPI"
+ }
+ }
+ },
+ "Resources": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "requests": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "memory": {
+ "type": "string",
+ "minLength": 1
+ },
+ "cpu": {
+ "type": "string",
+ "minLength": 1
+ }
+ }
+ },
+ "limits": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "memory": {
+ "type": "string",
+ "minLength": 1
+ },
+ "cpu": {
+ "type": "string",
+ "minLength": 1
+ }
+ }
+ }
+ },
+ "required": [
+ "requests"
+ ],
+ "title": "Resources"
+ },
+ "Coredns": {
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "isClusterService": {
+ "type": "boolean"
+ },
+ "deployment": {
+ "$ref": "#/definitions/CorednsDeployment"
+ },
+ "image": {
+ "$ref": "#/definitions/CorednsImage"
+ },
+ "serviceAccount": {
+ "$ref": "#/definitions/CorednsServiceAccount"
+ },
+ "resources": {
+ "$ref": "#/definitions/Resources"
+ },
+ "corefile": {
+ "$ref": "#/definitions/CorednsCorefile"
+ }
+ },
+ "title": "Coredns"
+ },
+ "CorednsDeployment": {
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "skipConfig": {
+ "type": "boolean"
+ }
+ },
+ "title": "Deployment"
+ },
+ "CorednsImage": {
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "repository": {
+ "type": "string",
+ "minLength": 1
+ },
+ "tag": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "required": [
+ "repository",
+ "tag"
+ ],
+ "title": "Image"
+ },
+ "CorednsServiceAccount": {
+ "type": "object",
+ "additionalProperties": true,
+ "properties": {
+ "create": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "title": "ServiceAccount"
+ },
+ "CorednsCorefile": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "reload": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "interval": {
+ "type": "string",
+ "minLength": 1
+ },
+ "jitter": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "required": [
+ "enabled",
+ "interval",
+ "jitter"
+ ]
+ }
+ },
+ "title": "Corefile"
+ },
+ "Externaldns": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "dnsPolicy": {
+ "type": "string",
+ "minLength": 1
+ },
+ "extraEnv": {
+ "type": "array"
+ },
+ "extraVolumes": {
+ "type": "array"
+ },
+ "extraVolumeMounts": {
+ "type": "array"
+ },
+ "image": {
+ "type": "string",
+ "minLength": 1
+ },
+ "interval": {
+ "type": "string"
+ },
+ "securityContext": {
+ "$ref": "#/definitions/ExternaldnsSecurityContext"
+ },
+ "resources": {
+ "$ref": "#/definitions/Resources"
+ }
+ },
+ "title": "Externaldns"
+ },
+ "ExternaldnsSecurityContext": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "runAsUser": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "fsGroup": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "runAsNonRoot": {
+ "type": "boolean"
+ }
+ },
+ "title": "ExternaldnsSecurityContext"
+ },
+ "Global": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "fleet": {
+ "type": "object"
+ },
+ "imagePullSecrets": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "description": "Name of secret"
+ }
+ }
+ },
+ "description": "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: http://kubernetes.io/docs/user-guide/secrets#manually-specifying-an-imagepullsecret"
+ }
+ },
+ "title": "Global"
+ },
+ "Image": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "repository": {
+ "type": "string",
+ "minLength": 1
+ },
+ "pullPolicy": {
+ "enum": [
+ "Always",
+ "IfNotPresent",
+ "Never"
+ ]
+ },
+ "tag": {
+ "type": "string"
+ }
+ }
+ },
+ "Infoblox": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "gridHost": {
+ "format": "idn-hostname"
+ },
+ "wapiVersion": {
+ "type": "string",
+ "minLength": 1
+ },
+ "wapiPort": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 65535
+ },
+ "sslVerify": {
+ "type": "boolean"
+ },
+ "httpRequestTimeout": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "httpPoolConnections": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "dnsView": {
+ "type": "string",
+ "description": "DNS view to use for zone operations"
+ }
+ },
+ "required": [
+ "gridHost",
+ "wapiPort"
+ ],
+ "title": "Infoblox"
+ },
+ "k8gb": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "imageRepo": {
+ "type": "string",
+ "minLength": 1
+ },
+ "imageTag": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "deployCrds": {
+ "type": "boolean"
+ },
+ "installLegacyCrds": {
+ "type": "boolean"
+ },
+ "deployRbac": {
+ "type": "boolean"
+ },
+ "dynamicZones": {
+ "type": "boolean"
+ },
+ "extraVolumeMounts": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": ["name", "mountPath"],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "mountPath": {
+ "type": "string"
+ },
+ "readOnly": {
+ "type": "boolean"
+ },
+ "subPath": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "extraVolumes": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": ["name"],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "configMap": {
+ "type": "object",
+ "required": ["name"],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "optional": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "secret": {
+ "type": "object",
+ "required": ["secretName"],
+ "properties": {
+ "secretName": {
+ "type": "string"
+ },
+ "optional": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "dnsZones": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/k8gbDnsZone"
+ }
+ },
+ "edgeDNSServers": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "clusterGeoTag": {
+ "type": "string",
+ "minLength": 1
+ },
+ "extGslbClustersGeoTags": {
+ "type": "string",
+ "minLength": 0
+ },
+ "reconcileRequeueSeconds": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "nsRecordTTL": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "log": {
+ "$ref": "#/definitions/k8gbLog"
+ },
+ "splitBrainCheck": {
+ "type": "boolean"
+ },
+ "metricsAddress": {
+ "type": "string",
+ "minLength": 1
+ },
+ "securityContext": {
+ "$ref": "#/definitions/k8gbSecurityContext"
+ },
+ "exposeMetrics": {
+ "type": "boolean",
+ "default": false
+ },
+ "serviceMonitor": {
+ "$ref": "#/definitions/k8gbServiceMonitor"
+ },
+ "validatingAdmissionPolicy": {
+ "$ref": "#/definitions/k8gbValidatingAdmissionPolicy"
+ },
+ "podAnnotations": {
+ "type": "object"
+ },
+ "podLabels": {
+ "type": "object"
+ },
+ "resources": {
+ "$ref": "#/definitions/Resources"
+ },
+ "tolerations": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "operator": {
+ "type": "string",
+ "enum": ["Exists", "Equal"]
+ },
+ "value": {
+ "type": "string"
+ },
+ "effect": {
+ "type": "string",
+ "enum": ["NoSchedule", "PreferNoSchedule", "NoExecute"]
+ },
+ "tolerationSeconds": {
+ "type": "integer"
+ }
+ },
+ "anyOf": [
+ {
+ "properties": {
+ "operator": {"const": "Exists"}
+ },
+ "not": {
+ "required": ["value"]
+ }
+ },
+ {
+ "properties": {
+ "operator": {"const": "Equal"}
+ },
+ "required": ["value"]
+ },
+ {
+ "not": {
+ "required": ["operator"]
+ }
+ }
+ ],
+ "additionalProperties": false
+ }
+ }
+ },
+ "required": [
+ "clusterGeoTag",
+ "edgeDNSServers",
+ "dnsZones"
+ ],
+ "title": "k8gb"
+ },
+ "k8gbLog": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "format": {
+ "enum": [
+ "simple",
+ "json"
+ ]
+ },
+ "level": {
+ "enum": [
+ "panic",
+ "fatal",
+ "error",
+ "warn",
+ "info",
+ "debug",
+ "trace"
+ ]
+ }
+ },
+ "title": "Log"
+ },
+ "k8gbSecurityContext": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "runAsNonRoot": {
+ "type": "boolean"
+ },
+ "readOnlyRootFilesystem": {
+ "type": "boolean"
+ },
+ "allowPrivilegeEscalation": {
+ "type": "boolean"
+ },
+ "runAsUser": {
+ "type": "integer",
+ "minimum": 0
+ }
+ },
+ "title": "k8gbSecurityContext"
+ },
+ "k8gbServiceMonitor": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "k8gbValidatingAdmissionPolicy": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ }
+ },
+ "k8gbDnsZone": {
+ "type": "object",
+ "properties": {
+ "loadBalancedZone": {
+ "type": "string",
+ "format": "idn-hostname"
+ },
+ "parentZone": {
+ "type": "string",
+ "format": "idn-hostname"
+ },
+ "dnsZoneNegTTL": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 300
+ },
+ "extraPlugins": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "extraServerBlocks": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "loadBalancedZone",
+ "parentZone"
+ ]
+ },
+ "Openshift": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ },
+ "title": "Openshift"
+ },
+ "Tracing": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "deployJaeger": {
+ "type": "boolean"
+ },
+ "endpoint": {
+ "type": "string",
+ "pattern": "^.{2,256}:\\d{2,5}$"
+ },
+ "samplingRatio": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^(0(\\.\\d{1,3})?|1(\\.0)?)$"
+ },
+ "otelConfig": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": true
+ },
+ "sidecarImage": {
+ "$ref": "#/definitions/Image"
+ },
+ "jaegerImage": {
+ "$ref": "#/definitions/Image"
+ }
+ },
+ "required": [
+ "enabled"
+ ],
+ "title": "Tracing"
+ },
+ "Istio": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "enabled"
+ ],
+ "title": "Istio"
+ },
+ "GatewayAPI": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "enabled"
+ ],
+ "title": "GatewayAPI"
+ }
+ }
+}
diff --git a/packs/k8gb-0.19.0/charts/k8gb/values.yaml b/packs/k8gb-0.19.0/charts/k8gb/values.yaml
new file mode 100644
index 00000000..436ab335
--- /dev/null
+++ b/packs/k8gb-0.19.0/charts/k8gb/values.yaml
@@ -0,0 +1,230 @@
+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"
+
+k8gb:
+ # -- image repository
+ imageRepo: registry.k8gb.io/k8gb-io/k8gb
+ # -- ( string ) image tag defaults to Chart.AppVersion, see Chart.yaml, but can be overrided with imageTag key
+ imageTag:
+ # -- whether it should also deploy the gslb and dnsendpoints CRDs
+ deployCrds: true
+ # -- whether it should also deploy the legacy k8gb.absa.oss CRD
+ installLegacyCrds: true
+ # -- whether it should also deploy the service account, cluster role and cluster role binding
+ deployRbac: true
+ # -- whether to use Dynamic Zone Delegation feature
+ dynamicZones: false
+ # -- dynamic zones configmap
+ extraVolumeMounts:
+ - name: dynamic-zones
+ mountPath: /etc/dynamic
+ extraVolumes:
+ - name: dynamic-zones
+ configMap:
+ name: coredns-dynamic
+ optional: true
+ # DNSZones - For backward compatibility, the dnsZone and edgeDNSZone fields are allowed; otherwise,
+ # the dnsZones array is used. For valid values, use either dnsZone and edgeDNSZone or dnsZones.
+ #
+ # -- array of dns zones controlled by gslb
+ dnsZones:
+ - parentZone: "example.com" # -- parent zone which would contain gslb zone to delegate (same meaning as the old edgeDNSZone)
+ loadBalancedZone: "cloud.example.com" # -- zone controlled by gslb (same meaning as the old dnsZone)
+ dnsZoneNegTTL: 30 # -- Negative TTL for SOA record# -- host/ip[:port] format is supported here where port defaults to 53
+ extraPlugins: [] # -- Extra CoreDNS plugins to be enabled for this zone
+ extraServerBlocks: "" # -- Extra CoreDNS server blocks for this zone
+ geoDataFilePath: "" # -- GeoData file path
+ geoDataField: "" # -- GeoData field
+ edgeDNSServers:
+ # -- use this DNS server as a main resolver to enable cross k8gb DNS based communication
+ - "1.1.1.1"
+ # -- Unique geotag for this K8GB instance. This tag identifies the cluster's location or role (e.g., "eu", "us-east", "dc1" or "primary"). This tag should be present in all clusters’ extGslbClustersGeoTags
+ clusterGeoTag: "eu"
+ # -- Comma-separated list of geotags for external K8GB clusters. These are arbitrary, user-defined identifiers (e.g., "eu,us" or "dc2,dc3") used for coordination between K8GB instances
+ # If the value remains empty, dynamic geotags extracted from the NS records on the edge DNS will be used.
+ extGslbClustersGeoTags: "eu,us"
+ # -- Reconcile time in seconds
+ reconcileRequeueSeconds: 30
+ # -- TTL of the NS and respective glue record used by external DNS
+ nsRecordTTL: 30
+
+ log:
+ # -- log format (simple,json)
+ format: simple # log format (simple,json)
+ # -- log level (panic,fatal,error,warn,info,debug,trace)
+ level: info # log level (panic,fatal,error,warn,info,debug,trace)
+ # -- Metrics server address
+ metricsAddress: "0.0.0.0:8080"
+ securityContext:
+ # -- For more options consult https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#securitycontext-v1-core
+ runAsNonRoot: true
+ readOnlyRootFilesystem: true
+ allowPrivilegeEscalation: false
+ runAsUser: 1000
+ # -- Exposing metrics
+ exposeMetrics: false
+ # -- enable ServiceMonitor
+ serviceMonitor:
+ enabled: false
+ # -- enable validating admission policies
+ validatingAdmissionPolicy:
+ enabled: false
+ # -- pod annotations
+ podAnnotations: {}
+ # -- pod labels
+ podLabels: {}
+
+ resources:
+ # -- requests and limits for the k8gb operator container
+ requests:
+ memory: "32Mi"
+ cpu: "100m"
+ limits:
+ memory: "128Mi"
+ cpu: "500m"
+
+ # -- Tolerations to apply to the k8gb operator deployment
+ # for example:
+ # tolerations:
+ # - key: foo.bar.com/role
+ # operator: Equal
+ # value: master
+ # effect: NoSchedule
+ tolerations: []
+
+coredns:
+ # -- service: refer to https://www.k8gb.io/docs/service_upgrade.html for upgrading CoreDNS service steps
+ isClusterService: false
+ deployment:
+ # -- Skip CoreDNS creation and uses the one shipped by k8gb instead
+ skipConfig: true
+ image:
+ # -- CoreDNS CRD plugin image
+ repository: registry.k8gb.io/k8gb-io/k8s_crd
+ # -- image tag
+ tag: v0.4.0
+ # -- Creates serviceAccount for coredns
+ serviceAccount:
+ create: true
+ name: coredns
+ # -- Disables all permissions since we don't open privileged ports
+ securityContext:
+ capabilities:
+ add: []
+ # -- Only meant to open the correct service and container ports, has no other impact on the coredns configuration
+ servers:
+ - zones:
+ - zone: .
+ use_tcp: true
+ port: 5353
+ servicePort: 53
+ plugins:
+ - name: prometheus
+ parameters: 0.0.0.0:9153
+
+ # -- If the value is LoadBalancer, the IP addresses of the cluster will be loaded from the CoreDNS service;
+ # otherwise, they will be loaded from the first ingress marked with the label "k8gb.io/ip-source=true".
+ serviceType: "ClusterIP"
+
+ resources:
+ # -- requests and limits for the coredns container
+ limits:
+ cpu: 100m
+ memory: 128Mi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+
+ # -- CoreDNS configmap
+ corefile:
+ enabled: true
+ # -- Reload CoreDNS configmap when it changes
+ # https://coredns.io/plugins/reload/
+ reload:
+ enabled: true
+ interval: 30s
+ jitter: 15s
+
+infoblox:
+ # -- infoblox provider enabled
+ enabled: false
+ # -- WAPI address
+ gridHost: 10.0.0.1
+ # -- WAPI version
+ wapiVersion: 2.3.1
+ # -- WAPI port
+ wapiPort: 443
+ # -- use SSL
+ sslVerify: true
+ # -- Request Timeout in secconds
+ httpRequestTimeout: 20
+ # -- Size of connections pool
+ httpPoolConnections: 10
+ # -- DNS view to use for zone operations
+ dnsView: "default"
+
+extdns:
+ enabled: false
+ interval: 20s
+ labelFilter: "k8gb.io/dnstype=extdns"
+ logLevel: debug
+ managedRecordTypes:
+ - A
+ - CNAME
+ - NS
+ policy: sync
+ rbac:
+ create: true
+ sources:
+ - crd
+ domainFilters:
+ - "example.com"
+ txtPrefix: "k8gb--"
+ txtOwnerId: "k8gb-"
+
+openshift:
+ # -- Install OpenShift specific RBAC
+ enabled: false
+
+tracing:
+ # -- if the application should be sending the traces to OTLP collector (env var `TRACING_ENABLED`)
+ enabled: false
+
+ # -- should the Jaeger be deployed together with the k8gb operator? In case of using another OpenTracing solution,
+ # make sure that configmap for OTEL agent has the correct exporters set up (`tracing.otelConfig`).
+ deployJaeger: false
+
+ # -- `host:port` where the spans from the applications (traces) should be sent, sets the `OTEL_EXPORTER_OTLP_ENDPOINT` env var
+ # This is not the final destination where all the traces are going. Otel collector has its configuration in the associated configmap (`tracing.otelConfig`).
+ endpoint: localhost:4318
+
+ # -- float representing the ratio of how often the span should be kept/dropped (env var `TRACING_SAMPLING_RATIO`)
+ # if not specified, the AlwaysSample will be used which is the same as 1.0. `0.1` would mean that 10% of samples will be kept
+ samplingRatio: null
+
+ # -- configuration for OTEL collector, this will be represented as configmap called `agent-config`
+ otelConfig: null
+
+ sidecarImage:
+ # -- OpenTelemetry collector into which the k8gb operator sends the spans. It can be further configured to send its data
+ # to somewhere else using exporters (Jaeger for instance)
+ repository: otel/opentelemetry-collector
+ tag: 0.148.0
+ pullPolicy: Always
+
+ jaegerImage:
+ # -- if `tracing.deployJaeger==true` this image will be used in the deployment for Jaeger
+ repository: jaegertracing/all-in-one
+ tag: 1.76.0
+ pullPolicy: Always
+
+istio:
+ # -- install istio RBAC
+ enabled: true
+
+gatewayapi:
+ # -- install gatewayapi RBAC
+ enabled: true
diff --git a/packs/k8gb-0.19.0/logo.png b/packs/k8gb-0.19.0/logo.png
new file mode 100644
index 00000000..81caeceb
Binary files /dev/null and b/packs/k8gb-0.19.0/logo.png differ
diff --git a/packs/k8gb-0.19.0/pack.json b/packs/k8gb-0.19.0/pack.json
new file mode 100644
index 00000000..5d075439
--- /dev/null
+++ b/packs/k8gb-0.19.0/pack.json
@@ -0,0 +1,17 @@
+{
+ "name": "k8gb",
+ "displayName": "k8gb",
+ "annotations": {
+ "description": "Kubernetes Global Balancer",
+ "contributor": "spectrocloud"
+ },
+ "version": "0.19.0",
+ "charts": [
+ "charts/k8gb-v0.19.0.tgz"
+ ],
+ "layer": "addon",
+ "addonType": "system app",
+ "cloudTypes": [
+ "all"
+ ]
+}
diff --git a/packs/k8gb-0.19.0/presets.yaml b/packs/k8gb-0.19.0/presets.yaml
new file mode 100644
index 00000000..85efbe5f
--- /dev/null
+++ b/packs/k8gb-0.19.0/presets.yaml
@@ -0,0 +1,22 @@
+presets:
+ - name: coredns-clusterip
+ displayName: "ClusterIP (Ingress Required)"
+ description: "Uses an Ingress resource to discover the external address."
+ group: "Address Discovery"
+ remove: []
+ add: |
+ charts:
+ k8gb:
+ coredns:
+ serviceType: ClusterIP
+
+ - name: coredns-loadbalancer
+ displayName: "LoadBalancer"
+ description: "Uses the CoreDNS LoadBalancer Service to discover the external address."
+ group: "Address Discovery"
+ remove: []
+ add: |
+ charts:
+ k8gb:
+ coredns:
+ serviceType: LoadBalancer
\ No newline at end of file
diff --git a/packs/k8gb-0.19.0/schema.yaml b/packs/k8gb-0.19.0/schema.yaml
new file mode 100644
index 00000000..df479c95
--- /dev/null
+++ b/packs/k8gb-0.19.0/schema.yaml
@@ -0,0 +1,2 @@
+pack.namespace:
+ schema: '{{ required | format "${string}" }}'
\ No newline at end of file
diff --git a/packs/k8gb-0.19.0/values.yaml b/packs/k8gb-0.19.0/values.yaml
new file mode 100644
index 00000000..02b127ca
--- /dev/null
+++ b/packs/k8gb-0.19.0/values.yaml
@@ -0,0 +1,252 @@
+pack:
+ content:
+ images:
+ - image: registry.k8gb.io/k8gb-io/k8gb:v0.19.0
+ - image: registry.k8gb.io/k8gb-io/k8s_crd:v0.4.0
+ - image: coredns/coredns:1.13.1
+ - image: registry.k8s.io/external-dns/external-dns:v0.20.0
+ - image: otel/opentelemetry-collector:0.148.0
+ - image: jaegertracing/all-in-one:1.76.0
+
+ charts:
+ - repository: https://coredns.github.io/helm
+ name: coredns
+ version: 1.45.2
+ - repository: https://kubernetes-sigs.github.io/external-dns
+ name: external-dns
+ version: 1.20.0
+
+ namespace: "k8gb"
+
+charts:
+ k8gb:
+ 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"
+
+ k8gb:
+ # -- image repository
+ imageRepo: registry.k8gb.io/k8gb-io/k8gb
+ # -- ( string ) image tag defaults to Chart.AppVersion, see Chart.yaml, but can be overrided with imageTag key
+ imageTag:
+ # -- whether it should also deploy the gslb and dnsendpoints CRDs
+ deployCrds: true
+ # -- whether it should also deploy the legacy k8gb.absa.oss CRD
+ installLegacyCrds: true
+ # -- whether it should also deploy the service account, cluster role and cluster role binding
+ deployRbac: true
+ # -- whether to use Dynamic Zone Delegation feature
+ dynamicZones: false
+ # -- dynamic zones configmap
+ extraVolumeMounts:
+ - name: dynamic-zones
+ mountPath: /etc/dynamic
+ extraVolumes:
+ - name: dynamic-zones
+ configMap:
+ name: coredns-dynamic
+ optional: true
+ # DNSZones - For backward compatibility, the dnsZone and edgeDNSZone fields are allowed; otherwise,
+ # the dnsZones array is used. For valid values, use either dnsZone and edgeDNSZone or dnsZones.
+ #
+ # -- array of dns zones controlled by gslb
+ dnsZones:
+ - parentZone: "example.com" # -- parent zone which would contain gslb zone to delegate (same meaning as the old edgeDNSZone)
+ loadBalancedZone: "cloud.example.com" # -- zone controlled by gslb (same meaning as the old dnsZone)
+ dnsZoneNegTTL: 30 # -- Negative TTL for SOA record# -- host/ip[:port] format is supported here where port defaults to 53
+ extraPlugins: [] # -- Extra CoreDNS plugins to be enabled for this zone
+ extraServerBlocks: "" # -- Extra CoreDNS server blocks for this zone
+ geoDataFilePath: "" # -- GeoData file path
+ geoDataField: "" # -- GeoData field
+ edgeDNSServers:
+ # -- use this DNS server as a main resolver to enable cross k8gb DNS based communication
+ - "1.1.1.1"
+ # -- Unique geotag for this K8GB instance. This tag identifies the cluster's location or role (e.g., "eu", "us-east", "dc1" or "primary"). This tag should be present in all clusters’ extGslbClustersGeoTags
+ clusterGeoTag: "eu"
+ # -- Comma-separated list of geotags for external K8GB clusters. These are arbitrary, user-defined identifiers (e.g., "eu,us" or "dc2,dc3") used for coordination between K8GB instances
+ # If the value remains empty, dynamic geotags extracted from the NS records on the edge DNS will be used.
+ extGslbClustersGeoTags: "eu,us"
+ # -- Reconcile time in seconds
+ reconcileRequeueSeconds: 30
+ # -- TTL of the NS and respective glue record used by external DNS
+ nsRecordTTL: 30
+
+ log:
+ # -- log format (simple,json)
+ format: simple # log format (simple,json)
+ # -- log level (panic,fatal,error,warn,info,debug,trace)
+ level: info # log level (panic,fatal,error,warn,info,debug,trace)
+ # -- Metrics server address
+ metricsAddress: "0.0.0.0:8080"
+ securityContext:
+ # -- For more options consult https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#securitycontext-v1-core
+ runAsNonRoot: true
+ readOnlyRootFilesystem: true
+ allowPrivilegeEscalation: false
+ runAsUser: 1000
+ # -- Exposing metrics
+ exposeMetrics: false
+ # -- enable ServiceMonitor
+ serviceMonitor:
+ enabled: false
+ # -- enable validating admission policies
+ validatingAdmissionPolicy:
+ enabled: false
+ # -- pod annotations
+ podAnnotations: {}
+ # -- pod labels
+ podLabels: {}
+
+ resources:
+ # -- requests and limits for the k8gb operator container
+ requests:
+ memory: "32Mi"
+ cpu: "100m"
+ limits:
+ memory: "128Mi"
+ cpu: "500m"
+
+ # -- Tolerations to apply to the k8gb operator deployment
+ # for example:
+ # tolerations:
+ # - key: foo.bar.com/role
+ # operator: Equal
+ # value: master
+ # effect: NoSchedule
+ tolerations: []
+
+ coredns:
+ # -- service: refer to https://www.k8gb.io/docs/service_upgrade.html for upgrading CoreDNS service steps
+ isClusterService: false
+ deployment:
+ # -- Skip CoreDNS creation and uses the one shipped by k8gb instead
+ skipConfig: true
+ image:
+ # -- CoreDNS CRD plugin image
+ repository: registry.k8gb.io/k8gb-io/k8s_crd
+ # -- image tag
+ tag: v0.4.0
+ # -- Creates serviceAccount for coredns
+ serviceAccount:
+ create: true
+ name: coredns
+ # -- Disables all permissions since we don't open privileged ports
+ securityContext:
+ capabilities:
+ add: []
+ # -- Only meant to open the correct service and container ports, has no other impact on the coredns configuration
+ servers:
+ - zones:
+ - zone: .
+ use_tcp: true
+ port: 5353
+ servicePort: 53
+ plugins:
+ - name: prometheus
+ parameters: 0.0.0.0:9153
+
+ # -- If the value is LoadBalancer, the IP addresses of the cluster will be loaded from the CoreDNS service;
+ # otherwise, they will be loaded from the first ingress marked with the label "k8gb.io/ip-source=true".
+ serviceType: "LoadBalancer"
+
+ resources:
+ # -- requests and limits for the coredns container
+ limits:
+ cpu: 100m
+ memory: 128Mi
+ requests:
+ cpu: 100m
+ memory: 128Mi
+
+ # -- CoreDNS configmap
+ corefile:
+ enabled: true
+ # -- Reload CoreDNS configmap when it changes
+ # https://coredns.io/plugins/reload/
+ reload:
+ enabled: true
+ interval: 30s
+ jitter: 15s
+
+ infoblox:
+ # -- infoblox provider enabled
+ enabled: false
+ # -- WAPI address
+ gridHost: 10.0.0.1
+ # -- WAPI version
+ wapiVersion: 2.3.1
+ # -- WAPI port
+ wapiPort: 443
+ # -- use SSL
+ sslVerify: true
+ # -- Request Timeout in secconds
+ httpRequestTimeout: 20
+ # -- Size of connections pool
+ httpPoolConnections: 10
+ # -- DNS view to use for zone operations
+ dnsView: "default"
+
+ extdns:
+ enabled: false
+ interval: 20s
+ labelFilter: "k8gb.io/dnstype=extdns"
+ logLevel: debug
+ managedRecordTypes:
+ - A
+ - CNAME
+ - NS
+ policy: sync
+ rbac:
+ create: true
+ sources:
+ - crd
+ domainFilters:
+ - "example.com"
+ txtPrefix: "k8gb--"
+ txtOwnerId: "k8gb-"
+
+ openshift:
+ # -- Install OpenShift specific RBAC
+ enabled: false
+
+ tracing:
+ # -- if the application should be sending the traces to OTLP collector (env var `TRACING_ENABLED`)
+ enabled: false
+
+ # -- should the Jaeger be deployed together with the k8gb operator? In case of using another OpenTracing solution,
+ # make sure that configmap for OTEL agent has the correct exporters set up (`tracing.otelConfig`).
+ deployJaeger: false
+
+ # -- `host:port` where the spans from the applications (traces) should be sent, sets the `OTEL_EXPORTER_OTLP_ENDPOINT` env var
+ # This is not the final destination where all the traces are going. Otel collector has its configuration in the associated configmap (`tracing.otelConfig`).
+ endpoint: localhost:4318
+
+ # -- float representing the ratio of how often the span should be kept/dropped (env var `TRACING_SAMPLING_RATIO`)
+ # if not specified, the AlwaysSample will be used which is the same as 1.0. `0.1` would mean that 10% of samples will be kept
+ samplingRatio: null
+
+ # -- configuration for OTEL collector, this will be represented as configmap called `agent-config`
+ otelConfig: null
+
+ sidecarImage:
+ # -- OpenTelemetry collector into which the k8gb operator sends the spans. It can be further configured to send its data
+ # to somewhere else using exporters (Jaeger for instance)
+ repository: otel/opentelemetry-collector
+ tag: 0.148.0
+ pullPolicy: Always
+
+ jaegerImage:
+ # -- if `tracing.deployJaeger==true` this image will be used in the deployment for Jaeger
+ repository: jaegertracing/all-in-one
+ tag: 1.76.0
+ pullPolicy: Always
+
+ istio:
+ # -- install istio RBAC
+ enabled: true
+
+ gatewayapi:
+ # -- install gatewayapi RBAC
+ enabled: true