Added chart versions:

btp/chronicle:
    - 0.1.27
  kuma/kuma:
    - 2.8.4
  speedscale/speedscale-operator:
    - 2.2.509
pull/1071/head
github-actions[bot] 2024-10-08 00:37:07 +00:00
parent 1ce16f5243
commit 5a5c1d3ab4
103 changed files with 15085 additions and 1 deletions

BIN
assets/kuma/kuma-2.8.4.tgz Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
# Charts to ignore from helm-docs

View File

@ -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
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@ -0,0 +1,26 @@
annotations:
catalog.cattle.io/certified: partner
catalog.cattle.io/display-name: Kuma
catalog.cattle.io/namespace: kuma-system
catalog.cattle.io/release-name: kuma
apiVersion: v2
appVersion: 2.8.4
description: A Helm chart for the Kuma Control Plane
home: https://github.com/kumahq/kuma
icon: file://assets/icons/kuma.svg
keywords:
- service mesh
- control plane
maintainers:
- email: jakub.dyszkiewicz@konghq.com
name: Jakub Dyszkiewicz
url: https://github.com/jakubdyszkiewicz
- email: charly.molter@konghq.com
name: Charly Molter
url: https://github.com/lahabana
- email: michael.beaumont@konghq.com
name: Mike Beaumont
url: https://github.com/michaelbeaumont
name: kuma
type: application
version: 2.8.4

View File

@ -0,0 +1,256 @@
[![][kuma-logo]][kuma-url]
A Helm chart for the Kuma Control Plane
![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![Version: 2.8.4](https://img.shields.io/badge/Version-2.8.4-informational?style=flat-square) ![AppVersion: 2.8.4](https://img.shields.io/badge/AppVersion-2.8.4-informational?style=flat-square)
**Homepage:** <https://github.com/kumahq/kuma>
## Values
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| global.image.registry | string | `"docker.io/kumahq"` | Default registry for all Kuma Images |
| global.image.tag | string | `nil` | The default tag for all Kuma images, which itself defaults to .Chart.AppVersion |
| global.imagePullSecrets | list | `[]` | Add `imagePullSecrets` to all the service accounts used for Kuma components |
| patchSystemNamespace | bool | `true` | Whether to patch the target namespace with the system label |
| installCrdsOnUpgrade.enabled | bool | `true` | Whether install new CRDs before upgrade (if any were introduced with the new version of Kuma) |
| installCrdsOnUpgrade.imagePullSecrets | list | `[]` | The `imagePullSecrets` to attach to the Service Account running CRD installation. This field will be deprecated in a future release, please use .global.imagePullSecrets |
| noHelmHooks | bool | `false` | Whether to disable all helm hooks |
| restartOnSecretChange | bool | `true` | Whether to restart control-plane by calculating a new checksum for the secret |
| controlPlane.environment | string | `"kubernetes"` | Environment that control plane is run in, useful when running universal global control plane on k8s |
| controlPlane.extraLabels | object | `{}` | Labels to add to resources in addition to default labels |
| controlPlane.logLevel | string | `"info"` | Kuma CP log level: one of off,info,debug |
| controlPlane.logOutputPath | string | `""` | Kuma CP log output path: Defaults to /dev/stdout |
| controlPlane.mode | string | `"zone"` | Kuma CP modes: one of zone,global |
| controlPlane.zone | string | `nil` | Kuma CP zone, if running multizone |
| controlPlane.kdsGlobalAddress | string | `""` | Only used in `zone` mode |
| controlPlane.replicas | int | `1` | Number of replicas of the Kuma CP. Ignored when autoscaling is enabled |
| controlPlane.minReadySeconds | int | `0` | Minimum number of seconds for which a newly created pod should be ready for it to be considered available. |
| controlPlane.deploymentAnnotations | object | `{}` | Annotations applied only to the `Deployment` resource |
| controlPlane.podAnnotations | object | `{}` | Annotations applied only to the `Pod` resource |
| controlPlane.autoscaling.enabled | bool | `false` | Whether to enable Horizontal Pod Autoscaling, which requires the [Metrics Server](https://github.com/kubernetes-sigs/metrics-server) in the cluster |
| controlPlane.autoscaling.minReplicas | int | `2` | The minimum CP pods to allow |
| controlPlane.autoscaling.maxReplicas | int | `5` | The max CP pods to scale to |
| controlPlane.autoscaling.targetCPUUtilizationPercentage | int | `80` | For clusters that don't support autoscaling/v2, autoscaling/v1 is used |
| controlPlane.autoscaling.metrics | list | `[{"resource":{"name":"cpu","target":{"averageUtilization":80,"type":"Utilization"}},"type":"Resource"}]` | For clusters that do support autoscaling/v2, use metrics |
| controlPlane.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node selector for the Kuma Control Plane pods |
| controlPlane.tolerations | list | `[]` | Tolerations for the Kuma Control Plane pods |
| controlPlane.podDisruptionBudget.enabled | bool | `false` | Whether to create a pod disruption budget |
| controlPlane.podDisruptionBudget.maxUnavailable | int | `1` | The maximum number of unavailable pods allowed by the budget |
| controlPlane.affinity | object | `{"podAntiAffinity":{"preferredDuringSchedulingIgnoredDuringExecution":[{"podAffinityTerm":{"labelSelector":{"matchExpressions":[{"key":"app.kubernetes.io/name","operator":"In","values":["{{ include \"kuma.name\" . }}"]},{"key":"app.kubernetes.io/instance","operator":"In","values":["{{ .Release.Name }}"]},{"key":"app","operator":"In","values":["{{ include \"kuma.name\" . }}-control-plane"]}]},"topologyKey":"kubernetes.io/hostname"},"weight":100}]}}` | Affinity placement rule for the Kuma Control Plane pods. This is rendered as a template, so you can reference other helm variables or includes. |
| controlPlane.topologySpreadConstraints | string | `nil` | Topology spread constraints rule for the Kuma Control Plane pods. This is rendered as a template, so you can use variables to generate match labels. |
| controlPlane.injectorFailurePolicy | string | `"Fail"` | Failure policy of the mutating webhook implemented by the Kuma Injector component |
| controlPlane.service.apiServer.http.nodePort | int | `30681` | Port on which Http api server Service is exposed on Node for service of type NodePort |
| controlPlane.service.apiServer.https.nodePort | int | `30682` | Port on which Https api server Service is exposed on Node for service of type NodePort |
| controlPlane.service.enabled | bool | `true` | Whether to create a service resource. |
| controlPlane.service.name | string | `nil` | Optionally override of the Kuma Control Plane Service's name |
| controlPlane.service.type | string | `"ClusterIP"` | Service type of the Kuma Control Plane |
| controlPlane.service.annotations | object | `{"prometheus.io/port":"5680","prometheus.io/scrape":"true"}` | Annotations to put on the Kuma Control Plane |
| controlPlane.ingress.enabled | bool | `false` | Install K8s Ingress resource that exposes GUI and API |
| controlPlane.ingress.ingressClassName | string | `nil` | IngressClass defines which controller will implement the resource |
| controlPlane.ingress.hostname | string | `nil` | Ingress hostname |
| controlPlane.ingress.annotations | object | `{}` | Map of ingress annotations. |
| controlPlane.ingress.path | string | `"/"` | Ingress path. |
| controlPlane.ingress.pathType | string | `"ImplementationSpecific"` | Each path in an Ingress is required to have a corresponding path type. (ImplementationSpecific/Exact/Prefix) |
| controlPlane.ingress.servicePort | int | `5681` | Port from kuma-cp to use to expose API and GUI. Switch to 5682 to expose TLS port |
| controlPlane.globalZoneSyncService.enabled | bool | `true` | Whether to create a k8s service for the global zone sync service. It will only be created when enabled and deploying the global control plane. |
| controlPlane.globalZoneSyncService.type | string | `"LoadBalancer"` | Service type of the Global-zone sync |
| controlPlane.globalZoneSyncService.loadBalancerIP | string | `nil` | Optionally specify IP to be used by cloud provider when configuring load balancer |
| controlPlane.globalZoneSyncService.loadBalancerSourceRanges | list | `[]` | Optionally specify allowed source ranges that can access the load balancer |
| controlPlane.globalZoneSyncService.annotations | object | `{}` | Additional annotations to put on the Global Zone Sync Service |
| controlPlane.globalZoneSyncService.nodePort | int | `30685` | Port on which Global Zone Sync Service is exposed on Node for service of type NodePort |
| controlPlane.globalZoneSyncService.port | int | `5685` | Port on which Global Zone Sync Service is exposed |
| controlPlane.globalZoneSyncService.protocol | string | `"grpc"` | Protocol of the Global Zone Sync service port |
| controlPlane.defaults.skipMeshCreation | bool | `false` | Whether to skip creating the default Mesh |
| controlPlane.automountServiceAccountToken | bool | `true` | Whether to automountServiceAccountToken for cp. Optionally set to false |
| controlPlane.resources | object | `{"limits":{"memory":"256Mi"},"requests":{"cpu":"500m","memory":"256Mi"}}` | Optionally override the resource spec |
| controlPlane.lifecycle | object | `{}` | Pod lifecycle settings (useful for adding a preStop hook, when using AWS ALB or NLB) |
| controlPlane.terminationGracePeriodSeconds | int | `30` | Number of seconds to wait before force killing the pod. Make sure to update this if you add a preStop hook. |
| controlPlane.tls.general.secretName | string | `""` | Secret that contains tls.crt, tls.key [and ca.crt when no controlPlane.tls.general.caSecretName specified] for protecting Kuma in-cluster communication |
| controlPlane.tls.general.caSecretName | string | `""` | Secret that contains ca.crt that was used to sign cert for protecting Kuma in-cluster communication (ca.crt present in this secret have precedence over the one provided in the controlPlane.tls.general.secretName) |
| controlPlane.tls.general.caBundle | string | `""` | Base64 encoded CA certificate (the same as in controlPlane.tls.general.secret#ca.crt) |
| controlPlane.tls.apiServer.secretName | string | `""` | Secret that contains tls.crt, tls.key for protecting Kuma API on HTTPS |
| controlPlane.tls.apiServer.clientCertsSecretName | string | `""` | Secret that contains list of .pem certificates that can access admin endpoints of Kuma API on HTTPS |
| controlPlane.tls.kdsGlobalServer.secretName | string | `""` | Name of the K8s TLS Secret resource. If you set this and don't set create=true, you have to create the secret manually. |
| controlPlane.tls.kdsGlobalServer.create | bool | `false` | Whether to create the TLS secret in helm. |
| controlPlane.tls.kdsGlobalServer.cert | string | `""` | The TLS certificate to offer. |
| controlPlane.tls.kdsGlobalServer.key | string | `""` | The TLS key to use. |
| controlPlane.tls.kdsZoneClient.secretName | string | `""` | Name of the K8s Secret resource that contains ca.crt which was used to sign the certificate of KDS Global Server. If you set this and don't set create=true, you have to create the secret manually. |
| controlPlane.tls.kdsZoneClient.create | bool | `false` | Whether to create the TLS secret in helm. |
| controlPlane.tls.kdsZoneClient.cert | string | `""` | CA bundle that was used to sign the certificate of KDS Global Server. |
| controlPlane.tls.kdsZoneClient.skipVerify | bool | `false` | If true, TLS cert of the server is not verified. |
| controlPlane.serviceAccountAnnotations | object | `{}` | Annotations to add for Control Plane's Service Account |
| controlPlane.image.pullPolicy | string | `"IfNotPresent"` | Kuma CP ImagePullPolicy |
| controlPlane.image.repository | string | `"kuma-cp"` | Kuma CP image repository |
| controlPlane.image.tag | string | `nil` | Kuma CP Image tag. When not specified, the value is copied from global.tag |
| controlPlane.secrets | object with { Env: string, Secret: string, Key: string } | `nil` | Secrets to add as environment variables, where `Env` is the name of the env variable, `Secret` is the name of the Secret, and `Key` is the key of the Secret value to use |
| controlPlane.envVars | object | `{}` | Additional environment variables that will be passed to the control plane |
| controlPlane.extraConfigMaps | list | `[]` | Additional config maps to mount into the control plane, with optional inline values |
| controlPlane.extraSecrets | object with { name: string, mountPath: string, readOnly: string } | `nil` | Additional secrets to mount into the control plane, where `Env` is the name of the env variable, `Secret` is the name of the Secret, and `Key` is the key of the Secret value to use |
| controlPlane.webhooks.validator.additionalRules | string | `""` | Additional rules to apply on Kuma validator webhook. Useful when building custom policy on top of Kuma. |
| controlPlane.webhooks.ownerReference.additionalRules | string | `""` | Additional rules to apply on Kuma owner reference webhook. Useful when building custom policy on top of Kuma. |
| controlPlane.hostNetwork | bool | `false` | Specifies if the deployment should be started in hostNetwork mode. |
| controlPlane.admissionServerPort | int | `5443` | Define a new server port for the admission controller. Recommended to set in combination with hostNetwork to prevent multiple port bindings on the same port (like Calico in AWS EKS). |
| controlPlane.podSecurityContext | object | `{"runAsNonRoot":true}` | Security context at the pod level for control plane. |
| controlPlane.containerSecurityContext | object | `{"readOnlyRootFilesystem":true}` | Security context at the container level for control plane. |
| controlPlane.supportGatewaySecretsInAllNamespaces | bool | `false` | If true, then control plane can support TLS secrets for builtin gateway outside of mesh system namespace. The downside is that control plane requires permission to read Secrets in all namespaces. |
| cni.enabled | bool | `false` | Install Kuma with CNI instead of proxy init container |
| cni.chained | bool | `false` | Install CNI in chained mode |
| cni.netDir | string | `"/etc/cni/multus/net.d"` | Set the CNI install directory |
| cni.binDir | string | `"/var/lib/cni/bin"` | Set the CNI bin directory |
| cni.confName | string | `"kuma-cni.conf"` | Set the CNI configuration name |
| cni.logLevel | string | `"info"` | CNI log level: one of off,info,debug |
| cni.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node Selector for the CNI pods |
| cni.tolerations | list | `[]` | Tolerations for the CNI pods |
| cni.podAnnotations | object | `{}` | Additional pod annotations |
| cni.namespace | string | `"kube-system"` | Set the CNI namespace |
| cni.image.repository | string | `"kuma-cni"` | CNI image repository |
| cni.image.tag | string | `nil` | CNI image tag - defaults to .Chart.AppVersion |
| cni.image.imagePullPolicy | string | `"IfNotPresent"` | CNI image pull policy |
| cni.delayStartupSeconds | int | `0` | it's only useful in tests to trigger a possible race condition |
| cni.experimental | object | `{"imageEbpf":{"registry":"docker.io/kumahq","repository":"merbridge","tag":"0.8.5"}}` | use new CNI (experimental) |
| cni.experimental.imageEbpf.registry | string | `"docker.io/kumahq"` | CNI experimental eBPF image registry |
| cni.experimental.imageEbpf.repository | string | `"merbridge"` | CNI experimental eBPF image repository |
| cni.experimental.imageEbpf.tag | string | `"0.8.5"` | CNI experimental eBPF image tag |
| cni.resources.requests.cpu | string | `"100m"` | |
| cni.resources.requests.memory | string | `"100Mi"` | |
| cni.resources.limits.memory | string | `"100Mi"` | |
| cni.podSecurityContext | object | `{}` | Security context at the pod level for cni |
| cni.containerSecurityContext | object | `{"readOnlyRootFilesystem":true,"runAsGroup":0,"runAsNonRoot":false,"runAsUser":0}` | Security context at the container level for cni |
| dataPlane.dnsLogging | bool | `false` | If true, then turn on CoreDNS query logging |
| dataPlane.image.repository | string | `"kuma-dp"` | The Kuma DP image repository |
| dataPlane.image.pullPolicy | string | `"IfNotPresent"` | Kuma DP ImagePullPolicy |
| dataPlane.image.tag | string | `nil` | Kuma DP Image Tag. When not specified, the value is copied from global.tag |
| dataPlane.initImage.repository | string | `"kuma-init"` | The Kuma DP init image repository |
| dataPlane.initImage.tag | string | `nil` | Kuma DP init image tag When not specified, the value is copied from global.tag |
| ingress.enabled | bool | `false` | If true, it deploys Ingress for cross cluster communication |
| ingress.extraLabels | object | `{}` | Labels to add to resources, in addition to default labels |
| ingress.drainTime | string | `"30s"` | Time for which old listener will still be active as draining |
| ingress.replicas | int | `1` | Number of replicas of the Ingress. Ignored when autoscaling is enabled. |
| ingress.logLevel | string | `"info"` | Log level for ingress (available values: off|info|debug) |
| ingress.resources | object | `{"limits":{"cpu":"1000m","memory":"512Mi"},"requests":{"cpu":"50m","memory":"64Mi"}}` | Define the resources to allocate to mesh ingress |
| ingress.lifecycle | object | `{}` | Pod lifecycle settings (useful for adding a preStop hook, when using AWS ALB or NLB) |
| ingress.terminationGracePeriodSeconds | int | `40` | Number of seconds to wait before force killing the pod. Make sure to update this if you add a preStop hook. |
| ingress.autoscaling.enabled | bool | `false` | Whether to enable Horizontal Pod Autoscaling, which requires the [Metrics Server](https://github.com/kubernetes-sigs/metrics-server) in the cluster |
| ingress.autoscaling.minReplicas | int | `2` | The minimum CP pods to allow |
| ingress.autoscaling.maxReplicas | int | `5` | The max CP pods to scale to |
| ingress.autoscaling.targetCPUUtilizationPercentage | int | `80` | For clusters that don't support autoscaling/v2, autoscaling/v1 is used |
| ingress.autoscaling.metrics | list | `[{"resource":{"name":"cpu","target":{"averageUtilization":80,"type":"Utilization"}},"type":"Resource"}]` | For clusters that do support autoscaling/v2, use metrics |
| ingress.service.enabled | bool | `true` | Whether to create a Service resource. |
| ingress.service.type | string | `"LoadBalancer"` | Service type of the Ingress |
| ingress.service.loadBalancerIP | string | `nil` | Optionally specify IP to be used by cloud provider when configuring load balancer |
| ingress.service.annotations | object | `{}` | Additional annotations to put on the Ingress service |
| ingress.service.port | int | `10001` | Port on which Ingress is exposed |
| ingress.service.nodePort | string | `nil` | Port on which service is exposed on Node for service of type NodePort |
| ingress.annotations | object | `{}` | Additional pod annotations (deprecated favor `podAnnotations`) |
| ingress.podAnnotations | object | `{}` | Additional pod annotations |
| ingress.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node Selector for the Ingress pods |
| ingress.tolerations | list | `[]` | Tolerations for the Ingress pods |
| ingress.podDisruptionBudget.enabled | bool | `false` | Whether to create a pod disruption budget |
| ingress.podDisruptionBudget.maxUnavailable | int | `1` | The maximum number of unavailable pods allowed by the budget |
| ingress.affinity | object | `{"podAntiAffinity":{"preferredDuringSchedulingIgnoredDuringExecution":[{"podAffinityTerm":{"labelSelector":{"matchExpressions":[{"key":"app.kubernetes.io/name","operator":"In","values":["{{ include \"kuma.name\" . }}"]},{"key":"app.kubernetes.io/instance","operator":"In","values":["{{ .Release.Name }}"]},{"key":"app","operator":"In","values":["kuma-ingress"]}]},"topologyKey":"kubernetes.io/hostname"},"weight":100}]}}` | Affinity placement rule for the Kuma Ingress pods This is rendered as a template, so you can reference other helm variables or includes. |
| ingress.topologySpreadConstraints | string | `nil` | Topology spread constraints rule for the Kuma Mesh Ingress pods. This is rendered as a template, so you can use variables to generate match labels. |
| ingress.podSecurityContext | object | `{"runAsGroup":5678,"runAsNonRoot":true,"runAsUser":5678}` | Security context at the pod level for ingress |
| ingress.containerSecurityContext | object | `{"readOnlyRootFilesystem":true}` | Security context at the container level for ingress |
| ingress.serviceAccountAnnotations | object | `{}` | Annotations to add for Control Plane's Service Account |
| ingress.automountServiceAccountToken | bool | `true` | Whether to automountServiceAccountToken for cp. Optionally set to false |
| egress.enabled | bool | `false` | If true, it deploys Egress for cross cluster communication |
| egress.extraLabels | object | `{}` | Labels to add to resources, in addition to the default labels. |
| egress.drainTime | string | `"30s"` | Time for which old listener will still be active as draining |
| egress.replicas | int | `1` | Number of replicas of the Egress. Ignored when autoscaling is enabled. |
| egress.logLevel | string | `"info"` | Log level for egress (available values: off|info|debug) |
| egress.autoscaling.enabled | bool | `false` | Whether to enable Horizontal Pod Autoscaling, which requires the [Metrics Server](https://github.com/kubernetes-sigs/metrics-server) in the cluster |
| egress.autoscaling.minReplicas | int | `2` | The minimum CP pods to allow |
| egress.autoscaling.maxReplicas | int | `5` | The max CP pods to scale to |
| egress.autoscaling.targetCPUUtilizationPercentage | int | `80` | For clusters that don't support autoscaling/v2, autoscaling/v1 is used |
| egress.autoscaling.metrics | list | `[{"resource":{"name":"cpu","target":{"averageUtilization":80,"type":"Utilization"}},"type":"Resource"}]` | For clusters that do support autoscaling/v2, use metrics |
| egress.resources.requests.cpu | string | `"50m"` | |
| egress.resources.requests.memory | string | `"64Mi"` | |
| egress.resources.limits.cpu | string | `"1000m"` | |
| egress.resources.limits.memory | string | `"512Mi"` | |
| egress.service.enabled | bool | `true` | Whether to create the service object |
| egress.service.type | string | `"ClusterIP"` | Service type of the Egress |
| egress.service.loadBalancerIP | string | `nil` | Optionally specify IP to be used by cloud provider when configuring load balancer |
| egress.service.annotations | object | `{}` | Additional annotations to put on the Egress service |
| egress.service.port | int | `10002` | Port on which Egress is exposed |
| egress.service.nodePort | string | `nil` | Port on which service is exposed on Node for service of type NodePort |
| egress.annotations | object | `{}` | Additional pod annotations (deprecated favor `podAnnotations`) |
| egress.podAnnotations | object | `{}` | Additional pod annotations |
| egress.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node Selector for the Egress pods |
| egress.tolerations | list | `[]` | Tolerations for the Egress pods |
| egress.podDisruptionBudget.enabled | bool | `false` | Whether to create a pod disruption budget |
| egress.podDisruptionBudget.maxUnavailable | int | `1` | The maximum number of unavailable pods allowed by the budget |
| egress.affinity | object | `{"podAntiAffinity":{"preferredDuringSchedulingIgnoredDuringExecution":[{"podAffinityTerm":{"labelSelector":{"matchExpressions":[{"key":"app.kubernetes.io/name","operator":"In","values":["{{ include \"kuma.name\" . }}"]},{"key":"app.kubernetes.io/instance","operator":"In","values":["{{ .Release.Name }}"]},{"key":"app","operator":"In","values":["kuma-egress"]}]},"topologyKey":"kubernetes.io/hostname"},"weight":100}]}}` | Affinity placement rule for the Kuma Egress pods. This is rendered as a template, so you can reference other helm variables or includes. |
| egress.topologySpreadConstraints | string | `nil` | Topology spread constraints rule for the Kuma Egress pods. This is rendered as a template, so you can use variables to generate match labels. |
| egress.podSecurityContext | object | `{"runAsGroup":5678,"runAsNonRoot":true,"runAsUser":5678}` | Security context at the pod level for egress |
| egress.containerSecurityContext | object | `{"readOnlyRootFilesystem":true}` | Security context at the container level for egress |
| egress.serviceAccountAnnotations | object | `{}` | Annotations to add for Control Plane's Service Account |
| egress.automountServiceAccountToken | bool | `true` | Whether to automountServiceAccountToken for cp. Optionally set to false |
| kumactl.image.repository | string | `"kumactl"` | The kumactl image repository |
| kumactl.image.tag | string | `nil` | The kumactl image tag. When not specified, the value is copied from global.tag |
| kubectl.image.registry | string | `"docker.io"` | The kubectl image registry |
| kubectl.image.repository | string | `"bitnami/kubectl"` | The kubectl image repository |
| kubectl.image.tag | string | `"1.27.5"` | The kubectl image tag |
| hooks.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node selector for the HELM hooks |
| hooks.tolerations | list | `[]` | Tolerations for the HELM hooks |
| hooks.podSecurityContext | object | `{"runAsNonRoot":true}` | Security context at the pod level for crd/webhook/ns |
| hooks.containerSecurityContext | object | `{"readOnlyRootFilesystem":true}` | Security context at the container level for crd/webhook/ns |
| hooks.ebpfCleanup | object | `{"containerSecurityContext":{"readOnlyRootFilesystem":false},"podSecurityContext":{"runAsNonRoot":false}}` | ebpf-cleanup hook needs write access to the root filesystem to clean ebpf programs Changing below values will potentially break ebpf cleanup completely, so be cautious when doing so. |
| hooks.ebpfCleanup.podSecurityContext | object | `{"runAsNonRoot":false}` | Security context at the pod level for crd/webhook/cleanup-ebpf |
| hooks.ebpfCleanup.containerSecurityContext | object | `{"readOnlyRootFilesystem":false}` | Security context at the container level for crd/webhook/cleanup-ebpf |
| experimental.ebpf.enabled | bool | `false` | If true, ebpf will be used instead of using iptables to install/configure transparent proxy |
| experimental.ebpf.instanceIPEnvVarName | string | `"INSTANCE_IP"` | Name of the environmental variable which will contain the IP address of a pod |
| experimental.ebpf.bpffsPath | string | `"/sys/fs/bpf"` | Path where BPF file system should be mounted |
| experimental.ebpf.cgroupPath | string | `"/sys/fs/cgroup"` | Host's cgroup2 path |
| experimental.ebpf.tcAttachIface | string | `""` | Name of the network interface which TC programs should be attached to, we'll try to automatically determine it if empty |
| experimental.ebpf.programsSourcePath | string | `"/tmp/kuma-ebpf"` | Path where compiled eBPF programs which will be installed can be found |
| experimental.deltaKds | bool | `true` | If false, it uses legacy API for resource synchronization |
| experimental.sidecarContainers | bool | `false` | If true, enable native Kubernetes sidecars. This requires at least Kubernetes v1.29 |
| postgres.port | string | `"5432"` | Postgres port, password should be provided as a secret reference in "controlPlane.secrets" with the Env value "KUMA_STORE_POSTGRES_PASSWORD". Example: controlPlane: secrets: - Secret: postgres-postgresql Key: postgresql-password Env: KUMA_STORE_POSTGRES_PASSWORD |
| postgres.tls.mode | string | `"disable"` | Mode of TLS connection. Available values are: "disable", "verifyNone", "verifyCa", "verifyFull" |
| postgres.tls.disableSSLSNI | bool | `false` | Whether to disable SNI the postgres `sslsni` option. |
| postgres.tls.caSecretName | string | `nil` | Secret name that contains the ca.crt |
| postgres.tls.secretName | string | `nil` | Secret name that contains the client tls.crt, tls.key |
## Custom Resource Definitions
All Kuma CRDs are loaded via the [`crds`](crds) directory. For more detailed information on CRDs and Helm,
please refer to [the Helm documentation][helm-crd].
## Deleting
As part of [Helm's limitations][helm-crd-limitations], CRDs will not be deleted when the `kuma` chart is deleted and
must be deleted manually. When a CRD is deleted Kubernetes deletes all resources of that kind as well, so this should
be done carefully.
To do this with `kubectl` on *nix platforms, run:
```shell
kubectl get crds | grep kuma.io | tr -s " " | cut -d " " -f1 | xargs kubectl delete crd
# or with jq
kubectl get crds -o json | jq '.items[].metadata.name | select(.|test(".*kuma\\.io"))' | xargs kubectl delete crd
```
## Autoscaling
In production, it is advisable to enable Control Plane autoscaling for High Availability. Autoscaling uses the
`HorizontalPodAutoscaler` resource to add redundancy and scale the CP pods based on CPU utilization, which requires
the [k8s metrics-server][kube-metrics-server] to be running on the cluster.
## Development
The charts are used internally in `kumactl install`, therefore the following rules apply when developing new chat features:
* all templates that start with `pre-` and `post-` are omitted when processing in `kumactl install`
### Installing Metrics Server for Autoscaling
If running on kind, or on a cluster with a similarly self-signed cert, the metrics server must be configured to allow
insecure kubelet TLS. The make task `kind/deploy/metrics-server` installs this patched version of the server.
[kuma-url]: https://kuma.io/
[kuma-logo]: https://kuma-public-assets.s3.amazonaws.com/kuma-logo-v2.png
[helm-crd]: https://helm.sh/docs/chart_best_practices/custom_resource_definitions/
[helm-crd-limitations]: https://helm.sh/docs/topics/charts/#limitations-on-crds
[kube-metrics-server]: https://github.com/kubernetes-sigs/metrics-server

View File

@ -0,0 +1,52 @@
[![][kuma-logo]][kuma-url]
{{ template "chart.description" . }}
{{ template "chart.typeBadge" . }}{{ template "chart.versionBadge" . }}{{ template "chart.appVersionBadge" . }}
{{ template "chart.homepageLine" . }}
{{ template "chart.valuesSection" . }}
## Custom Resource Definitions
All Kuma CRDs are loaded via the [`crds`](crds) directory. For more detailed information on CRDs and Helm,
please refer to [the Helm documentation][helm-crd].
## Deleting
As part of [Helm's limitations][helm-crd-limitations], CRDs will not be deleted when the `kuma` chart is deleted and
must be deleted manually. When a CRD is deleted Kubernetes deletes all resources of that kind as well, so this should
be done carefully.
To do this with `kubectl` on *nix platforms, run:
```shell
kubectl get crds | grep kuma.io | tr -s " " | cut -d " " -f1 | xargs kubectl delete crd
# or with jq
kubectl get crds -o json | jq '.items[].metadata.name | select(.|test(".*kuma\\.io"))' | xargs kubectl delete crd
```
## Autoscaling
In production, it is advisable to enable Control Plane autoscaling for High Availability. Autoscaling uses the
`HorizontalPodAutoscaler` resource to add redundancy and scale the CP pods based on CPU utilization, which requires
the [k8s metrics-server][kube-metrics-server] to be running on the cluster.
## Development
The charts are used internally in `kumactl install`, therefore the following rules apply when developing new chat features:
* all templates that start with `pre-` and `post-` are omitted when processing in `kumactl install`
### Installing Metrics Server for Autoscaling
If running on kind, or on a cluster with a similarly self-signed cert, the metrics server must be configured to allow
insecure kubelet TLS. The make task `kind/deploy/metrics-server` installs this patched version of the server.
[kuma-url]: https://kuma.io/
[kuma-logo]: https://kuma-public-assets.s3.amazonaws.com/kuma-logo-v2.png
[helm-crd]: https://helm.sh/docs/chart_best_practices/custom_resource_definitions/
[helm-crd-limitations]: https://helm.sh/docs/topics/charts/#limitations-on-crds
[kube-metrics-server]: https://github.com/kubernetes-sigs/metrics-server

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: circuitbreakers.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: CircuitBreaker
listKind: CircuitBreakerList
plural: circuitbreakers
singular: circuitbreaker
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma CircuitBreaker resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,114 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: containerpatches.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ContainerPatch
listKind: ContainerPatchList
plural: containerpatches
singular: containerpatch
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: ContainerPatch stores a list of patches to apply to init and
sidecar containers.
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
mesh:
type: string
metadata:
type: object
spec:
description: ContainerPatchSpec specifies the options available for a
ContainerPatch
properties:
initPatch:
description: InitPatch specifies jsonpatch to apply to an init container.
items:
description: JsonPatchBlock is one json patch operation block.
properties:
from:
description: From is a jsonpatch from string, used by move and
copy operations.
type: string
op:
description: Op is a jsonpatch operation string.
enum:
- add
- remove
- replace
- move
- copy
type: string
path:
description: Path is a jsonpatch path string.
type: string
value:
description: |-
Value must be a string representing a valid json object used
by replace and add operations. String has to be escaped with " to be valid a json object.
type: string
required:
- op
- path
type: object
type: array
sidecarPatch:
description: SidecarPatch specifies jsonpatch to apply to a sidecar
container.
items:
description: JsonPatchBlock is one json patch operation block.
properties:
from:
description: From is a jsonpatch from string, used by move and
copy operations.
type: string
op:
description: Op is a jsonpatch operation string.
enum:
- add
- remove
- replace
- move
- copy
type: string
path:
description: Path is a jsonpatch path string.
type: string
value:
description: |-
Value must be a string representing a valid json object used
by replace and add operations. String has to be escaped with " to be valid a json object.
type: string
required:
- op
- path
type: object
type: array
type: object
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: dataplaneinsights.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: DataplaneInsight
listKind: DataplaneInsightList
plural: dataplaneinsights
singular: dataplaneinsight
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
status:
description: Status is the status the Kuma resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,70 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: dataplanes.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: Dataplane
listKind: DataplaneList
plural: dataplanes
singular: dataplane
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Service tag of the first inbound
jsonPath: .spec.networking.inbound[0].tags['kuma\.io/service']
name: kuma.io/service
type: string
- description: Service tag of the second inbound
jsonPath: .spec.networking.inbound[1].tags['kuma\.io/service']
name: kuma.io/service
type: string
- description: Service tag of the third inbound
jsonPath: .spec.networking.inbound[2].tags['kuma\.io/service']
name: kuma.io/service
priority: 1
type: string
- description: Service tag of the fourth inbound
jsonPath: .spec.networking.inbound[3].tags['kuma\.io/service']
name: kuma.io/service
priority: 1
type: string
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma Dataplane resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: externalservices.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ExternalService
listKind: ExternalServiceList
plural: externalservices
singular: externalservice
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma ExternalService resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: faultinjections.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: FaultInjection
listKind: FaultInjectionList
plural: faultinjections
singular: faultinjection
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma FaultInjection resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: healthchecks.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: HealthCheck
listKind: HealthCheckList
plural: healthchecks
singular: healthcheck
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma HealthCheck resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,65 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: hostnamegenerators.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: HostnameGenerator
listKind: HostnameGeneratorList
plural: hostnamegenerators
singular: hostnamegenerator
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: Spec is the specification of the Kuma HostnameGenerator resource.
properties:
selector:
properties:
meshExternalService:
properties:
matchLabels:
additionalProperties:
type: string
type: object
type: object
meshService:
properties:
matchLabels:
additionalProperties:
type: string
type: object
type: object
type: object
template:
type: string
type: object
type: object
served: true
storage: true

View File

@ -0,0 +1,556 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshaccesslogs.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshAccessLog
listKind: MeshAccessLogList
plural: meshaccesslogs
singular: meshaccesslog
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshAccessLog resource.
properties:
from:
description: From list makes a match between clients and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of clients referenced in
'targetRef'
properties:
backends:
items:
properties:
file:
description: FileBackend defines configuration for
file based access logs
properties:
format:
description: |-
Format of access logs. Placeholders available on
https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators
properties:
json:
example:
- key: start_time
value: '%START_TIME%'
- key: bytes_received
value: '%BYTES_RECEIVED%'
items:
properties:
key:
type: string
value:
type: string
type: object
type: array
omitEmptyValues:
default: false
type: boolean
plain:
example: '[%START_TIME%] %KUMA_MESH% %UPSTREAM_HOST%'
type: string
type:
enum:
- Plain
- Json
type: string
required:
- type
type: object
path:
description: Path to a file that logs will be
written to
example: /tmp/access.log
minLength: 1
type: string
required:
- path
type: object
openTelemetry:
description: Defines an OpenTelemetry logging backend.
properties:
attributes:
description: |-
Attributes can contain placeholders available on
https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators
example:
- key: mesh
value: '%KUMA_MESH%'
items:
properties:
key:
type: string
value:
type: string
type: object
type: array
body:
description: |-
Body is a raw string or an OTLP any value as described at
https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#field-body
It can contain placeholders available on
https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators
example:
kvlistValue:
values:
- key: mesh
value:
stringValue: '%KUMA_MESH%'
x-kubernetes-preserve-unknown-fields: true
endpoint:
description: Endpoint of OpenTelemetry collector.
An empty port defaults to 4317.
example: otel-collector:4317
minLength: 1
type: string
required:
- endpoint
type: object
tcp:
description: TCPBackend defines a TCP logging backend.
properties:
address:
description: Address of the TCP logging backend
example: 127.0.0.1:5000
minLength: 1
type: string
format:
description: |-
Format of access logs. Placeholders available on
https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators
properties:
json:
example:
- key: start_time
value: '%START_TIME%'
- key: bytes_received
value: '%BYTES_RECEIVED%'
items:
properties:
key:
type: string
value:
type: string
type: object
type: array
omitEmptyValues:
default: false
type: boolean
plain:
example: '[%START_TIME%] %KUMA_MESH% %UPSTREAM_HOST%'
type: string
type:
enum:
- Plain
- Json
type: string
required:
- type
type: object
required:
- address
type: object
type:
enum:
- Tcp
- File
- OpenTelemetry
type: string
required:
- type
type: object
type: array
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
clients.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined in-place.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: To list makes a match between the consumed services and
corresponding configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations referenced in
'targetRef'
properties:
backends:
items:
properties:
file:
description: FileBackend defines configuration for
file based access logs
properties:
format:
description: |-
Format of access logs. Placeholders available on
https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators
properties:
json:
example:
- key: start_time
value: '%START_TIME%'
- key: bytes_received
value: '%BYTES_RECEIVED%'
items:
properties:
key:
type: string
value:
type: string
type: object
type: array
omitEmptyValues:
default: false
type: boolean
plain:
example: '[%START_TIME%] %KUMA_MESH% %UPSTREAM_HOST%'
type: string
type:
enum:
- Plain
- Json
type: string
required:
- type
type: object
path:
description: Path to a file that logs will be
written to
example: /tmp/access.log
minLength: 1
type: string
required:
- path
type: object
openTelemetry:
description: Defines an OpenTelemetry logging backend.
properties:
attributes:
description: |-
Attributes can contain placeholders available on
https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators
example:
- key: mesh
value: '%KUMA_MESH%'
items:
properties:
key:
type: string
value:
type: string
type: object
type: array
body:
description: |-
Body is a raw string or an OTLP any value as described at
https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/data-model.md#field-body
It can contain placeholders available on
https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators
example:
kvlistValue:
values:
- key: mesh
value:
stringValue: '%KUMA_MESH%'
x-kubernetes-preserve-unknown-fields: true
endpoint:
description: Endpoint of OpenTelemetry collector.
An empty port defaults to 4317.
example: otel-collector:4317
minLength: 1
type: string
required:
- endpoint
type: object
tcp:
description: TCPBackend defines a TCP logging backend.
properties:
address:
description: Address of the TCP logging backend
example: 127.0.0.1:5000
minLength: 1
type: string
format:
description: |-
Format of access logs. Placeholders available on
https://www.envoyproxy.io/docs/envoy/latest/configuration/observability/access_log/usage#command-operators
properties:
json:
example:
- key: start_time
value: '%START_TIME%'
- key: bytes_received
value: '%BYTES_RECEIVED%'
items:
properties:
key:
type: string
value:
type: string
type: object
type: array
omitEmptyValues:
default: false
type: boolean
plain:
example: '[%START_TIME%] %KUMA_MESH% %UPSTREAM_HOST%'
type: string
type:
enum:
- Plain
- Json
type: string
required:
- type
type: object
required:
- address
type: object
type:
enum:
- Tcp
- File
- OpenTelemetry
type: string
required:
- type
type: object
type: array
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,738 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshcircuitbreakers.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshCircuitBreaker
listKind: MeshCircuitBreakerList
plural: meshcircuitbreakers
singular: meshcircuitbreaker
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshCircuitBreaker
resource.
properties:
from:
description: From list makes a match between clients and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations
referenced in 'targetRef'
properties:
connectionLimits:
description: |-
ConnectionLimits contains configuration of each circuit breaking limit,
which when exceeded makes the circuit breaker to become open (no traffic
is allowed like no current is allowed in the circuits when physical
circuit breaker ir open)
properties:
maxConnectionPools:
description: |-
The maximum number of connection pools per cluster that are concurrently
supported at once. Set this for clusters which create a large number of
connection pools.
format: int32
type: integer
maxConnections:
description: |-
The maximum number of connections allowed to be made to the upstream
cluster.
format: int32
type: integer
maxPendingRequests:
description: |-
The maximum number of pending requests that are allowed to the upstream
cluster. This limit is applied as a connection limit for non-HTTP
traffic.
format: int32
type: integer
maxRequests:
description: |-
The maximum number of parallel requests that are allowed to be made
to the upstream cluster. This limit does not apply to non-HTTP traffic.
format: int32
type: integer
maxRetries:
description: |-
The maximum number of parallel retries that will be allowed to
the upstream cluster.
format: int32
type: integer
type: object
outlierDetection:
description: |-
OutlierDetection contains the configuration of the process of dynamically
determining whether some number of hosts in an upstream cluster are
performing unlike the others and removing them from the healthy load
balancing set. Performance might be along different axes such as
consecutive failures, temporal success rate, temporal latency, etc.
Outlier detection is a form of passive health checking.
properties:
baseEjectionTime:
description: |-
The base time that a host is ejected for. The real time is equal to
the base time multiplied by the number of times the host has been
ejected.
type: string
detectors:
description: Contains configuration for supported outlier
detectors
properties:
failurePercentage:
description: |-
Failure Percentage based outlier detection functions similarly to success
rate detection, in that it relies on success rate data from each host in
a cluster. However, rather than compare those values to the mean success
rate of the cluster as a whole, they are compared to a flat
user-configured threshold. This threshold is configured via the
outlierDetection.failurePercentageThreshold field.
The other configuration fields for failure percentage based detection are
similar to the fields for success rate detection. As with success rate
detection, detection will not be performed for a host if its request
volume over the aggregation interval is less than the
outlierDetection.detectors.failurePercentage.requestVolume value.
Detection also will not be performed for a cluster if the number of hosts
with the minimum required request volume in an interval is less than the
outlierDetection.detectors.failurePercentage.minimumHosts value.
properties:
minimumHosts:
description: |-
The minimum number of hosts in a cluster in order to perform failure
percentage-based ejection. If the total number of hosts in the cluster is
less than this value, failure percentage-based ejection will not be
performed.
format: int32
type: integer
requestVolume:
description: |-
The minimum number of total requests that must be collected in one
interval (as defined by the interval duration above) to perform failure
percentage-based ejection for this host. If the volume is lower than this
setting, failure percentage-based ejection will not be performed for this
host.
format: int32
type: integer
threshold:
description: |-
The failure percentage to use when determining failure percentage-based
outlier detection. If the failure percentage of a given host is greater
than or equal to this value, it will be ejected.
format: int32
type: integer
type: object
gatewayFailures:
description: |-
In the default mode (outlierDetection.splitExternalLocalOriginErrors is
false) this detection type takes into account a subset of 5xx errors,
called "gateway errors" (502, 503 or 504 status code) and local origin
failures, such as timeout, TCP reset etc.
In split mode (outlierDetection.splitExternalLocalOriginErrors is true)
this detection type takes into account a subset of 5xx errors, called
"gateway errors" (502, 503 or 504 status code) and is supported only by
the http router.
properties:
consecutive:
description: |-
The number of consecutive gateway failures (502, 503, 504 status codes)
before a consecutive gateway failure ejection occurs.
format: int32
type: integer
type: object
localOriginFailures:
description: |-
This detection type is enabled only when
outlierDetection.splitExternalLocalOriginErrors is true and takes into
account only locally originated errors (timeout, reset, etc).
If Envoy repeatedly cannot connect to an upstream host or communication
with the upstream host is repeatedly interrupted, it will be ejected.
Various locally originated problems are detected: timeout, TCP reset,
ICMP errors, etc. This detection type is supported by http router and
tcp proxy.
properties:
consecutive:
description: |-
The number of consecutive locally originated failures before ejection
occurs. Parameter takes effect only when splitExternalAndLocalErrors
is set to true.
format: int32
type: integer
type: object
successRate:
description: |-
Success Rate based outlier detection aggregates success rate data from
every host in a cluster. Then at given intervals ejects hosts based on
statistical outlier detection. Success Rate outlier detection will not be
calculated for a host if its request volume over the aggregation interval
is less than the outlierDetection.detectors.successRate.requestVolume
value.
Moreover, detection will not be performed for a cluster if the number of
hosts with the minimum required request volume in an interval is less
than the outlierDetection.detectors.successRate.minimumHosts value.
In the default configuration mode
(outlierDetection.splitExternalLocalOriginErrors is false) this detection
type takes into account all types of errors: locally and externally
originated.
In split mode (outlierDetection.splitExternalLocalOriginErrors is true),
locally originated errors and externally originated (transaction) errors
are counted and treated separately.
properties:
minimumHosts:
description: |-
The number of hosts in a cluster that must have enough request volume to
detect success rate outliers. If the number of hosts is less than this
setting, outlier detection via success rate statistics is not performed
for any host in the cluster.
format: int32
type: integer
requestVolume:
description: |-
The minimum number of total requests that must be collected in one
interval (as defined by the interval duration configured in
outlierDetection section) to include this host in success rate based
outlier detection. If the volume is lower than this setting, outlier
detection via success rate statistics is not performed for that host.
format: int32
type: integer
standardDeviationFactor:
anyOf:
- type: integer
- type: string
description: |-
This factor is used to determine the ejection threshold for success rate
outlier ejection. The ejection threshold is the difference between
the mean success rate, and the product of this factor and the standard
deviation of the mean success rate: mean - (standard_deviation *
success_rate_standard_deviation_factor).
Either int or decimal represented as string.
x-kubernetes-int-or-string: true
type: object
totalFailures:
description: |-
In the default mode (outlierDetection.splitExternalAndLocalErrors is
false) this detection type takes into account all generated errors:
locally originated and externally originated (transaction) errors.
In split mode (outlierDetection.splitExternalLocalOriginErrors is true)
this detection type takes into account only externally originated
(transaction) errors, ignoring locally originated errors.
If an upstream host is an HTTP-server, only 5xx types of error are taken
into account (see Consecutive Gateway Failure for exceptions).
Properly formatted responses, even when they carry an operational error
(like index not found, access denied) are not taken into account.
properties:
consecutive:
description: |-
The number of consecutive server-side error responses (for HTTP traffic,
5xx responses; for TCP traffic, connection failures; for Redis, failure
to respond PONG; etc.) before a consecutive total failure ejection
occurs.
format: int32
type: integer
type: object
type: object
disabled:
description: When set to true, outlierDetection configuration
won't take any effect
type: boolean
interval:
description: |-
The time interval between ejection analysis sweeps. This can result in
both new ejections and hosts being returned to service.
type: string
maxEjectionPercent:
description: |-
The maximum % of an upstream cluster that can be ejected due to outlier
detection. Defaults to 10% but will eject at least one host regardless of
the value.
format: int32
type: integer
splitExternalAndLocalErrors:
description: |-
Determines whether to distinguish local origin failures from external
errors. If set to true the following configuration parameters are taken
into account: detectors.localOriginFailures.consecutive
type: boolean
type: object
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined in place.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: |-
To list makes a match between the consumed services and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations
referenced in 'targetRef'
properties:
connectionLimits:
description: |-
ConnectionLimits contains configuration of each circuit breaking limit,
which when exceeded makes the circuit breaker to become open (no traffic
is allowed like no current is allowed in the circuits when physical
circuit breaker ir open)
properties:
maxConnectionPools:
description: |-
The maximum number of connection pools per cluster that are concurrently
supported at once. Set this for clusters which create a large number of
connection pools.
format: int32
type: integer
maxConnections:
description: |-
The maximum number of connections allowed to be made to the upstream
cluster.
format: int32
type: integer
maxPendingRequests:
description: |-
The maximum number of pending requests that are allowed to the upstream
cluster. This limit is applied as a connection limit for non-HTTP
traffic.
format: int32
type: integer
maxRequests:
description: |-
The maximum number of parallel requests that are allowed to be made
to the upstream cluster. This limit does not apply to non-HTTP traffic.
format: int32
type: integer
maxRetries:
description: |-
The maximum number of parallel retries that will be allowed to
the upstream cluster.
format: int32
type: integer
type: object
outlierDetection:
description: |-
OutlierDetection contains the configuration of the process of dynamically
determining whether some number of hosts in an upstream cluster are
performing unlike the others and removing them from the healthy load
balancing set. Performance might be along different axes such as
consecutive failures, temporal success rate, temporal latency, etc.
Outlier detection is a form of passive health checking.
properties:
baseEjectionTime:
description: |-
The base time that a host is ejected for. The real time is equal to
the base time multiplied by the number of times the host has been
ejected.
type: string
detectors:
description: Contains configuration for supported outlier
detectors
properties:
failurePercentage:
description: |-
Failure Percentage based outlier detection functions similarly to success
rate detection, in that it relies on success rate data from each host in
a cluster. However, rather than compare those values to the mean success
rate of the cluster as a whole, they are compared to a flat
user-configured threshold. This threshold is configured via the
outlierDetection.failurePercentageThreshold field.
The other configuration fields for failure percentage based detection are
similar to the fields for success rate detection. As with success rate
detection, detection will not be performed for a host if its request
volume over the aggregation interval is less than the
outlierDetection.detectors.failurePercentage.requestVolume value.
Detection also will not be performed for a cluster if the number of hosts
with the minimum required request volume in an interval is less than the
outlierDetection.detectors.failurePercentage.minimumHosts value.
properties:
minimumHosts:
description: |-
The minimum number of hosts in a cluster in order to perform failure
percentage-based ejection. If the total number of hosts in the cluster is
less than this value, failure percentage-based ejection will not be
performed.
format: int32
type: integer
requestVolume:
description: |-
The minimum number of total requests that must be collected in one
interval (as defined by the interval duration above) to perform failure
percentage-based ejection for this host. If the volume is lower than this
setting, failure percentage-based ejection will not be performed for this
host.
format: int32
type: integer
threshold:
description: |-
The failure percentage to use when determining failure percentage-based
outlier detection. If the failure percentage of a given host is greater
than or equal to this value, it will be ejected.
format: int32
type: integer
type: object
gatewayFailures:
description: |-
In the default mode (outlierDetection.splitExternalLocalOriginErrors is
false) this detection type takes into account a subset of 5xx errors,
called "gateway errors" (502, 503 or 504 status code) and local origin
failures, such as timeout, TCP reset etc.
In split mode (outlierDetection.splitExternalLocalOriginErrors is true)
this detection type takes into account a subset of 5xx errors, called
"gateway errors" (502, 503 or 504 status code) and is supported only by
the http router.
properties:
consecutive:
description: |-
The number of consecutive gateway failures (502, 503, 504 status codes)
before a consecutive gateway failure ejection occurs.
format: int32
type: integer
type: object
localOriginFailures:
description: |-
This detection type is enabled only when
outlierDetection.splitExternalLocalOriginErrors is true and takes into
account only locally originated errors (timeout, reset, etc).
If Envoy repeatedly cannot connect to an upstream host or communication
with the upstream host is repeatedly interrupted, it will be ejected.
Various locally originated problems are detected: timeout, TCP reset,
ICMP errors, etc. This detection type is supported by http router and
tcp proxy.
properties:
consecutive:
description: |-
The number of consecutive locally originated failures before ejection
occurs. Parameter takes effect only when splitExternalAndLocalErrors
is set to true.
format: int32
type: integer
type: object
successRate:
description: |-
Success Rate based outlier detection aggregates success rate data from
every host in a cluster. Then at given intervals ejects hosts based on
statistical outlier detection. Success Rate outlier detection will not be
calculated for a host if its request volume over the aggregation interval
is less than the outlierDetection.detectors.successRate.requestVolume
value.
Moreover, detection will not be performed for a cluster if the number of
hosts with the minimum required request volume in an interval is less
than the outlierDetection.detectors.successRate.minimumHosts value.
In the default configuration mode
(outlierDetection.splitExternalLocalOriginErrors is false) this detection
type takes into account all types of errors: locally and externally
originated.
In split mode (outlierDetection.splitExternalLocalOriginErrors is true),
locally originated errors and externally originated (transaction) errors
are counted and treated separately.
properties:
minimumHosts:
description: |-
The number of hosts in a cluster that must have enough request volume to
detect success rate outliers. If the number of hosts is less than this
setting, outlier detection via success rate statistics is not performed
for any host in the cluster.
format: int32
type: integer
requestVolume:
description: |-
The minimum number of total requests that must be collected in one
interval (as defined by the interval duration configured in
outlierDetection section) to include this host in success rate based
outlier detection. If the volume is lower than this setting, outlier
detection via success rate statistics is not performed for that host.
format: int32
type: integer
standardDeviationFactor:
anyOf:
- type: integer
- type: string
description: |-
This factor is used to determine the ejection threshold for success rate
outlier ejection. The ejection threshold is the difference between
the mean success rate, and the product of this factor and the standard
deviation of the mean success rate: mean - (standard_deviation *
success_rate_standard_deviation_factor).
Either int or decimal represented as string.
x-kubernetes-int-or-string: true
type: object
totalFailures:
description: |-
In the default mode (outlierDetection.splitExternalAndLocalErrors is
false) this detection type takes into account all generated errors:
locally originated and externally originated (transaction) errors.
In split mode (outlierDetection.splitExternalLocalOriginErrors is true)
this detection type takes into account only externally originated
(transaction) errors, ignoring locally originated errors.
If an upstream host is an HTTP-server, only 5xx types of error are taken
into account (see Consecutive Gateway Failure for exceptions).
Properly formatted responses, even when they carry an operational error
(like index not found, access denied) are not taken into account.
properties:
consecutive:
description: |-
The number of consecutive server-side error responses (for HTTP traffic,
5xx responses; for TCP traffic, connection failures; for Redis, failure
to respond PONG; etc.) before a consecutive total failure ejection
occurs.
format: int32
type: integer
type: object
type: object
disabled:
description: When set to true, outlierDetection configuration
won't take any effect
type: boolean
interval:
description: |-
The time interval between ejection analysis sweeps. This can result in
both new ejections and hosts being returned to service.
type: string
maxEjectionPercent:
description: |-
The maximum % of an upstream cluster that can be ejected due to outlier
detection. Defaults to 10% but will eject at least one host regardless of
the value.
format: int32
type: integer
splitExternalAndLocalErrors:
description: |-
Determines whether to distinguish local origin failures from external
errors. If set to true the following configuration parameters are taken
into account: detectors.localOriginFailures.consecutive
type: boolean
type: object
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshes.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: Mesh
listKind: MeshList
plural: meshes
singular: mesh
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma Mesh resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,333 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshexternalservices.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshExternalService
listKind: MeshExternalServiceList
plural: meshexternalservices
singular: meshexternalservice
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: Spec is the specification of the Kuma MeshExternalService
resource.
properties:
endpoints:
description: Endpoints defines a list of destinations to send traffic
to.
items:
properties:
address:
description: Address defines an address to which a user want
to send a request. Is possible to provide `domain`, `ip` and
`unix` sockets.
example: unix:///tmp/example.sock
minLength: 1
type: string
port:
description: Port of the endpoint
maximum: 65535
minimum: 1
type: integer
required:
- address
type: object
type: array
extension:
description: Extension struct for a plugin configuration, in the presence
of an extension `endpoints` and `tls` are not required anymore -
it's up to the extension to validate them independently.
properties:
config:
description: Config freeform configuration for the extension.
x-kubernetes-preserve-unknown-fields: true
type:
description: Type of the extension.
type: string
required:
- config
- type
type: object
match:
description: Match defines traffic that should be routed through the
sidecar.
properties:
port:
description: Port defines a port to which a user does request.
maximum: 65535
minimum: 1
type: integer
protocol:
default: tcp
description: 'Protocol defines a protocol of the communication.
Possible values: `tcp`, `grpc`, `http`, `http2`.'
enum:
- tcp
- grpc
- http
- http2
type: string
type:
default: HostnameGenerator
description: Type of the match, only `HostnameGenerator` is available
at the moment.
enum:
- HostnameGenerator
type: string
required:
- port
type: object
tls:
description: Tls provides a TLS configuration when proxy is resposible
for a TLS origination
properties:
allowRenegotiation:
default: false
description: |-
AllowRenegotiation defines if TLS sessions will allow renegotiation.
Setting this to true is not recommended for security reasons.
type: boolean
enabled:
default: false
description: Enabled defines if proxy should originate TLS.
type: boolean
verification:
description: Verification section for providing TLS verification
details.
properties:
caCert:
description: CaCert defines a certificate of CA.
properties:
inline:
description: Data source is inline bytes.
format: byte
type: string
inlineString:
description: Data source is inline string`
type: string
secret:
description: Data source is a secret with given Secret
key.
type: string
type: object
clientCert:
description: ClientCert defines a certificate of a client.
properties:
inline:
description: Data source is inline bytes.
format: byte
type: string
inlineString:
description: Data source is inline string`
type: string
secret:
description: Data source is a secret with given Secret
key.
type: string
type: object
clientKey:
description: ClientKey defines a client private key.
properties:
inline:
description: Data source is inline bytes.
format: byte
type: string
inlineString:
description: Data source is inline string`
type: string
secret:
description: Data source is a secret with given Secret
key.
type: string
type: object
mode:
default: Secured
description: Mode defines if proxy should skip verification,
one of `SkipSAN`, `SkipCA`, `Secured`, `SkipAll`. Default
`Secured`.
enum:
- SkipSAN
- SkipCA
- Secured
- SkipAll
type: string
serverName:
description: ServerName overrides the default Server Name
Indicator set by Kuma.
type: string
subjectAltNames:
description: SubjectAltNames list of names to verify in the
certificate.
items:
properties:
type:
default: Exact
description: 'Type specifies matching type, one of `Exact`,
`Prefix`. Default: `Exact`'
enum:
- Exact
- Prefix
type: string
value:
description: Value to match.
type: string
required:
- value
type: object
type: array
type: object
version:
description: Version section for providing version specification.
properties:
max:
default: TLSAuto
description: Max defines maximum supported version. One of
`TLSAuto`, `TLS10`, `TLS11`, `TLS12`, `TLS13`.
enum:
- TLSAuto
- TLS10
- TLS11
- TLS12
- TLS13
type: string
min:
default: TLSAuto
description: Min defines minimum supported version. One of
`TLSAuto`, `TLS10`, `TLS11`, `TLS12`, `TLS13`.
enum:
- TLSAuto
- TLS10
- TLS11
- TLS12
- TLS13
type: string
type: object
type: object
required:
- match
type: object
status:
description: Status is the current status of the Kuma MeshExternalService
resource.
properties:
addresses:
description: Addresses section for generated domains
items:
properties:
hostname:
type: string
hostnameGeneratorRef:
properties:
coreName:
type: string
required:
- coreName
type: object
origin:
type: string
type: object
type: array
hostnameGenerators:
items:
properties:
conditions:
description: Conditions is an array of hostname generator conditions.
items:
properties:
message:
description: |-
message is a human readable message indicating details about the transition.
This may be an empty string.
maxLength: 32768
type: string
reason:
description: |-
reason contains a programmatic identifier indicating the reason for the condition's last transition.
Producers of specific condition types may define expected values and meanings for this field,
and whether the values are considered a guaranteed API.
The value should be a CamelCase string.
This field may not be empty.
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
description: status of the condition, one of True, False,
Unknown.
enum:
- "True"
- "False"
- Unknown
type: string
type:
description: |-
type of condition in CamelCase or in foo.example.com/CamelCase.
---
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
useful (see .node.status.conditions), the ability to deconflict is important.
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- message
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
hostnameGeneratorRef:
properties:
coreName:
type: string
required:
- coreName
type: object
required:
- hostnameGeneratorRef
type: object
type: array
vip:
description: Vip section for allocated IP
properties:
ip:
description: Value allocated IP for a provided domain with `HostnameGenerator`
type in a match section.
type: string
type: object
type: object
type: object
served: true
storage: true

View File

@ -0,0 +1,419 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshfaultinjections.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshFaultInjection
listKind: MeshFaultInjectionList
plural: meshfaultinjections
singular: meshfaultinjection
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshFaultInjection
resource.
properties:
from:
description: From list makes a match between clients and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations referenced in
'targetRef'
properties:
http:
description: Http allows to define list of Http faults between
dataplanes.
items:
description: FaultInjection defines the configuration
of faults between dataplanes.
properties:
abort:
description: |-
Abort defines a configuration of not delivering requests to destination
service and replacing the responses from destination dataplane by
predefined status code
properties:
httpStatus:
description: HTTP status code which will be returned
to source side
format: int32
type: integer
percentage:
anyOf:
- type: integer
- type: string
description: |-
Percentage of requests on which abort will be injected, has to be
either int or decimal represented as string.
x-kubernetes-int-or-string: true
required:
- httpStatus
- percentage
type: object
delay:
description: Delay defines configuration of delaying
a response from a destination
properties:
percentage:
anyOf:
- type: integer
- type: string
description: |-
Percentage of requests on which delay will be injected, has to be
either int or decimal represented as string.
x-kubernetes-int-or-string: true
value:
description: The duration during which the response
will be delayed
type: string
required:
- percentage
- value
type: object
responseBandwidth:
description: |-
ResponseBandwidth defines a configuration to limit the speed of
responding to the requests
properties:
limit:
description: |-
Limit is represented by value measure in Gbps, Mbps, kbps, e.g.
10kbps
type: string
percentage:
anyOf:
- type: integer
- type: string
description: |-
Percentage of requests on which response bandwidth limit will be
either int or decimal represented as string.
x-kubernetes-int-or-string: true
required:
- limit
- percentage
type: object
type: object
type: array
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: To list makes a match between clients and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations referenced in
'targetRef'
properties:
http:
description: Http allows to define list of Http faults between
dataplanes.
items:
description: FaultInjection defines the configuration
of faults between dataplanes.
properties:
abort:
description: |-
Abort defines a configuration of not delivering requests to destination
service and replacing the responses from destination dataplane by
predefined status code
properties:
httpStatus:
description: HTTP status code which will be returned
to source side
format: int32
type: integer
percentage:
anyOf:
- type: integer
- type: string
description: |-
Percentage of requests on which abort will be injected, has to be
either int or decimal represented as string.
x-kubernetes-int-or-string: true
required:
- httpStatus
- percentage
type: object
delay:
description: Delay defines configuration of delaying
a response from a destination
properties:
percentage:
anyOf:
- type: integer
- type: string
description: |-
Percentage of requests on which delay will be injected, has to be
either int or decimal represented as string.
x-kubernetes-int-or-string: true
value:
description: The duration during which the response
will be delayed
type: string
required:
- percentage
- value
type: object
responseBandwidth:
description: |-
ResponseBandwidth defines a configuration to limit the speed of
responding to the requests
properties:
limit:
description: |-
Limit is represented by value measure in Gbps, Mbps, kbps, e.g.
10kbps
type: string
percentage:
anyOf:
- type: integer
- type: string
description: |-
Percentage of requests on which response bandwidth limit will be
either int or decimal represented as string.
x-kubernetes-int-or-string: true
required:
- limit
- percentage
type: object
type: object
type: array
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,364 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshgatewayinstances.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshGatewayInstance
listKind: MeshGatewayInstanceList
plural: meshgatewayinstances
singular: meshgatewayinstance
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: |-
MeshGatewayInstance represents a managed instance of a dataplane proxy for a Kuma
Gateway.
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: MeshGatewayInstanceSpec specifies the options available for
a GatewayDataplane.
properties:
podTemplate:
description: PodTemplate configures the Pod owned by this config.
properties:
metadata:
description: Metadata holds metadata configuration for a Service.
properties:
annotations:
additionalProperties:
type: string
description: Annotations holds annotations to be set on an
object.
type: object
labels:
additionalProperties:
type: string
description: Labels holds labels to be set on an objects.
type: object
type: object
spec:
description: Spec holds some customizable fields of a Pod.
properties:
container:
description: Container corresponds to PodSpec.Container
properties:
securityContext:
description: ContainerSecurityContext corresponds to PodSpec.Container.SecurityContext
properties:
readOnlyRootFilesystem:
description: ReadOnlyRootFilesystem corresponds to
PodSpec.Container.SecurityContext.ReadOnlyRootFilesystem
type: boolean
type: object
type: object
securityContext:
description: PodSecurityContext corresponds to PodSpec.SecurityContext
properties:
fsGroup:
description: FSGroup corresponds to PodSpec.SecurityContext.FSGroup
format: int64
type: integer
type: object
serviceAccountName:
description: ServiceAccountName corresponds to PodSpec.ServiceAccountName.
type: string
type: object
type: object
replicas:
default: 1
description: |-
Replicas is the number of dataplane proxy replicas to create. For
now this is a fixed number, but in the future it could be
automatically scaled based on metrics.
format: int32
minimum: 1
type: integer
resources:
description: |-
Resources specifies the compute resources for the proxy container.
The default can be set in the control plane config.
properties:
claims:
description: |-
Claims lists the names of resources, defined in spec.resourceClaims,
that are used by this container.
This is an alpha field and requires enabling the
DynamicResourceAllocation feature gate.
This field is immutable. It can only be set for containers.
items:
description: ResourceClaim references one entry in PodSpec.ResourceClaims.
properties:
name:
description: |-
Name must match the name of one entry in pod.spec.resourceClaims of
the Pod where this field is used. It makes that resource available
inside a container.
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Limits describes the maximum amount of compute resources allowed.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
requests:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Requests describes the minimum amount of compute resources required.
If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
otherwise to an implementation-defined value. Requests cannot exceed Limits.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
type: object
serviceTemplate:
description: ServiceTemplate configures the Service owned by this
config.
properties:
metadata:
description: Metadata holds metadata configuration for a Service.
properties:
annotations:
additionalProperties:
type: string
description: Annotations holds annotations to be set on an
object.
type: object
labels:
additionalProperties:
type: string
description: Labels holds labels to be set on an objects.
type: object
type: object
spec:
description: Spec holds some customizable fields of a Service.
properties:
loadBalancerIP:
description: LoadBalancerIP corresponds to ServiceSpec.LoadBalancerIP.
type: string
type: object
type: object
serviceType:
default: LoadBalancer
description: |-
ServiceType specifies the type of managed Service that will be
created to expose the dataplane proxies to traffic from outside
the cluster. The ports to expose will be taken from the matching Gateway
resource. If there is no matching Gateway, the managed Service will
be deleted.
enum:
- LoadBalancer
- ClusterIP
- NodePort
type: string
tags:
additionalProperties:
type: string
description: |-
Tags specifies the Kuma tags that are propagated to the managed
dataplane proxies. These tags should include exactly one
`kuma.io/service` tag, and should match exactly one Gateway
resource.
type: object
type: object
status:
description: |-
MeshGatewayInstanceStatus holds information about the status of the gateway
instance.
properties:
conditions:
description: Conditions is an array of gateway instance conditions.
items:
description: "Condition contains details for one aspect of the current
state of this API Resource.\n---\nThis struct is intended for
direct use as an array at the field path .status.conditions. For
example,\n\n\n\ttype FooStatus struct{\n\t // Represents the
observations of a foo's current state.\n\t // Known .status.conditions.type
are: \"Available\", \"Progressing\", and \"Degraded\"\n\t //
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t
\ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\"
patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
\ // other fields\n\t}"
properties:
lastTransitionTime:
description: |-
lastTransitionTime is the last time the condition transitioned from one status to another.
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
format: date-time
type: string
message:
description: |-
message is a human readable message indicating details about the transition.
This may be an empty string.
maxLength: 32768
type: string
observedGeneration:
description: |-
observedGeneration represents the .metadata.generation that the condition was set based upon.
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
with respect to the current state of the instance.
format: int64
minimum: 0
type: integer
reason:
description: |-
reason contains a programmatic identifier indicating the reason for the condition's last transition.
Producers of specific condition types may define expected values and meanings for this field,
and whether the values are considered a guaranteed API.
The value should be a CamelCase string.
This field may not be empty.
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
description: status of the condition, one of True, False, Unknown.
enum:
- "True"
- "False"
- Unknown
type: string
type:
description: |-
type of condition in CamelCase or in foo.example.com/CamelCase.
---
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
useful (see .node.status.conditions), the ability to deconflict is important.
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- lastTransitionTime
- message
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
loadBalancer:
description: |-
LoadBalancer contains the current status of the load-balancer,
if one is present.
properties:
ingress:
description: |-
Ingress is a list containing ingress points for the load-balancer.
Traffic intended for the service should be sent to these ingress points.
items:
description: |-
LoadBalancerIngress represents the status of a load-balancer ingress point:
traffic intended for the service should be sent to an ingress point.
properties:
hostname:
description: |-
Hostname is set for load-balancer ingress points that are DNS based
(typically AWS load-balancers)
type: string
ip:
description: |-
IP is set for load-balancer ingress points that are IP based
(typically GCE or OpenStack load-balancers)
type: string
ipMode:
description: |-
IPMode specifies how the load-balancer IP behaves, and may only be specified when the ip field is specified.
Setting this to "VIP" indicates that traffic is delivered to the node with
the destination set to the load-balancer's IP and port.
Setting this to "Proxy" indicates that traffic is delivered to the node or pod with
the destination set to the node's IP and node port or the pod's IP and port.
Service implementations may use this information to adjust traffic routing.
type: string
ports:
description: |-
Ports is a list of records of service ports
If used, every port defined in the service should have an entry in it
items:
properties:
error:
description: |-
Error is to record the problem with the service port
The format of the error shall comply with the following rules:
- built-in error values shall be specified in this file and those shall use
CamelCase names
- cloud provider specific error values must have names that comply with the
format foo.example.com/CamelCase.
---
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
port:
description: Port is the port number of the service
port of which status is recorded here
format: int32
type: integer
protocol:
default: TCP
description: |-
Protocol is the protocol of the service port of which status is recorded here
The supported values are: "TCP", "UDP", "SCTP"
type: string
required:
- port
- protocol
type: object
type: array
x-kubernetes-list-type: atomic
type: object
type: array
type: object
type: object
type: object
served: true
storage: true
subresources:
status: {}

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshgatewayroutes.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshGatewayRoute
listKind: MeshGatewayRouteList
plural: meshgatewayroutes
singular: meshgatewayroute
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma MeshGatewayRoute resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshgateways.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshGateway
listKind: MeshGatewayList
plural: meshgateways
singular: meshgateway
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma MeshGateway resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,382 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshhealthchecks.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshHealthCheck
listKind: MeshHealthCheckList
plural: meshhealthchecks
singular: meshhealthcheck
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshHealthCheck resource.
properties:
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: To list makes a match between the consumed services and
corresponding configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations referenced in
'targetRef'
properties:
alwaysLogHealthCheckFailures:
description: |-
If set to true, health check failure events will always be logged. If set
to false, only the initial health check failure event will be logged. The
default value is false.
type: boolean
eventLogPath:
description: |-
Specifies the path to the file where Envoy can log health check events.
If empty, no event log will be written.
type: string
failTrafficOnPanic:
description: |-
If set to true, Envoy will not consider any hosts when the cluster is in
'panic mode'. Instead, the cluster will fail all requests as if all hosts
are unhealthy. This can help avoid potentially overwhelming a failing
service.
type: boolean
grpc:
description: |-
GrpcHealthCheck defines gRPC configuration which will instruct the service
the health check will be made for is a gRPC service.
properties:
authority:
description: |-
The value of the :authority header in the gRPC health check request,
by default name of the cluster this health check is associated with
type: string
disabled:
description: If true the GrpcHealthCheck is disabled
type: boolean
serviceName:
description: Service name parameter which will be sent
to gRPC service
type: string
type: object
healthyPanicThreshold:
anyOf:
- type: integer
- type: string
description: |-
Allows to configure panic threshold for Envoy cluster. If not specified,
the default is 50%. To disable panic mode, set to 0%.
Either int or decimal represented as string.
x-kubernetes-int-or-string: true
healthyThreshold:
default: 1
description: Number of consecutive healthy checks before
considering a host healthy.
format: int32
type: integer
http:
description: |-
HttpHealthCheck defines HTTP configuration which will instruct the service
the health check will be made for is an HTTP service.
properties:
disabled:
description: If true the HttpHealthCheck is disabled
type: boolean
expectedStatuses:
description: List of HTTP response statuses which are
considered healthy
items:
format: int32
type: integer
type: array
path:
default: /
description: |-
The HTTP path which will be requested during the health check
(ie. /health)
type: string
requestHeadersToAdd:
description: |-
The list of HTTP headers which should be added to each health check
request
properties:
add:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
set:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
type: object
type: object
initialJitter:
description: |-
If specified, Envoy will start health checking after a random time in
ms between 0 and initialJitter. This only applies to the first health
check.
type: string
interval:
default: 1m
description: Interval between consecutive health checks.
type: string
intervalJitter:
description: |-
If specified, during every interval Envoy will add IntervalJitter to the
wait time.
type: string
intervalJitterPercent:
description: |-
If specified, during every interval Envoy will add IntervalJitter *
IntervalJitterPercent / 100 to the wait time. If IntervalJitter and
IntervalJitterPercent are both set, both of them will be used to
increase the wait time.
format: int32
type: integer
noTrafficInterval:
description: |-
The "no traffic interval" is a special health check interval that is used
when a cluster has never had traffic routed to it. This lower interval
allows cluster information to be kept up to date, without sending a
potentially large amount of active health checking traffic for no reason.
Once a cluster has been used for traffic routing, Envoy will shift back
to using the standard health check interval that is defined. Note that
this interval takes precedence over any other. The default value for "no
traffic interval" is 60 seconds.
type: string
reuseConnection:
description: Reuse health check connection between health
checks. Default is true.
type: boolean
tcp:
description: |-
TcpHealthCheck defines configuration for specifying bytes to send and
expected response during the health check
properties:
disabled:
description: If true the TcpHealthCheck is disabled
type: boolean
receive:
description: |-
List of Base64 encoded blocks of strings expected as a response. When checking the response,
"fuzzy" matching is performed such that each block must be found, and
in the order specified, but not necessarily contiguous.
If not provided or empty, checks will be performed as "connect only" and be marked as successful when TCP connection is successfully established.
items:
type: string
type: array
send:
description: Base64 encoded content of the message which
will be sent during the health check to the target
type: string
type: object
timeout:
default: 15s
description: Maximum time to wait for a health check response.
type: string
unhealthyThreshold:
default: 5
description: |-
Number of consecutive unhealthy checks before considering a host
unhealthy.
format: int32
type: integer
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,664 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshhttproutes.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshHTTPRoute
listKind: MeshHTTPRouteList
plural: meshhttproutes
singular: meshhttproute
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshHTTPRoute resource.
properties:
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: To matches destination services of requests and holds
configuration.
items:
properties:
hostnames:
description: |-
Hostnames is only valid when targeting MeshGateway and limits the
effects of the rules to requests to this hostname.
Given hostnames must intersect with the hostname of the listeners the
route attaches to.
items:
type: string
type: array
rules:
description: |-
Rules contains the routing rules applies to a combination of top-level
targetRef and the targetRef in this entry.
items:
properties:
default:
description: |-
Default holds routing rules that can be merged with rules from other
policies.
properties:
backendRefs:
items:
description: BackendRef defines where to forward
traffic.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use
to identify cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
port:
description: Port is only supported when this
ref refers to a real MeshService object
format: int32
type: integer
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
weight:
default: 1
minimum: 0
type: integer
type: object
type: array
filters:
items:
properties:
requestHeaderModifier:
description: |-
Only one action is supported per header name.
Configuration to set or add multiple values for a header must use RFC 7230
header value formatting, separating each value with a comma.
properties:
add:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
remove:
items:
type: string
maxItems: 16
type: array
set:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
type: object
requestMirror:
properties:
backendRef:
description: TODO forbid weight
properties:
kind:
description: Kind of the referenced
resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future
use to identify cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
port:
description: Port is only supported
when this ref refers to a real MeshService
object
format: int32
type: integer
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
weight:
default: 1
minimum: 0
type: integer
type: object
percentage:
anyOf:
- type: integer
- type: string
description: |-
Percentage of requests to mirror. If not specified, all requests
to the target cluster will be mirrored.
x-kubernetes-int-or-string: true
required:
- backendRef
type: object
requestRedirect:
properties:
hostname:
description: |-
PreciseHostname is the fully qualified domain name of a network host. This
matches the RFC 1123 definition of a hostname with 1 notable exception that
numeric IP addresses are not allowed.
Note that as per RFC1035 and RFC1123, a *label* must consist of lower case
alphanumeric characters or '-', and must start and end with an alphanumeric
character. No other punctuation is allowed.
maxLength: 253
minLength: 1
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
type: string
path:
description: |-
Path defines parameters used to modify the path of the incoming request.
The modified path is then used to construct the location header.
When empty, the request path is used as-is.
properties:
replaceFullPath:
type: string
replacePrefixMatch:
type: string
type:
enum:
- ReplaceFullPath
- ReplacePrefixMatch
type: string
required:
- type
type: object
port:
description: |-
Port is the port to be used in the value of the `Location`
header in the response.
When empty, port (if specified) of the request is used.
format: int32
maximum: 65535
minimum: 1
type: integer
scheme:
enum:
- http
- https
type: string
statusCode:
default: 302
description: StatusCode is the HTTP status
code to be used in response.
enum:
- 301
- 302
- 303
- 307
- 308
type: integer
type: object
responseHeaderModifier:
description: |-
Only one action is supported per header name.
Configuration to set or add multiple values for a header must use RFC 7230
header value formatting, separating each value with a comma.
properties:
add:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
remove:
items:
type: string
maxItems: 16
type: array
set:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
type: object
type:
enum:
- RequestHeaderModifier
- ResponseHeaderModifier
- RequestRedirect
- URLRewrite
- RequestMirror
type: string
urlRewrite:
properties:
hostToBackendHostname:
description: |-
HostToBackendHostname rewrites the hostname to the hostname of the
upstream host. This option is only available when targeting MeshGateways.
type: boolean
hostname:
description: Hostname is the value to be
used to replace the host header value
during forwarding.
maxLength: 253
minLength: 1
pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
type: string
path:
description: Path defines a path rewrite.
properties:
replaceFullPath:
type: string
replacePrefixMatch:
type: string
type:
enum:
- ReplaceFullPath
- ReplacePrefixMatch
type: string
required:
- type
type: object
type: object
required:
- type
type: object
type: array
type: object
matches:
description: |-
Matches describes how to match HTTP requests this rule should be applied
to.
items:
properties:
headers:
items:
description: |-
HeaderMatch describes how to select an HTTP route by matching HTTP request
headers.
properties:
name:
description: |-
Name is the name of the HTTP Header to be matched. Name MUST be lower case
as they will be handled with case insensitivity (See https://tools.ietf.org/html/rfc7230#section-3.2).
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
type:
default: Exact
description: Type specifies how to match against
the value of the header.
enum:
- Exact
- Present
- RegularExpression
- Absent
- Prefix
type: string
value:
description: Value is the value of HTTP Header
to be matched.
type: string
required:
- name
type: object
type: array
method:
enum:
- CONNECT
- DELETE
- GET
- HEAD
- OPTIONS
- PATCH
- POST
- PUT
- TRACE
type: string
path:
properties:
type:
enum:
- Exact
- PathPrefix
- RegularExpression
type: string
value:
description: |-
Exact or prefix matches must be an absolute path. A prefix matches only
if separated by a slash or the entire path.
minLength: 1
type: string
required:
- type
- value
type: object
queryParams:
description: |-
QueryParams matches based on HTTP URL query parameters. Multiple matches
are ANDed together such that all listed matches must succeed.
items:
properties:
name:
minLength: 1
type: string
type:
enum:
- Exact
- RegularExpression
type: string
value:
type: string
required:
- name
- type
- value
type: object
type: array
type: object
minItems: 1
type: array
required:
- default
- matches
type: object
type: array
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
request destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
type: object
type: array
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshinsights.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshInsight
listKind: MeshInsightList
plural: meshinsights
singular: meshinsight
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma MeshInsight resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,572 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshloadbalancingstrategies.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshLoadBalancingStrategy
listKind: MeshLoadBalancingStrategyList
plural: meshloadbalancingstrategies
singular: meshloadbalancingstrategy
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshLoadBalancingStrategy
resource.
properties:
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: To list makes a match between the consumed services and
corresponding configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations referenced in
'targetRef'
properties:
loadBalancer:
description: LoadBalancer allows to specify load balancing
algorithm.
properties:
leastRequest:
description: |-
LeastRequest selects N random available hosts as specified in 'choiceCount' (2 by default)
and picks the host which has the fewest active requests
properties:
activeRequestBias:
anyOf:
- type: integer
- type: string
description: |-
ActiveRequestBias refers to dynamic weights applied when hosts have varying load
balancing weights. A higher value here aggressively reduces the weight of endpoints
that are currently handling active requests. In essence, the higher the ActiveRequestBias
value, the more forcefully it reduces the load balancing weight of endpoints that are
actively serving requests.
x-kubernetes-int-or-string: true
choiceCount:
description: |-
ChoiceCount is the number of random healthy hosts from which the host with
the fewest active requests will be chosen. Defaults to 2 so that Envoy performs
two-choice selection if the field is not set.
format: int32
minimum: 2
type: integer
type: object
maglev:
description: |-
Maglev implements consistent hashing to upstream hosts. Maglev can be used as
a drop in replacement for the ring hash load balancer any place in which
consistent hashing is desired.
properties:
hashPolicies:
description: |-
HashPolicies specify a list of request/connection properties that are used to calculate a hash.
These hash policies are executed in the specified order. If a hash policy has the “terminal” attribute
set to true, and there is already a hash generated, the hash is returned immediately,
ignoring the rest of the hash policy list.
items:
properties:
connection:
properties:
sourceIP:
description: Hash on source IP address.
type: boolean
type: object
cookie:
properties:
name:
description: The name of the cookie that
will be used to obtain the hash key.
minLength: 1
type: string
path:
description: The name of the path for
the cookie.
type: string
ttl:
description: If specified, a cookie with
the TTL will be generated if the cookie
is not present.
type: string
required:
- name
type: object
filterState:
properties:
key:
description: |-
The name of the Object in the per-request filterState, which is
an Envoy::Hashable object. If there is no data associated with the key,
or the stored object is not Envoy::Hashable, no hash will be produced.
minLength: 1
type: string
required:
- key
type: object
header:
properties:
name:
description: The name of the request header
that will be used to obtain the hash
key.
minLength: 1
type: string
required:
- name
type: object
queryParameter:
properties:
name:
description: |-
The name of the URL query parameter that will be used to obtain the hash key.
If the parameter is not present, no hash will be produced. Query parameter names
are case-sensitive.
minLength: 1
type: string
required:
- name
type: object
terminal:
description: |-
Terminal is a flag that short-circuits the hash computing. This field provides
a fallback style of configuration: “if a terminal policy doesnt work, fallback
to rest of the policy list”, it saves time when the terminal policy works.
If true, and there is already a hash computed, ignore rest of the list of hash polices.
type: boolean
type:
enum:
- Header
- Cookie
- SourceIP
- QueryParameter
- FilterState
type: string
required:
- type
type: object
type: array
tableSize:
description: |-
The table size for Maglev hashing. Maglev aims for “minimal disruption”
rather than an absolute guarantee. Minimal disruption means that when
the set of upstream hosts change, a connection will likely be sent
to the same upstream as it was before. Increasing the table size reduces
the amount of disruption. The table size must be prime number limited to 5000011.
If it is not specified, the default is 65537.
format: int32
maximum: 5000011
minimum: 1
type: integer
type: object
random:
description: |-
Random selects a random available host. The random load balancer generally
performs better than round-robin if no health checking policy is configured.
Random selection avoids bias towards the host in the set that comes after a failed host.
type: object
ringHash:
description: |-
RingHash implements consistent hashing to upstream hosts. Each host is mapped
onto a circle (the “ring”) by hashing its address; each request is then routed
to a host by hashing some property of the request, and finding the nearest
corresponding host clockwise around the ring.
properties:
hashFunction:
description: |-
HashFunction is a function used to hash hosts onto the ketama ring.
The value defaults to XX_HASH. Available values XX_HASH, MURMUR_HASH_2.
enum:
- XXHash
- MurmurHash2
type: string
hashPolicies:
description: |-
HashPolicies specify a list of request/connection properties that are used to calculate a hash.
These hash policies are executed in the specified order. If a hash policy has the “terminal” attribute
set to true, and there is already a hash generated, the hash is returned immediately,
ignoring the rest of the hash policy list.
items:
properties:
connection:
properties:
sourceIP:
description: Hash on source IP address.
type: boolean
type: object
cookie:
properties:
name:
description: The name of the cookie that
will be used to obtain the hash key.
minLength: 1
type: string
path:
description: The name of the path for
the cookie.
type: string
ttl:
description: If specified, a cookie with
the TTL will be generated if the cookie
is not present.
type: string
required:
- name
type: object
filterState:
properties:
key:
description: |-
The name of the Object in the per-request filterState, which is
an Envoy::Hashable object. If there is no data associated with the key,
or the stored object is not Envoy::Hashable, no hash will be produced.
minLength: 1
type: string
required:
- key
type: object
header:
properties:
name:
description: The name of the request header
that will be used to obtain the hash
key.
minLength: 1
type: string
required:
- name
type: object
queryParameter:
properties:
name:
description: |-
The name of the URL query parameter that will be used to obtain the hash key.
If the parameter is not present, no hash will be produced. Query parameter names
are case-sensitive.
minLength: 1
type: string
required:
- name
type: object
terminal:
description: |-
Terminal is a flag that short-circuits the hash computing. This field provides
a fallback style of configuration: “if a terminal policy doesnt work, fallback
to rest of the policy list”, it saves time when the terminal policy works.
If true, and there is already a hash computed, ignore rest of the list of hash polices.
type: boolean
type:
enum:
- Header
- Cookie
- SourceIP
- QueryParameter
- FilterState
type: string
required:
- type
type: object
type: array
maxRingSize:
description: |-
Maximum hash ring size. Defaults to 8M entries, and limited to 8M entries,
but can be lowered to further constrain resource use.
format: int32
maximum: 8000000
minimum: 1
type: integer
minRingSize:
description: |-
Minimum hash ring size. The larger the ring is (that is,
the more hashes there are for each provided host) the better the request distribution
will reflect the desired weights. Defaults to 1024 entries, and limited to 8M entries.
format: int32
maximum: 8000000
minimum: 1
type: integer
type: object
roundRobin:
description: |-
RoundRobin is a load balancing algorithm that distributes requests
across available upstream hosts in round-robin order.
type: object
type:
enum:
- RoundRobin
- LeastRequest
- RingHash
- Random
- Maglev
type: string
required:
- type
type: object
localityAwareness:
description: LocalityAwareness contains configuration for
locality aware load balancing.
properties:
crossZone:
description: |-
CrossZone defines locality aware load balancing priorities when dataplane proxies inside local zone
are unavailable
properties:
failover:
description: Failover defines list of load balancing
rules in order of priority
items:
properties:
from:
description: From defines the list of zones
to which the rule applies
properties:
zones:
items:
type: string
type: array
required:
- zones
type: object
to:
description: To defines to which zones the
traffic should be load balanced
properties:
type:
description: Type defines how target zones
will be picked from available zones
enum:
- None
- Only
- Any
- AnyExcept
type: string
zones:
items:
type: string
type: array
required:
- type
type: object
required:
- to
type: object
type: array
failoverThreshold:
description: |-
FailoverThreshold defines the percentage of live destination dataplane proxies below which load balancing to the
next priority starts.
Example: If you configure failoverThreshold to 70, and you have deployed 10 destination dataplane proxies.
Load balancing to next priority will start when number of live destination dataplane proxies drops below 7.
Default 50
properties:
percentage:
anyOf:
- type: integer
- type: string
x-kubernetes-int-or-string: true
required:
- percentage
type: object
type: object
disabled:
description: |-
Disabled allows to disable locality-aware load balancing.
When disabled requests are distributed across all endpoints regardless of locality.
type: boolean
localZone:
description: LocalZone defines locality aware load balancing
priorities between dataplane proxies inside a zone
properties:
affinityTags:
description: AffinityTags list of tags for local
zone load balancing.
items:
properties:
key:
description: Key defines tag for which affinity
is configured
type: string
weight:
description: |-
Weight of the tag used for load balancing. The bigger the weight the bigger the priority.
Percentage of local traffic load balanced to tag is computed by dividing weight by sum of weights from all tags.
For example with two affinity tags first with weight 80 and second with weight 20,
then 80% of traffic will be redirected to the first tag, and 20% of traffic will be redirected to second one.
Setting weights is not mandatory. When weights are not set control plane will compute default weight based on list order.
Default: If you do not specify weight we will adjust them so that 90% traffic goes to first tag, 9% to next, and 1% to third and so on.
format: int32
type: integer
required:
- key
type: object
type: array
type: object
type: object
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,293 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshmetrics.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshMetric
listKind: MeshMetricList
plural: meshmetrics
singular: meshmetric
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshMetric resource.
properties:
default:
description: MeshMetric configuration.
properties:
applications:
description: Applications is a list of application that Dataplane
Proxy will scrape
items:
properties:
address:
description: Address on which an application listens.
type: string
name:
description: Name of the application to scrape
type: string
path:
default: /metrics/prometheus
description: Path on which an application expose HTTP endpoint
with metrics.
type: string
port:
description: Port on which an application expose HTTP endpoint
with metrics.
format: int32
type: integer
required:
- port
type: object
type: array
backends:
description: Backends list that will be used to collect metrics.
items:
properties:
openTelemetry:
description: OpenTelemetry backend configuration
properties:
endpoint:
description: Endpoint for OpenTelemetry collector
type: string
refreshInterval:
description: RefreshInterval defines how frequent metrics
should be pushed to collector
type: string
required:
- endpoint
type: object
prometheus:
description: Prometheus backend configuration.
properties:
clientId:
description: ClientId of the Prometheus backend. Needed
when using MADS for DP discovery.
type: string
path:
default: /metrics
description: Path on which a dataplane should expose
HTTP endpoint with Prometheus metrics.
type: string
port:
default: 5670
description: Port on which a dataplane should expose
HTTP endpoint with Prometheus metrics.
format: int32
type: integer
tls:
description: Configuration of TLS for prometheus listener.
properties:
mode:
default: Disabled
description: Configuration of TLS for Prometheus
listener.
enum:
- Disabled
- ProvidedTLS
- ActiveMTLSBackend
type: string
required:
- mode
type: object
required:
- path
- port
type: object
type:
description: Type of the backend that will be used to collect
metrics. At the moment only Prometheus backend is available.
enum:
- Prometheus
- OpenTelemetry
type: string
required:
- type
type: object
type: array
sidecar:
description: Sidecar metrics collection configuration
properties:
includeUnused:
default: false
description: |-
IncludeUnused if false will scrape only metrics that has been by sidecar (counters incremented
at least once, gauges changed at least once, and histograms added to at
least once). If true will scrape all metrics (even the ones with zeros).
type: boolean
profiles:
description: Profiles allows to customize which metrics are
published.
properties:
appendProfiles:
description: AppendProfiles allows to combine the metrics
from multiple predefined profiles.
items:
properties:
name:
description: 'Name of the predefined profile, one
of: all, basic, none'
enum:
- All
- Basic
- None
type: string
required:
- name
type: object
type: array
exclude:
description: |-
Exclude makes it possible to exclude groups of metrics from a resulting profile.
Exclude is subordinate to Include.
items:
properties:
match:
description: Match is the value used to match using
particular Type
type: string
type:
description: 'Type defined the type of selector,
one of: prefix, regex, exact'
enum:
- Prefix
- Regex
- Exact
- Contains
type: string
required:
- match
- type
type: object
type: array
include:
description: |-
Include makes it possible to include additional metrics in a selected profiles.
Include takes precedence over Exclude.
items:
properties:
match:
description: Match is the value used to match using
particular Type
type: string
type:
description: 'Type defined the type of selector,
one of: prefix, regex, exact'
enum:
- Prefix
- Regex
- Exact
- Contains
type: string
required:
- match
- type
type: object
type: array
type: object
type: object
type: object
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined in-place.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,167 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshpassthroughs.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshPassthrough
listKind: MeshPassthroughList
plural: meshpassthroughs
singular: meshpassthrough
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshPassthrough resource.
properties:
default:
description: MeshPassthrough configuration.
properties:
appendMatch:
description: AppendMatch is a list of destinations that should
be allowed through the sidecar.
items:
properties:
port:
description: Port defines the port to which a user makes
a request.
type: integer
protocol:
default: tcp
description: 'Protocol defines the communication protocol.
Possible values: `tcp`, `tls`, `grpc`, `http`, `http2`.'
enum:
- tcp
- tls
- grpc
- http
- http2
type: string
type:
description: Type of the match, one of `Domain`, `IP` or
`CIDR` is available.
enum:
- Domain
- IP
- CIDR
type: string
value:
description: Value for the specified Type.
type: string
required:
- port
type: object
type: array
passthroughMode:
default: None
description: |-
Defines the passthrough behavior. Possible values: `All`, `None`, `Matched`
When `All` or `None` `appendMatch` has no effect.
enum:
- All
- Matched
- None
type: string
type: object
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined in-place.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,560 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshproxypatches.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshProxyPatch
listKind: MeshProxyPatchList
plural: meshproxypatches
singular: meshproxypatch
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshProxyPatch resource.
properties:
default:
description: |-
Default is a configuration specific to the group of destinations
referenced in 'targetRef'.
properties:
appendModifications:
description: AppendModifications is a list of modifications applied
on the selected proxy.
items:
properties:
cluster:
description: Cluster is a modification of Envoy's Cluster
resource.
properties:
jsonPatches:
description: |-
JsonPatches specifies list of jsonpatches to apply to on Envoy's Cluster
resource
items:
description: JsonPatchBlock is one json patch operation
block.
properties:
from:
description: From is a jsonpatch from string,
used by move and copy operations.
type: string
op:
description: Op is a jsonpatch operation string.
enum:
- add
- remove
- replace
- move
- copy
type: string
path:
description: Path is a jsonpatch path string.
type: string
value:
description: Value must be a valid json value
used by replace and add operations.
x-kubernetes-preserve-unknown-fields: true
required:
- op
- path
type: object
type: array
match:
description: Match is a set of conditions that have
to be matched for modification operation to happen.
properties:
name:
description: Name of the cluster to match.
type: string
origin:
description: |-
Origin is the name of the component or plugin that generated the resource.
Here is the list of well-known origins:
inbound - resources generated for handling incoming traffic.
outbound - resources generated for handling outgoing traffic.
transparent - resources generated for transparent proxy functionality.
prometheus - resources generated when Prometheus metrics are enabled.
direct-access - resources generated for Direct Access functionality.
ingress - resources generated for Zone Ingress.
egress - resources generated for Zone Egress.
gateway - resources generated for MeshGateway.
The list is not complete, because policy plugins can introduce new resources.
For example MeshTrace plugin can create Cluster with "mesh-trace" origin.
type: string
type: object
operation:
description: Operation to execute on matched cluster.
enum:
- Add
- Remove
- Patch
type: string
value:
description: Value of xDS resource in YAML format to
add or patch.
type: string
required:
- operation
type: object
httpFilter:
description: |-
HTTPFilter is a modification of Envoy HTTP Filter
available in HTTP Connection Manager in a Listener resource.
properties:
jsonPatches:
description: |-
JsonPatches specifies list of jsonpatches to apply to on Envoy's
HTTP Filter available in HTTP Connection Manager in a Listener resource.
items:
description: JsonPatchBlock is one json patch operation
block.
properties:
from:
description: From is a jsonpatch from string,
used by move and copy operations.
type: string
op:
description: Op is a jsonpatch operation string.
enum:
- add
- remove
- replace
- move
- copy
type: string
path:
description: Path is a jsonpatch path string.
type: string
value:
description: Value must be a valid json value
used by replace and add operations.
x-kubernetes-preserve-unknown-fields: true
required:
- op
- path
type: object
type: array
match:
description: Match is a set of conditions that have
to be matched for modification operation to happen.
properties:
listenerName:
description: Name of the listener to match.
type: string
listenerTags:
additionalProperties:
type: string
description: Listener tags available in Listener#Metadata#FilterMetadata[io.kuma.tags]
type: object
name:
description: Name of the HTTP filter. For example
"envoy.filters.http.local_ratelimit"
type: string
origin:
description: |-
Origin is the name of the component or plugin that generated the resource.
Here is the list of well-known origins:
inbound - resources generated for handling incoming traffic.
outbound - resources generated for handling outgoing traffic.
transparent - resources generated for transparent proxy functionality.
prometheus - resources generated when Prometheus metrics are enabled.
direct-access - resources generated for Direct Access functionality.
ingress - resources generated for Zone Ingress.
egress - resources generated for Zone Egress.
gateway - resources generated for MeshGateway.
The list is not complete, because policy plugins can introduce new resources.
For example MeshTrace plugin can create Cluster with "mesh-trace" origin.
type: string
type: object
operation:
description: Operation to execute on matched listener.
enum:
- Remove
- Patch
- AddFirst
- AddBefore
- AddAfter
- AddLast
type: string
value:
description: Value of xDS resource in YAML format to
add or patch.
type: string
required:
- operation
type: object
listener:
description: Listener is a modification of Envoy's Listener
resource.
properties:
jsonPatches:
description: |-
JsonPatches specifies list of jsonpatches to apply to on Envoy's Listener
resource
items:
description: JsonPatchBlock is one json patch operation
block.
properties:
from:
description: From is a jsonpatch from string,
used by move and copy operations.
type: string
op:
description: Op is a jsonpatch operation string.
enum:
- add
- remove
- replace
- move
- copy
type: string
path:
description: Path is a jsonpatch path string.
type: string
value:
description: Value must be a valid json value
used by replace and add operations.
x-kubernetes-preserve-unknown-fields: true
required:
- op
- path
type: object
type: array
match:
description: Match is a set of conditions that have
to be matched for modification operation to happen.
properties:
name:
description: Name of the listener to match.
type: string
origin:
description: |-
Origin is the name of the component or plugin that generated the resource.
Here is the list of well-known origins:
inbound - resources generated for handling incoming traffic.
outbound - resources generated for handling outgoing traffic.
transparent - resources generated for transparent proxy functionality.
prometheus - resources generated when Prometheus metrics are enabled.
direct-access - resources generated for Direct Access functionality.
ingress - resources generated for Zone Ingress.
egress - resources generated for Zone Egress.
gateway - resources generated for MeshGateway.
The list is not complete, because policy plugins can introduce new resources.
For example MeshTrace plugin can create Cluster with "mesh-trace" origin.
type: string
tags:
additionalProperties:
type: string
description: Tags available in Listener#Metadata#FilterMetadata[io.kuma.tags]
type: object
type: object
operation:
description: Operation to execute on matched listener.
enum:
- Add
- Remove
- Patch
type: string
value:
description: Value of xDS resource in YAML format to
add or patch.
type: string
required:
- operation
type: object
networkFilter:
description: NetworkFilter is a modification of Envoy Listener's
filter.
properties:
jsonPatches:
description: |-
JsonPatches specifies list of jsonpatches to apply to on Envoy Listener's
filter.
items:
description: JsonPatchBlock is one json patch operation
block.
properties:
from:
description: From is a jsonpatch from string,
used by move and copy operations.
type: string
op:
description: Op is a jsonpatch operation string.
enum:
- add
- remove
- replace
- move
- copy
type: string
path:
description: Path is a jsonpatch path string.
type: string
value:
description: Value must be a valid json value
used by replace and add operations.
x-kubernetes-preserve-unknown-fields: true
required:
- op
- path
type: object
type: array
match:
description: Match is a set of conditions that have
to be matched for modification operation to happen.
properties:
listenerName:
description: Name of the listener to match.
type: string
listenerTags:
additionalProperties:
type: string
description: Listener tags available in Listener#Metadata#FilterMetadata[io.kuma.tags]
type: object
name:
description: Name of the network filter. For example
"envoy.filters.network.ratelimit"
type: string
origin:
description: |-
Origin is the name of the component or plugin that generated the resource.
Here is the list of well-known origins:
inbound - resources generated for handling incoming traffic.
outbound - resources generated for handling outgoing traffic.
transparent - resources generated for transparent proxy functionality.
prometheus - resources generated when Prometheus metrics are enabled.
direct-access - resources generated for Direct Access functionality.
ingress - resources generated for Zone Ingress.
egress - resources generated for Zone Egress.
gateway - resources generated for MeshGateway.
The list is not complete, because policy plugins can introduce new resources.
For example MeshTrace plugin can create Cluster with "mesh-trace" origin.
type: string
type: object
operation:
description: Operation to execute on matched listener.
enum:
- Remove
- Patch
- AddFirst
- AddBefore
- AddAfter
- AddLast
type: string
value:
description: Value of xDS resource in YAML format to
add or patch.
type: string
required:
- operation
type: object
virtualHost:
description: |-
VirtualHost is a modification of Envoy's VirtualHost
referenced in HTTP Connection Manager in a Listener resource.
properties:
jsonPatches:
description: |-
JsonPatches specifies list of jsonpatches to apply to on Envoy's
VirtualHost resource
items:
description: JsonPatchBlock is one json patch operation
block.
properties:
from:
description: From is a jsonpatch from string,
used by move and copy operations.
type: string
op:
description: Op is a jsonpatch operation string.
enum:
- add
- remove
- replace
- move
- copy
type: string
path:
description: Path is a jsonpatch path string.
type: string
value:
description: Value must be a valid json value
used by replace and add operations.
x-kubernetes-preserve-unknown-fields: true
required:
- op
- path
type: object
type: array
match:
description: Match is a set of conditions that have
to be matched for modification operation to happen.
properties:
name:
description: Name of the VirtualHost to match.
type: string
origin:
description: |-
Origin is the name of the component or plugin that generated the resource.
Here is the list of well-known origins:
inbound - resources generated for handling incoming traffic.
outbound - resources generated for handling outgoing traffic.
transparent - resources generated for transparent proxy functionality.
prometheus - resources generated when Prometheus metrics are enabled.
direct-access - resources generated for Direct Access functionality.
ingress - resources generated for Zone Ingress.
egress - resources generated for Zone Egress.
gateway - resources generated for MeshGateway.
The list is not complete, because policy plugins can introduce new resources.
For example MeshTrace plugin can create Cluster with "mesh-trace" origin.
type: string
routeConfigurationName:
description: Name of the RouteConfiguration resource
to match.
type: string
type: object
operation:
description: Operation to execute on matched listener.
enum:
- Add
- Remove
- Patch
type: string
value:
description: Value of xDS resource in YAML format to
add or patch.
type: string
required:
- match
- operation
type: object
type: object
type: array
required:
- appendModifications
type: object
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- default
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,498 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshratelimits.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshRateLimit
listKind: MeshRateLimitList
plural: meshratelimits
singular: meshratelimit
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshRateLimit resource.
properties:
from:
description: From list makes a match between clients and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of clients referenced in
'targetRef'
properties:
local:
description: LocalConf defines local http or/and tcp rate
limit configuration
properties:
http:
description: |-
LocalHTTP defines configuration of local HTTP rate limiting
https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/local_rate_limit_filter
properties:
disabled:
description: Define if rate limiting should be disabled.
type: boolean
onRateLimit:
description: Describes the actions to take on a
rate limit event
properties:
headers:
description: The Headers to be added to the
HTTP response on a rate limit event
properties:
add:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
set:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
type: object
status:
description: The HTTP status code to be set
on a rate limit event
format: int32
type: integer
type: object
requestRate:
description: Defines how many requests are allowed
per interval.
properties:
interval:
description: The interval the number of units
is accounted for.
type: string
num:
description: |-
Number of units per interval (depending on usage it can be a number of requests,
or a number of connections).
format: int32
type: integer
required:
- interval
- num
type: object
type: object
tcp:
description: |-
LocalTCP defines confguration of local TCP rate limiting
https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/network_filters/local_rate_limit_filter
properties:
connectionRate:
description: Defines how many connections are allowed
per interval.
properties:
interval:
description: The interval the number of units
is accounted for.
type: string
num:
description: |-
Number of units per interval (depending on usage it can be a number of requests,
or a number of connections).
format: int32
type: integer
required:
- interval
- num
type: object
disabled:
description: |-
Define if rate limiting should be disabled.
Default: false
type: boolean
type: object
type: object
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
clients.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: To list makes a match between clients and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of clients referenced in
'targetRef'
properties:
local:
description: LocalConf defines local http or/and tcp rate
limit configuration
properties:
http:
description: |-
LocalHTTP defines configuration of local HTTP rate limiting
https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/local_rate_limit_filter
properties:
disabled:
description: Define if rate limiting should be disabled.
type: boolean
onRateLimit:
description: Describes the actions to take on a
rate limit event
properties:
headers:
description: The Headers to be added to the
HTTP response on a rate limit event
properties:
add:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
set:
items:
properties:
name:
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
value:
type: string
required:
- name
- value
type: object
maxItems: 16
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
type: object
status:
description: The HTTP status code to be set
on a rate limit event
format: int32
type: integer
type: object
requestRate:
description: Defines how many requests are allowed
per interval.
properties:
interval:
description: The interval the number of units
is accounted for.
type: string
num:
description: |-
Number of units per interval (depending on usage it can be a number of requests,
or a number of connections).
format: int32
type: integer
required:
- interval
- num
type: object
type: object
tcp:
description: |-
LocalTCP defines confguration of local TCP rate limiting
https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/network_filters/local_rate_limit_filter
properties:
connectionRate:
description: Defines how many connections are allowed
per interval.
properties:
interval:
description: The interval the number of units
is accounted for.
type: string
num:
description: |-
Number of units per interval (depending on usage it can be a number of requests,
or a number of connections).
format: int32
type: integer
required:
- interval
- num
type: object
disabled:
description: |-
Define if rate limiting should be disabled.
Default: false
type: boolean
type: object
type: object
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
clients.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,507 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshretries.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshRetry
listKind: MeshRetryList
plural: meshretries
singular: meshretry
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshRetry resource.
properties:
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: To list makes a match between the consumed services and
corresponding configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations referenced in
'targetRef'
properties:
grpc:
description: GRPC defines a configuration of retries for
GRPC traffic
properties:
backOff:
description: |-
BackOff is a configuration of durations which will be used in an exponential
backoff strategy between retries.
properties:
baseInterval:
default: 25ms
description: |-
BaseInterval is an amount of time which should be taken between retries.
Must be greater than zero. Values less than 1 ms are rounded up to 1 ms.
type: string
maxInterval:
description: |-
MaxInterval is a maximal amount of time which will be taken between retries.
Default is 10 times the "BaseInterval".
type: string
type: object
numRetries:
description: |-
NumRetries is the number of attempts that will be made on failed (and
retriable) requests. If not set, the default value is 1.
format: int32
type: integer
perTryTimeout:
description: |-
PerTryTimeout is the maximum amount of time each retry attempt can take
before it times out. If not set, the global request timeout for the route
will be used. Setting this value to 0 will disable the per-try timeout.
type: string
rateLimitedBackOff:
description: |-
RateLimitedBackOff is a configuration of backoff which will be used when
the upstream returns one of the headers configured.
properties:
maxInterval:
default: 300s
description: MaxInterval is a maximal amount of
time which will be taken between retries.
type: string
resetHeaders:
description: |-
ResetHeaders specifies the list of headers (like Retry-After or X-RateLimit-Reset)
to match against the response. Headers are tried in order, and matched
case-insensitive. The first header to be parsed successfully is used.
If no headers match the default exponential BackOff is used instead.
items:
properties:
format:
description: The format of the reset header.
enum:
- Seconds
- UnixTimestamp
type: string
name:
description: The Name of the reset header.
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
required:
- format
- name
type: object
type: array
type: object
retryOn:
description: RetryOn is a list of conditions which will
cause a retry.
example:
- Canceled
- DeadlineExceeded
- Internal
- ResourceExhausted
- Unavailable
items:
enum:
- Canceled
- DeadlineExceeded
- Internal
- ResourceExhausted
- Unavailable
type: string
type: array
type: object
http:
description: HTTP defines a configuration of retries for
HTTP traffic
properties:
backOff:
description: |-
BackOff is a configuration of durations which will be used in exponential
backoff strategy between retries.
properties:
baseInterval:
default: 25ms
description: |-
BaseInterval is an amount of time which should be taken between retries.
Must be greater than zero. Values less than 1 ms are rounded up to 1 ms.
type: string
maxInterval:
description: |-
MaxInterval is a maximal amount of time which will be taken between retries.
Default is 10 times the "BaseInterval".
type: string
type: object
hostSelection:
description: |-
HostSelection is a list of predicates that dictate how hosts should be selected
when requests are retried.
items:
properties:
predicate:
description: Type is requested predicate mode.
enum:
- OmitPreviousHosts
- OmitHostsWithTags
- OmitPreviousPriorities
type: string
tags:
additionalProperties:
type: string
description: |-
Tags is a map of metadata to match against for selecting the omitted hosts. Required if Type is
OmitHostsWithTags
type: object
updateFrequency:
default: 2
description: |-
UpdateFrequency is how often the priority load should be updated based on previously attempted priorities.
Used for OmitPreviousPriorities.
format: int32
type: integer
required:
- predicate
type: object
type: array
hostSelectionMaxAttempts:
description: |-
HostSelectionMaxAttempts is the maximum number of times host selection will be
reattempted before giving up, at which point the host that was last selected will
be routed to. If unspecified, this will default to retrying once.
format: int64
type: integer
numRetries:
description: |-
NumRetries is the number of attempts that will be made on failed (and
retriable) requests. If not set, the default value is 1.
format: int32
type: integer
perTryTimeout:
description: |-
PerTryTimeout is the amount of time after which retry attempt should time out.
If left unspecified, the global route timeout for the request will be used.
Consequently, when using a 5xx based retry policy, a request that times out
will not be retried as the total timeout budget would have been exhausted.
Setting this timeout to 0 will disable it.
type: string
rateLimitedBackOff:
description: |-
RateLimitedBackOff is a configuration of backoff which will be used
when the upstream returns one of the headers configured.
properties:
maxInterval:
default: 300s
description: MaxInterval is a maximal amount of
time which will be taken between retries.
type: string
resetHeaders:
description: |-
ResetHeaders specifies the list of headers (like Retry-After or X-RateLimit-Reset)
to match against the response. Headers are tried in order, and matched
case-insensitive. The first header to be parsed successfully is used.
If no headers match the default exponential BackOff is used instead.
items:
properties:
format:
description: The format of the reset header.
enum:
- Seconds
- UnixTimestamp
type: string
name:
description: The Name of the reset header.
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
required:
- format
- name
type: object
type: array
type: object
retriableRequestHeaders:
description: |-
RetriableRequestHeaders is an HTTP headers which must be present in the request
for retries to be attempted.
items:
description: |-
HeaderMatch describes how to select an HTTP route by matching HTTP request
headers.
properties:
name:
description: |-
Name is the name of the HTTP Header to be matched. Name MUST be lower case
as they will be handled with case insensitivity (See https://tools.ietf.org/html/rfc7230#section-3.2).
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
type:
default: Exact
description: Type specifies how to match against
the value of the header.
enum:
- Exact
- Present
- RegularExpression
- Absent
- Prefix
type: string
value:
description: Value is the value of HTTP Header
to be matched.
type: string
required:
- name
type: object
type: array
retriableResponseHeaders:
description: |-
RetriableResponseHeaders is an HTTP response headers that trigger a retry
if present in the response. A retry will be triggered if any of the header
matches the upstream response headers.
items:
description: |-
HeaderMatch describes how to select an HTTP route by matching HTTP request
headers.
properties:
name:
description: |-
Name is the name of the HTTP Header to be matched. Name MUST be lower case
as they will be handled with case insensitivity (See https://tools.ietf.org/html/rfc7230#section-3.2).
maxLength: 256
minLength: 1
pattern: ^[a-z0-9!#$%&'*+\-.^_\x60|~]+$
type: string
type:
default: Exact
description: Type specifies how to match against
the value of the header.
enum:
- Exact
- Present
- RegularExpression
- Absent
- Prefix
type: string
value:
description: Value is the value of HTTP Header
to be matched.
type: string
required:
- name
type: object
type: array
retryOn:
description: |-
RetryOn is a list of conditions which will cause a retry. Available values are:
[5XX, GatewayError, Reset, Retriable4xx, ConnectFailure, EnvoyRatelimited,
RefusedStream, Http3PostConnectFailure, HttpMethodConnect, HttpMethodDelete,
HttpMethodGet, HttpMethodHead, HttpMethodOptions, HttpMethodPatch,
HttpMethodPost, HttpMethodPut, HttpMethodTrace].
Also, any HTTP status code (500, 503, etc.).
example:
- 5XX
- GatewayError
- Reset
- Retriable4xx
- ConnectFailure
- EnvoyRatelimited
- RefusedStream
- Http3PostConnectFailure
- HttpMethodConnect
- HttpMethodDelete
- HttpMethodGet
- HttpMethodHead
- HttpMethodOptions
- HttpMethodPatch
- HttpMethodPost
- HttpMethodPut
- HttpMethodTrace
- "500"
- "503"
items:
type: string
type: array
type: object
tcp:
description: TCP defines a configuration of retries for
TCP traffic
properties:
maxConnectAttempt:
description: |-
MaxConnectAttempt is a maximal amount of TCP connection attempts
which will be made before giving up
format: int32
type: integer
type: object
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,195 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshservices.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshService
listKind: MeshServiceList
plural: meshservices
singular: meshservice
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: Spec is the specification of the Kuma MeshService resource.
properties:
identities:
items:
properties:
type:
enum:
- ServiceTag
type: string
value:
type: string
required:
- type
- value
type: object
type: array
ports:
items:
properties:
appProtocol:
default: tcp
description: Protocol identifies a protocol supported by a service.
type: string
name:
type: string
port:
format: int32
type: integer
targetPort:
anyOf:
- type: integer
- type: string
x-kubernetes-int-or-string: true
required:
- port
type: object
type: array
x-kubernetes-list-map-keys:
- port
- appProtocol
x-kubernetes-list-type: map
selector:
properties:
dataplaneRef:
properties:
name:
type: string
type: object
dataplaneTags:
additionalProperties:
type: string
type: object
type: object
type: object
status:
description: Status is the current status of the Kuma MeshService resource.
properties:
addresses:
items:
properties:
hostname:
type: string
hostnameGeneratorRef:
properties:
coreName:
type: string
required:
- coreName
type: object
origin:
type: string
type: object
type: array
hostnameGenerators:
items:
properties:
conditions:
description: Conditions is an array of hostname generator conditions.
items:
properties:
message:
description: |-
message is a human readable message indicating details about the transition.
This may be an empty string.
maxLength: 32768
type: string
reason:
description: |-
reason contains a programmatic identifier indicating the reason for the condition's last transition.
Producers of specific condition types may define expected values and meanings for this field,
and whether the values are considered a guaranteed API.
The value should be a CamelCase string.
This field may not be empty.
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
description: status of the condition, one of True, False,
Unknown.
enum:
- "True"
- "False"
- Unknown
type: string
type:
description: |-
type of condition in CamelCase or in foo.example.com/CamelCase.
---
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
useful (see .node.status.conditions), the ability to deconflict is important.
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- message
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
hostnameGeneratorRef:
properties:
coreName:
type: string
required:
- coreName
type: object
required:
- hostnameGeneratorRef
type: object
type: array
tls:
properties:
status:
enum:
- Ready
- NotReady
type: string
type: object
vips:
items:
properties:
ip:
type: string
type: object
type: array
type: object
type: object
served: true
storage: true

View File

@ -0,0 +1,281 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshtcproutes.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshTCPRoute
listKind: MeshTCPRouteList
plural: meshtcproutes
singular: meshtcproute
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshTCPRoute resource.
properties:
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined in-place.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: |-
To list makes a match between the consumed services and corresponding
configurations
items:
properties:
rules:
description: |-
Rules contains the routing rules applies to a combination of top-level
targetRef and the targetRef in this entry.
items:
properties:
default:
description: |-
Default holds routing rules that can be merged with rules from other
policies.
properties:
backendRefs:
items:
description: BackendRef defines where to forward
traffic.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use
to identify cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
port:
description: Port is only supported when this
ref refers to a real MeshService object
format: int32
type: integer
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
weight:
default: 1
minimum: 0
type: integer
type: object
minItems: 1
type: array
required:
- backendRefs
type: object
required:
- default
type: object
maxItems: 1
type: array
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
minItems: 1
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,362 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshtimeouts.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshTimeout
listKind: MeshTimeoutList
plural: meshtimeouts
singular: meshtimeout
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshTimeout resource.
properties:
from:
description: From list makes a match between clients and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of clients referenced in
'targetRef'
properties:
connectionTimeout:
description: |-
ConnectionTimeout specifies the amount of time proxy will wait for an TCP connection to be established.
Default value is 5 seconds. Cannot be set to 0.
type: string
http:
description: Http provides configuration for HTTP specific
timeouts
properties:
maxConnectionDuration:
description: |-
MaxConnectionDuration is the time after which a connection will be drained and/or closed,
starting from when it was first established. Setting this timeout to 0 will disable it.
Disabled by default.
type: string
maxStreamDuration:
description: |-
MaxStreamDuration is the maximum time that a streams lifetime will span.
Setting this timeout to 0 will disable it. Disabled by default.
type: string
requestHeadersTimeout:
description: |-
RequestHeadersTimeout The amount of time that proxy will wait for the request headers to be received. The timer is
activated when the first byte of the headers is received, and is disarmed when the last byte of
the headers has been received. If not specified or set to 0, this timeout is disabled.
Disabled by default.
type: string
requestTimeout:
description: |-
RequestTimeout The amount of time that proxy will wait for the entire request to be received.
The timer is activated when the request is initiated, and is disarmed when the last byte of the request is sent,
OR when the response is initiated. Setting this timeout to 0 will disable it.
Default is 15s.
type: string
streamIdleTimeout:
description: |-
StreamIdleTimeout is the amount of time that proxy will allow a stream to exist with no activity.
Setting this timeout to 0 will disable it. Default is 30m
type: string
type: object
idleTimeout:
description: |-
IdleTimeout is defined as the period in which there are no bytes sent or received on connection
Setting this timeout to 0 will disable it. Be cautious when disabling it because
it can lead to connection leaking. Default value is 1h.
type: string
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
clients.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
to:
description: To list makes a match between the consumed services and
corresponding configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of destinations referenced in
'targetRef'
properties:
connectionTimeout:
description: |-
ConnectionTimeout specifies the amount of time proxy will wait for an TCP connection to be established.
Default value is 5 seconds. Cannot be set to 0.
type: string
http:
description: Http provides configuration for HTTP specific
timeouts
properties:
maxConnectionDuration:
description: |-
MaxConnectionDuration is the time after which a connection will be drained and/or closed,
starting from when it was first established. Setting this timeout to 0 will disable it.
Disabled by default.
type: string
maxStreamDuration:
description: |-
MaxStreamDuration is the maximum time that a streams lifetime will span.
Setting this timeout to 0 will disable it. Disabled by default.
type: string
requestHeadersTimeout:
description: |-
RequestHeadersTimeout The amount of time that proxy will wait for the request headers to be received. The timer is
activated when the first byte of the headers is received, and is disarmed when the last byte of
the headers has been received. If not specified or set to 0, this timeout is disabled.
Disabled by default.
type: string
requestTimeout:
description: |-
RequestTimeout The amount of time that proxy will wait for the entire request to be received.
The timer is activated when the request is initiated, and is disarmed when the last byte of the request is sent,
OR when the response is initiated. Setting this timeout to 0 will disable it.
Default is 15s.
type: string
streamIdleTimeout:
description: |-
StreamIdleTimeout is the amount of time that proxy will allow a stream to exist with no activity.
Setting this timeout to 0 will disable it. Default is 30m
type: string
type: object
idleTimeout:
description: |-
IdleTimeout is defined as the period in which there are no bytes sent or received on connection
Setting this timeout to 0 will disable it. Be cautious when disabling it because
it can lead to connection leaking. Default value is 1h.
type: string
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
destinations.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,284 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshtraces.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshTrace
listKind: MeshTraceList
plural: meshtraces
singular: meshtrace
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshTrace resource.
properties:
default:
description: MeshTrace configuration.
properties:
backends:
description: |-
A one element array of backend definition.
Envoy allows configuring only 1 backend, so the natural way of
representing that would be just one object. Unfortunately due to the
reasons explained in MADR 009-tracing-policy this has to be a one element
array for now.
items:
description: Only one of zipkin, datadog or openTelemetry can
be used.
properties:
datadog:
description: Datadog backend configuration.
properties:
splitService:
default: false
description: |-
Determines if datadog service name should be split based on traffic
direction and destination. For example, with `splitService: true` and a
`backend` service that communicates with a couple of databases, you would
get service names like `backend_INBOUND`, `backend_OUTBOUND_db1`, and
`backend_OUTBOUND_db2` in Datadog.
type: boolean
url:
description: |-
Address of Datadog collector, only host and port are allowed (no paths,
fragments etc.)
type: string
required:
- url
type: object
openTelemetry:
description: OpenTelemetry backend configuration.
properties:
endpoint:
description: Address of OpenTelemetry collector.
example: otel-collector:4317
minLength: 1
type: string
required:
- endpoint
type: object
type:
enum:
- Zipkin
- Datadog
- OpenTelemetry
type: string
zipkin:
description: Zipkin backend configuration.
properties:
apiVersion:
default: httpJson
description: |-
Version of the API.
https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/trace/v3/zipkin.proto#L66
enum:
- httpJson
- httpProto
type: string
sharedSpanContext:
default: true
description: |-
Determines whether client and server spans will share the same span
context.
https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/trace/v3/zipkin.proto#L63
type: boolean
traceId128bit:
default: false
description: Generate 128bit traces.
type: boolean
url:
description: Address of Zipkin collector.
type: string
required:
- url
type: object
required:
- type
type: object
maxItems: 1
type: array
sampling:
description: |-
Sampling configuration.
Sampling is the process by which a decision is made on whether to
process/export a span or not.
properties:
client:
anyOf:
- type: integer
- type: string
default: 100
description: |-
Target percentage of requests that will be force traced if the
'x-client-trace-id' header is set. Mirror of client_sampling in Envoy
https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto#L127-L133
Either int or decimal represented as string.
x-kubernetes-int-or-string: true
overall:
anyOf:
- type: integer
- type: string
default: 100
description: |-
Target percentage of requests will be traced
after all other sampling checks have been applied (client, force tracing,
random sampling). This field functions as an upper limit on the total
configured sampling rate. For instance, setting client to 100
but overall to 1 will result in only 1% of client requests with
the appropriate headers to be force traced. Mirror of
overall_sampling in Envoy
https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto#L142-L150
Either int or decimal represented as string.
x-kubernetes-int-or-string: true
random:
anyOf:
- type: integer
- type: string
default: 100
description: |-
Target percentage of requests that will be randomly selected for trace
generation, if not requested by the client or not forced.
Mirror of random_sampling in Envoy
https://github.com/envoyproxy/envoy/blob/v1.22.0/api/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.proto#L135-L140
Either int or decimal represented as string.
x-kubernetes-int-or-string: true
type: object
tags:
description: |-
Custom tags configuration. You can add custom tags to traces based on
headers or literal values.
items:
description: |-
Custom tags configuration.
Only one of literal or header can be used.
properties:
header:
description: Tag taken from a header.
properties:
default:
description: |-
Default value to use if header is missing.
If the default is missing and there is no value the tag will not be
included.
type: string
name:
description: Name of the header.
type: string
required:
- name
type: object
literal:
description: Tag taken from literal value.
type: string
name:
description: Name of the tag.
type: string
required:
- name
type: object
type: array
type: object
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,203 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: meshtrafficpermissions.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: MeshTrafficPermission
listKind: MeshTrafficPermissionList
plural: meshtrafficpermissions
singular: meshtrafficpermission
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.targetRef.kind
name: TargetRef Kind
type: string
- jsonPath: .spec.targetRef.name
name: TargetRef Name
type: string
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: Spec is the specification of the Kuma MeshTrafficPermission
resource.
properties:
from:
description: From list makes a match between clients and corresponding
configurations
items:
properties:
default:
description: |-
Default is a configuration specific to the group of clients referenced in
'targetRef'
properties:
action:
description: 'Action defines a behavior for the specified
group of clients:'
enum:
- Allow
- Deny
- AllowWithShadowDeny
type: string
type: object
targetRef:
description: |-
TargetRef is a reference to the resource that represents a group of
clients.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify
cross mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: array
targetRef:
description: |-
TargetRef is a reference to the resource the policy takes an effect on.
The resource could be either a real store object or virtual resource
defined inplace.
properties:
kind:
description: Kind of the referenced resource
enum:
- Mesh
- MeshSubset
- MeshGateway
- MeshService
- MeshExternalService
- MeshServiceSubset
- MeshHTTPRoute
type: string
labels:
additionalProperties:
type: string
description: |-
Labels are used to select group of MeshServices that match labels. Either Labels or
Name and Namespace can be used.
type: object
mesh:
description: Mesh is reserved for future use to identify cross
mesh resources.
type: string
name:
description: |-
Name of the referenced resource. Can only be used with kinds: `MeshService`,
`MeshServiceSubset` and `MeshGatewayRoute`
type: string
namespace:
description: |-
Namespace specifies the namespace of target resource. If empty only resources in policy namespace
will be targeted.
type: string
proxyTypes:
description: |-
ProxyTypes specifies the data plane types that are subject to the policy. When not specified,
all data plane types are targeted by the policy.
items:
enum:
- Sidecar
- Gateway
type: string
minItems: 1
type: array
sectionName:
description: |-
SectionName is used to target specific section of resource.
For example, you can target port from MeshService.ports[] by its name. Only traffic to this port will be affected.
type: string
tags:
additionalProperties:
type: string
description: |-
Tags used to select a subset of proxies by tags. Can only be used with kinds
`MeshSubset` and `MeshServiceSubset`
type: object
type: object
required:
- targetRef
type: object
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: proxytemplates.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ProxyTemplate
listKind: ProxyTemplateList
plural: proxytemplates
singular: proxytemplate
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma ProxyTemplate resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: ratelimits.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: RateLimit
listKind: RateLimitList
plural: ratelimits
singular: ratelimit
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma RateLimit resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: retries.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: Retry
listKind: RetryList
plural: retries
singular: retry
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma Retry resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: serviceinsights.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ServiceInsight
listKind: ServiceInsightList
plural: serviceinsights
singular: serviceinsight
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma ServiceInsight resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: timeouts.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: Timeout
listKind: TimeoutList
plural: timeouts
singular: timeout
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma Timeout resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: trafficlogs.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: TrafficLog
listKind: TrafficLogList
plural: trafficlogs
singular: trafficlog
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma TrafficLog resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: trafficpermissions.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: TrafficPermission
listKind: TrafficPermissionList
plural: trafficpermissions
singular: trafficpermission
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma TrafficPermission resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: trafficroutes.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: TrafficRoute
listKind: TrafficRouteList
plural: trafficroutes
singular: trafficroute
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma TrafficRoute resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: traffictraces.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: TrafficTrace
listKind: TrafficTraceList
plural: traffictraces
singular: traffictrace
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma TrafficTrace resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: virtualoutbounds.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: VirtualOutbound
listKind: VirtualOutboundList
plural: virtualoutbounds
singular: virtualoutbound
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma VirtualOutbound resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,56 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: zoneegresses.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ZoneEgress
listKind: ZoneEgressList
plural: zoneegresses
singular: zoneegress
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Zone name
jsonPath: .spec.zone
name: zone
type: string
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma ZoneEgress resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: zoneegressinsights.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ZoneEgressInsight
listKind: ZoneEgressInsightList
plural: zoneegressinsights
singular: zoneegressinsight
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma ZoneEgressInsight resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,56 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: zoneingresses.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ZoneIngress
listKind: ZoneIngressList
plural: zoneingresses
singular: zoneingress
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Zone name
jsonPath: .spec.zone
name: zone
type: string
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma ZoneIngress resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true
subresources: {}

View File

@ -0,0 +1,51 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: zoneingressinsights.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ZoneIngressInsight
listKind: ZoneIngressInsightList
plural: zoneingressinsights
singular: zoneingressinsight
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma ZoneIngressInsight
resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: zoneinsights.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: ZoneInsight
listKind: ZoneInsightList
plural: zoneinsights
singular: zoneinsight
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma ZoneInsight resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,50 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: zones.kuma.io
spec:
group: kuma.io
names:
categories:
- kuma
kind: Zone
listKind: ZoneList
plural: zones
singular: zone
scope: Cluster
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
mesh:
description: |-
Mesh is the name of the Kuma mesh this resource belongs to.
It may be omitted for cluster-scoped resources.
type: string
metadata:
type: object
spec:
description: Spec is the specification of the Kuma Zone resource.
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true

View File

@ -0,0 +1,42 @@
{{ .Chart.Name }} has been installed!
Your release is named '{{ .Release.Name }}'.
You can access the control-plane via either the GUI, kubectl, the HTTP API, or the kumactl CLI.
{{- if .Values.noHelmHooks }}
-------------------------------------------------------------------------------
WARNING
When the "noHelmHooks" value is provided, you will need to manually delete
the "ValidatingWebhookConfiguration" responsible for validating {{ include "kuma.name" . }} resources
before you can uninstall Helm release. This is because the validation provided
by the webhook is not necessary during the release removal and might potentially
even prevent you from doing it. You can do this by running the following command:
kubectl delete ValidatingWebhookConfiguration {{ include "kuma.name" . }}-validating-webhook-configuration
WARNING
When the "noHelmHooks" value is set, Helm will not automatically update
the CustomResourceDefinitions (CRDs) when upgrading release. You must manually
update the CRDs if the new {{ include "kuma.name" . }} version has changes
to the CRDs. You can achieve this by calling the following command:
kumactl install crds --no-config | kubectl apply -f
{{- if and .Values.experimental.ebpf.enabled (not .Values.cni.enabled) }}
WARNING
When the "noHelmHooks" value is set, Helm will not automatically uninstall
the eBPF resources. You will need to manually uninstall these resources after
uninstalling Helm release. To do this, run the following command:
kumactl uninstall ebpf --cleanup-image-registry {{ .Values.global.image.registry }} --cleanup-image-repository {{ .Values.dataPlane.initImage.repository }}
{{- end }}
-------------------------------------------------------------------------------
{{- end }}

View File

@ -0,0 +1,402 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "kuma.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
This is the Kuma version the chart is intended to be used with.
*/}}
{{- define "kuma.appVersion" -}}
{{- .Chart.AppVersion -}}
{{- end }}
{{/*
This is only used in the `kuma.formatImage` function below.
*/}}
{{- define "kuma.defaultRegistry" -}}
docker.io/kumahq
{{- end }}
{{- define "kuma.product" -}}
Kuma
{{- end }}
{{- define "kuma.tagPrefix" -}}
{{- 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 "kuma.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 "kuma.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- define "kuma.controlPlane.serviceName" -}}
{{- $defaultSvcName := printf "%s-control-plane" (include "kuma.name" .) -}}
{{ printf "%s" (default $defaultSvcName .Values.controlPlane.service.name) }}
{{- end }}
{{- define "kuma.controlPlane.globalZoneSync.serviceName" -}}
{{- $defaultSvcName := printf "%s-global-zone-sync" (include "kuma.name" .) -}}
{{ printf "%s" (default $defaultSvcName .Values.controlPlane.globalZoneSyncService.name) }}
{{- end }}
{{- define "kuma.ingress.serviceName" -}}
{{- $defaultSvcName := printf "%s-ingress" (include "kuma.name" .) -}}
{{ printf "%s" (default $defaultSvcName .Values.ingress.service.name) }}
{{- end }}
{{- define "kuma.egress.serviceName" -}}
{{- $defaultSvcName := printf "%s-egress" (include "kuma.name" .) -}}
{{ printf "%s" (default $defaultSvcName .Values.egress.service.name) }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "kuma.labels" -}}
helm.sh/chart: {{ include "kuma.chart" . }}
{{ include "kuma.selectorLabels" . }}
{{- if (include "kuma.appVersion" .) }}
app.kubernetes.io/version: {{ (include "kuma.appVersion" .) | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "kuma.selectorLabels" -}}
app.kubernetes.io/name: {{ include "kuma.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
CNI labels
*/}}
{{- define "kuma.cniLabels" -}}
app: {{ include "kuma.name" . }}-cni
{{ include "kuma.labels" . }}
{{- end }}
{{/*
control plane labels
*/}}
{{- define "kuma.cpLabels" -}}
app: {{ include "kuma.name" . }}-control-plane
{{- range $key, $value := $.Values.controlPlane.extraLabels }}
{{ $key | quote }}: {{ $value | quote }}
{{- end }}
{{ include "kuma.labels" . }}
{{- end }}
{{/*
control plane deployment annotations
*/}}
{{- define "kuma.cpDeploymentAnnotations" -}}
{{- range $key, $value := $.Values.controlPlane.deploymentAnnotations }}
{{ $key | quote }}: {{ $value | quote }}
{{- end }}
{{- end }}
{{/*
ingress labels
*/}}
{{- define "kuma.ingressLabels" -}}
app: {{ include "kuma.name" . }}-ingress
{{- range $key, $value := .Values.ingress.extraLabels }}
{{ $key | quote }}: {{ $value | quote }}
{{- end }}
{{ include "kuma.labels" . }}
{{- end }}
{{/*
egress labels
*/}}
{{- define "kuma.egressLabels" -}}
app: {{ include "kuma.name" . }}-egress
{{ range $key, $value := .Values.egress.extraLabels }}
{{ $key | quote }}: {{ $value | quote }}
{{ end }}
{{- include "kuma.labels" . }}
{{- end }}
{{/*
CNI selector labels
*/}}
{{- define "kuma.cniSelectorLabels" -}}
app: {{ include "kuma.name" . }}-cni
{{ include "kuma.selectorLabels" . }}
{{- end }}
{{/*
params: { image: { registry?, repository, tag? }, root: $ }
returns: formatted image string
*/}}
{{- define "kuma.formatImage" -}}
{{- $img := .image }}
{{- $root := .root }}
{{- $registry := ($img.registry | default $root.Values.global.image.registry) -}}
{{- $repo := ($img.repository | required "Must specify image repository") -}}
{{- $product := (include "kuma.product" .) }}
{{- $tagPrefix := (include "kuma.tagPrefix" .) }}
{{- $expectedVersion := (include "kuma.appVersion" $root) }}
{{- if
and
$root.Values.global.image.tag
(ne $root.Values.global.image.tag (include "kuma.appVersion" $root))
(eq $root.Values.global.image.registry (include "kuma.defaultRegistry" .))
-}}
{{- fail (
printf "This chart only supports %s version %q but %sglobal.image.tag is set to %q. Set %sglobal.image.tag to %q or skip this check by setting %s*.image.tag for each individual component."
$product $expectedVersion $tagPrefix $root.Values.global.image.tag $tagPrefix $expectedVersion $tagPrefix
) -}}
{{- end -}}
{{- $defaultTag := ($root.Values.global.image.tag | default (include "kuma.appVersion" $root)) -}}
{{- $tag := ($img.tag | default $defaultTag) -}}
{{- printf "%s/%s:%s" $registry $repo $tag -}}
{{- end -}}
{{- define "kuma.parentEnv" -}}
{{- end -}}
{{- define "kuma.parentSecrets" -}}
{{- end -}}
{{- define "kuma.pluginPoliciesEnabled" -}}
{{- $list := list -}}
{{- range $k, $v := .Values.plugins.policies -}}
{{- if $v -}}
{{- $list = append $list (printf "%s" $k) -}}
{{- end -}}
{{- end -}}
{{ join "," $list }}
{{- end -}}
{{- define "kuma.defaultEnv" -}}
env:
{{ include "kuma.parentEnv" . }}
- name: KUMA_ENVIRONMENT
value: "kubernetes"
- name: KUMA_STORE_TYPE
value: "kubernetes"
- name: KUMA_STORE_KUBERNETES_SYSTEM_NAMESPACE
value: {{ .Release.Namespace | quote }}
- name: KUMA_RUNTIME_KUBERNETES_CONTROL_PLANE_SERVICE_NAME
value: {{ include "kuma.controlPlane.serviceName" . }}
- name: KUMA_GENERAL_TLS_CERT_FILE
value: /var/run/secrets/kuma.io/tls-cert/tls.crt
- name: KUMA_GENERAL_TLS_KEY_FILE
value: /var/run/secrets/kuma.io/tls-cert/tls.key
{{- if eq .Values.controlPlane.mode "zone" }}
- name: KUMA_MULTIZONE_ZONE_GLOBAL_ADDRESS
value: {{ .Values.controlPlane.kdsGlobalAddress }}
{{- end }}
- name: KUMA_DP_SERVER_HDS_ENABLED
value: "false"
- name: KUMA_API_SERVER_READ_ONLY
value: "true"
- name: KUMA_RUNTIME_KUBERNETES_ADMISSION_SERVER_PORT
value: {{ .Values.controlPlane.admissionServerPort | default "5443" | quote }}
- name: KUMA_RUNTIME_KUBERNETES_ADMISSION_SERVER_CERT_DIR
value: /var/run/secrets/kuma.io/tls-cert
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_CNI_ENABLED
value: {{ .Values.cni.enabled | quote }}
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_SIDECAR_CONTAINER_IMAGE
value: {{ include "kuma.formatImage" (dict "image" .Values.dataPlane.image "root" $) | quote }}
- name: KUMA_INJECTOR_INIT_CONTAINER_IMAGE
value: {{ include "kuma.formatImage" (dict "image" .Values.dataPlane.initImage "root" $) | quote }}
{{- if .Values.dataPlane.dnsLogging }}
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_BUILTIN_DNS_LOGGING
value: "true"
{{- end }}
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_CA_CERT_FILE
value: /var/run/secrets/kuma.io/tls-cert/ca.crt
- name: KUMA_DEFAULTS_SKIP_MESH_CREATION
value: {{ .Values.controlPlane.defaults.skipMeshCreation | quote }}
- name: KUMA_MODE
value: {{ .Values.controlPlane.mode | quote }}
{{- if .Values.controlPlane.zone }}
- name: KUMA_MULTIZONE_ZONE_NAME
value: {{ .Values.controlPlane.zone | quote }}
{{- end }}
{{- if .Values.controlPlane.tls.apiServer.secretName }}
- name: KUMA_API_SERVER_HTTPS_TLS_CERT_FILE
value: /var/run/secrets/kuma.io/api-server-tls-cert/tls.crt
- name: KUMA_API_SERVER_HTTPS_TLS_KEY_FILE
value: /var/run/secrets/kuma.io/api-server-tls-cert/tls.key
{{- end }}
{{- if .Values.controlPlane.tls.apiServer.clientCertsSecretName }}
- name: KUMA_API_SERVER_AUTH_CLIENT_CERTS_DIR
value: /var/run/secrets/kuma.io/api-server-client-certs/
{{- end }}
{{- if and (eq .Values.controlPlane.mode "global") (or .Values.controlPlane.tls.kdsGlobalServer.secretName .Values.controlPlane.tls.kdsGlobalServer.create) }}
- name: KUMA_MULTIZONE_GLOBAL_KDS_TLS_CERT_FILE
value: /var/run/secrets/kuma.io/kds-server-tls-cert/tls.crt
- name: KUMA_MULTIZONE_GLOBAL_KDS_TLS_KEY_FILE
value: /var/run/secrets/kuma.io/kds-server-tls-cert/tls.key
{{- end }}
{{- if and (eq .Values.controlPlane.mode "zone") (or .Values.controlPlane.tls.kdsZoneClient.secretName .Values.controlPlane.tls.kdsZoneClient.create) }}
- name: KUMA_MULTIZONE_ZONE_KDS_ROOT_CA_FILE
value: /var/run/secrets/kuma.io/kds-client-tls-cert/ca.crt
{{- end }}
- name: KUMA_API_SERVER_AUTHN_LOCALHOST_IS_ADMIN
value: "false"
- name: KUMA_RUNTIME_KUBERNETES_ALLOWED_USERS
value: "system:serviceaccount:{{ .Release.Namespace }}:{{ include "kuma.name" . }}-control-plane"
{{- if .Values.experimental.sidecarContainers }}
- name: KUMA_EXPERIMENTAL_SIDECAR_CONTAINERS
value: "true"
{{- end }}
{{- if .Values.cni.enabled }}
- name: KUMA_RUNTIME_KUBERNETES_NODE_TAINT_CONTROLLER_ENABLED
value: "true"
- name: KUMA_RUNTIME_KUBERNETES_NODE_TAINT_CONTROLLER_CNI_APP
value: "{{ include "kuma.name" . }}-cni"
- name: KUMA_RUNTIME_KUBERNETES_NODE_TAINT_CONTROLLER_CNI_NAMESPACE
value: {{ .Values.cni.namespace }}
{{- end }}
{{- if .Values.experimental.ebpf.enabled }}
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_EBPF_ENABLED
value: "true"
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_EBPF_INSTANCE_IP_ENV_VAR_NAME
value: {{ .Values.experimental.ebpf.instanceIPEnvVarName }}
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_EBPF_BPFFS_PATH
value: {{ .Values.experimental.ebpf.bpffsPath }}
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_EBPF_CGROUP_PATH
value: {{ .Values.experimental.ebpf.cgroupPath }}
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_EBPF_TC_ATTACH_IFACE
value: {{ .Values.experimental.ebpf.tcAttachIface }}
- name: KUMA_RUNTIME_KUBERNETES_INJECTOR_EBPF_PROGRAMS_SOURCE_PATH
value: {{ .Values.experimental.ebpf.programsSourcePath }}
{{- end }}
{{- if not .Values.experimental.deltaKds }}
- name: KUMA_EXPERIMENTAL_KDS_DELTA_ENABLED
value: "false"
{{- end }}
{{- if .Values.controlPlane.tls.kdsZoneClient.skipVerify }}
- name: KUMA_MULTIZONE_ZONE_KDS_TLS_SKIP_VERIFY
value: "true"
{{- end }}
- name: KUMA_PLUGIN_POLICIES_ENABLED
value: {{ include "kuma.pluginPoliciesEnabled" . | quote }}
{{- if .Values.controlPlane.supportGatewaySecretsInAllNamespaces }}
- name: KUMA_RUNTIME_KUBERNETES_SUPPORT_GATEWAY_SECRETS_IN_ALL_NAMESPACES
value: true
{{- end }}
{{- end }}
{{- define "kuma.controlPlane.tls.general.caSecretName" -}}
{{ .Values.controlPlane.tls.general.caSecretName | default .Values.controlPlane.tls.general.secretName | default (printf "%s-tls-cert" (include "kuma.name" .)) | quote }}
{{- end }}
{{- define "kuma.universal.defaultEnv" -}}
{{ if eq .Values.controlPlane.mode "zone" }}
{{ if .Values.ingress.enabled }}
{{ fail "Can't have ingress.enabled when running controlPlane.mode=='universal'" }}
{{ end }}
{{ if .Values.egress.enabled }}
{{ fail "Can't have egress.enabled when running controlPlane.mode=='universal'" }}
{{ end }}
{{ end }}
env:
- name: KUMA_PLUGIN_POLICIES_ENABLED
value: {{ include "kuma.pluginPoliciesEnabled" . | quote }}
- name: KUMA_GENERAL_WORK_DIR
value: "/tmp/kuma"
- name: KUMA_ENVIRONMENT
value: "universal"
- name: KUMA_STORE_TYPE
value: "postgres"
- name: KUMA_STORE_POSTGRES_PORT
value: "{{ .Values.postgres.port }}"
- name: KUMA_DEFAULTS_SKIP_MESH_CREATION
value: {{ .Values.controlPlane.defaults.skipMeshCreation | quote }}
{{ if and (eq .Values.controlPlane.mode "zone") .Values.controlPlane.tls.general.secretName }}
- name: KUMA_GENERAL_TLS_CERT_FILE
value: /var/run/secrets/kuma.io/tls-cert/tls.crt
- name: KUMA_GENERAL_TLS_KEY_FILE
value: /var/run/secrets/kuma.io/tls-cert/tls.key
{{ end }}
- name: KUMA_MODE
value: {{ .Values.controlPlane.mode | quote }}
{{- if eq .Values.controlPlane.mode "zone" }}
- name: KUMA_MULTIZONE_ZONE_GLOBAL_ADDRESS
value: {{ .Values.controlPlane.kdsGlobalAddress }}
{{- end }}
{{- if .Values.controlPlane.zone }}
- name: KUMA_MULTIZONE_ZONE_NAME
value: {{ .Values.controlPlane.zone | quote }}
{{- end }}
{{- if and (eq .Values.controlPlane.mode "zone") (or .Values.controlPlane.tls.kdsZoneClient.secretName .Values.controlPlane.tls.kdsZoneClient.create) }}
- name: KUMA_MULTIZONE_ZONE_KDS_ROOT_CA_FILE
value: /var/run/secrets/kuma.io/kds-client-tls-cert/ca.crt
{{- end }}
{{- if not .Values.experimental.deltaKds }}
- name: KUMA_EXPERIMENTAL_KDS_DELTA_ENABLED
value: "false"
{{- end }}
{{- if .Values.controlPlane.tls.kdsZoneClient.skipVerify }}
- name: KUMA_MULTIZONE_ZONE_KDS_TLS_SKIP_VERIFY
value: "true"
{{- end }}
{{- if .Values.controlPlane.tls.apiServer.secretName }}
- name: KUMA_API_SERVER_HTTPS_TLS_CERT_FILE
value: /var/run/secrets/kuma.io/api-server-tls-cert/tls.crt
- name: KUMA_API_SERVER_HTTPS_TLS_KEY_FILE
value: /var/run/secrets/kuma.io/api-server-tls-cert/tls.key
{{- end }}
{{- if .Values.controlPlane.tls.apiServer.clientCertsSecretName }}
- name: KUMA_API_SERVER_AUTH_CLIENT_CERTS_DIR
value: /var/run/secrets/kuma.io/api-server-client-certs/
{{- end }}
{{- if .Values.controlPlane.tls.kdsGlobalServer.secretName }}
- name: KUMA_MULTIZONE_GLOBAL_KDS_TLS_CERT_FILE
value: /var/run/secrets/kuma.io/kds-server-tls-cert/tls.crt
- name: KUMA_MULTIZONE_GLOBAL_KDS_TLS_KEY_FILE
value: /var/run/secrets/kuma.io/kds-server-tls-cert/tls.key
{{- end }}
- name: KUMA_STORE_POSTGRES_TLS_MODE
value: {{ .Values.postgres.tls.mode }}
{{- if or (eq .Values.postgres.tls.mode "verifyCa") (eq .Values.postgres.tls.mode "verifyFull") }}
{{- if empty .Values.postgres.tls.caSecretName }}
{{ fail "if mode is 'verifyCa' or 'verifyFull' then you must provide .Values.postgres.tls.caSecretName" }}
{{- end }}
{{- if .Values.postgres.tls.secretName }}
- name: KUMA_STORE_POSTGRES_TLS_CERT_PATH
value: /var/run/secrets/kuma.io/postgres-tls-cert/tls.crt
- name: KUMA_STORE_POSTGRES_TLS_KEY_PATH
value: /var/run/secrets/kuma.io/postgres-tls-cert/tls.key
{{- end }}
{{- if .Values.postgres.tls.caSecretName }}
- name: KUMA_STORE_POSTGRES_TLS_CA_PATH
value: /var/run/secrets/kuma.io/postgres-tls-cert/ca.crt
{{- end }}
{{- if .Values.postgres.tls.disableSSLSNI }}
- name: KUMA_STORE_POSTGRES_TLS_DISABLE_SSLSNI
value: {{ .Values.postgres.tls.disableSSLSNI }}
{{- end }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,22 @@
{{- if and .Values.cni.enabled (not .Values.experimental.ebpf.enabled) }}
kind: ConfigMap
apiVersion: v1
metadata:
name: {{ include "kuma.name" . }}-cni-config
namespace: {{ .Values.cni.namespace }}
labels: {{ include "kuma.cniLabels" . | nindent 4 }}
data:
# The CNI network configuration to add to the plugin chain on each node.
cni_network_config: |-
{
"cniVersion": "0.3.1",
"name": "kuma-cni",
"type": "kuma-cni",
"log_level": "{{ .Values.cni.logLevel }}",
"kubernetes": {
"kubeconfig": "__KUBECONFIG_FILEPATH__",
"cni_bin_dir": "{{ .Values.cni.binDir }}",
"exclude_namespaces": [ "kube-system" ]
}
}
{{- end }}

View File

@ -0,0 +1,152 @@
{{- if .Values.cni.enabled }}
kind: DaemonSet
apiVersion: apps/v1
metadata:
name: {{ include "kuma.name" . }}-cni-node
namespace: {{ .Values.cni.namespace }}
annotations:
ignore-check.kube-linter.io/run-as-non-root: "The container installs a CNI plugin"
labels: {{- include "kuma.cniLabels" . | nindent 4 }}
spec:
selector:
matchLabels:
{{- include "kuma.cniSelectorLabels" . | nindent 6 }}
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
{{- include "kuma.cniSelectorLabels" . | nindent 8 }}
annotations:
checksum/config: {{ include (print $.Template.BasePath "/cni-configmap.yaml") . | sha256sum }}
{{- range $key, $value := .Values.cni.podAnnotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
spec:
# This, along with the CriticalAddonsOnly toleration below,
# marks the pod as a critical add-on, ensuring it gets
# priority scheduling and that its resources are reserved
# if it ever gets evicted.
priorityClassName: system-node-critical
{{- with .Values.cni.nodeSelector }}
nodeSelector:
{{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.cni.tolerations }}
tolerations:
{{ toYaml . | nindent 8 }}
{{- end }}
tolerations:
# Make sure kuma-cni-node gets scheduled on all nodes.
- effect: NoSchedule
operator: Exists
# Mark the pod as a critical add-on for rescheduling.
- key: CriticalAddonsOnly
operator: Exists
- effect: NoExecute
operator: Exists
serviceAccountName: {{ include "kuma.name" . }}-cni
# Minimize downtime during a rolling upgrade or deletion; tell Kubernetes to do a "force
# deletion": https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods.
terminationGracePeriodSeconds: 5
securityContext:
{{- toYaml .Values.cni.podSecurityContext | trim | nindent 8 }}
containers:
- name: install-cni
imagePullPolicy: {{ .Values.cni.image.imagePullPolicy }}
{{- if not .Values.experimental.ebpf.enabled }}
image: {{ include "kuma.formatImage" (dict "image" .Values.cni.image "root" $) | quote }}
readinessProbe:
initialDelaySeconds: {{ .Values.cni.delayStartupSeconds }}
exec:
command:
- cat
- /tmp/ready
command: [ "sh", "-c", "--" ]
args: [ "sleep {{.Values.cni.delayStartupSeconds}} && exec /install-cni" ]
{{- else }}
{{- with .Values.cni.experimental.imageEbpf }}
image: {{ printf "%s/%s:%s" .registry .repository .tag | quote }}
{{- end }}
args:
- /app/mbctl
- --mode=kuma
- --use-reconnect=true
- --cni-mode=true
{{- if eq .Values.cni.logLevel "debug" }}
- --debug=true
{{- end }}
lifecycle:
preStop:
exec:
command:
- make
- --keep-going
- clean
{{- end }}
securityContext:
{{- toYaml .Values.cni.containerSecurityContext | trim | nindent 12 }}
{{- if .Values.experimental.ebpf.enabled }}
privileged: true
{{- end }}
{{- if not .Values.experimental.ebpf.enabled }}
env:
# Name of the CNI config file to create.
- name: CNI_CONF_NAME
value: "{{ .Values.cni.confName }}"
# The CNI network config to install on each node.
- name: CNI_NETWORK_CONFIG
valueFrom:
configMapKeyRef:
name: {{ include "kuma.name" . }}-cni-config
key: cni_network_config
- name: CNI_NET_DIR
value: "{{ .Values.cni.netDir }}"
# If true, deploy as a chained CNI plugin, otherwise deploy as a standalone CNI
- name: CHAINED_CNI_PLUGIN
value: "{{ .Values.cni.chained }}"
- name: CNI_LOG_LEVEL
value: "{{ .Values.cni.logLevel }}"
{{- end }}
resources:
{{- toYaml .Values.cni.resources | trim | nindent 12 }}
volumeMounts:
- mountPath: /host/opt/cni/bin
name: cni-bin-dir
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
{{- if .Values.experimental.ebpf.enabled }}
- mountPath: /sys/fs/cgroup
name: sys-fs-cgroup
- mountPath: /host/proc
name: host-proc
- mountPath: /host/var/run
name: host-var-run
mountPropagation: Bidirectional
{{- end }}
- name: tmp
mountPath: /tmp
volumes:
# Used to install CNI.
- name: cni-bin-dir
hostPath:
path: {{ .Values.cni.binDir }}
- name: cni-net-dir
hostPath:
path: {{ .Values.cni.netDir }}
{{- if .Values.experimental.ebpf.enabled }}
- hostPath:
path: /var/run
name: host-var-run
- hostPath:
path: /sys/fs/cgroup
name: sys-fs-cgroup
- hostPath:
path: /proc
name: host-proc
{{- end }}
- name: tmp
emptyDir: {}
{{- end }}

View File

@ -0,0 +1,51 @@
{{- if .Values.cni.enabled }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "kuma.name" . }}-cni
namespace: {{ .Values.cni.namespace }}
labels: {{ include "kuma.cniLabels" . | nindent 4 }}
{{- with .Values.global.imagePullSecrets }}
imagePullSecrets:
{{- range . }}
- name: {{ . | quote }}
{{- end }}
{{- end }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "kuma.name" . }}-cni
labels:
{{ include "kuma.cniLabels" . | nindent 4 }}
rules:
- apiGroups: [""]
resources:
- nodes
verbs:
- get
- apiGroups: [""]
resources:
- pods
verbs:
- get
{{- if .Values.experimental.ebpf.enabled }}
- list
- watch
{{- end }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "kuma.name" . }}-cni
labels:
{{ include "kuma.cniLabels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "kuma.name" . }}-cni
subjects:
- kind: ServiceAccount
name: {{ include "kuma.name" . }}-cni
namespace: {{ .Values.cni.namespace }}
{{- end }}

View File

@ -0,0 +1,33 @@
{{ $kumaCpLabels := include "kuma.cpLabels" . }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "kuma.name" . }}-control-plane-config
namespace: {{ .Release.Namespace }}
labels: {{ $kumaCpLabels | nindent 4 }}
data:
config.yaml: |
# use this file to override default configuration of `kuma-cp`
#
# see conf/kuma-cp.conf.yml for available settings
{{ if .Values.controlPlane.config }}
{{ .Values.controlPlane.config | nindent 4 }}
{{ end }}
{{- $releaseNamespace := .Release.Namespace}}
{{- range $extraConfigMap := .Values.controlPlane.extraConfigMaps }}
{{- if $extraConfigMap.values }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ $extraConfigMap.name }}
namespace: {{ $releaseNamespace }}
labels: {{ $kumaCpLabels | nindent 4 }}
data:
{{- range $fileName, $fileContents := $extraConfigMap.values }}
{{- $fileName | nindent 2 }}: |
{{- $fileContents | nindent 4 }}
{{- end }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,398 @@
{{ $kdsGlobalServerTLSSecretName := "" }}
{{ if eq .Values.controlPlane.mode "global" }}
{{ $kdsGlobalServerTLSSecretName = .Values.controlPlane.tls.kdsGlobalServer.secretName }}
{{ if and .Values.controlPlane.tls.kdsGlobalServer.create (not $kdsGlobalServerTLSSecretName) }}
{{ $kdsGlobalServerTLSSecretName = print (include "kuma.name" .) "-kds-global-server-tls" }}
{{ end }}
{{ end }}
{{ $kdsZoneClientTLSSecretName := "" }}
{{ if eq .Values.controlPlane.mode "zone" }}
{{ $kdsZoneClientTLSSecretName = .Values.controlPlane.tls.kdsZoneClient.secretName }}
{{ if and .Values.controlPlane.tls.kdsZoneClient.create (not $kdsZoneClientTLSSecretName) }}
{{ $kdsZoneClientTLSSecretName = print (include "kuma.name" .) "-kds-zone-client-tls" }}
{{ end }}
{{ end }}
{{ if not (or (eq .Values.controlPlane.mode "zone") (eq .Values.controlPlane.mode "global") (eq .Values.controlPlane.mode "standalone")) }}
{{ $msg := printf "controlPlane.mode invalid got:'%s' supported values: global,zone,standalone" .Values.controlPlane.mode }}
{{ fail $msg }}
{{ end }}
{{ if eq .Values.controlPlane.mode "zone" }}
{{ if not (empty .Values.controlPlane.zone) }}
{{ if gt (len .Values.controlPlane.zone) 253 }}
{{ fail "controlPlane.zone must be no more than 253 characters" }}
{{ else }}
{{ if not (regexMatch "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$" .Values.controlPlane.zone) }}
{{ fail "controlPlane.zone must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character" }}
{{ end }}
{{ end }}
{{ end }}
{{ if not (empty .Values.controlPlane.kdsGlobalAddress) }}
{{ $url := urlParse .Values.controlPlane.kdsGlobalAddress }}
{{ if not (or (eq $url.scheme "grpcs") (eq $url.scheme "grpc")) }}
{{ $msg := printf "controlPlane.kdsGlobalAddress must be a url with scheme grpcs:// or grpc:// got:'%s'" .Values.controlPlane.kdsGlobalAddress }}
{{ fail $msg }}
{{ end }}
{{ end }}
{{ else }}
{{ if not (empty .Values.controlPlane.zone) }}
{{ fail "Can't specify a controlPlane.zone when controlPlane.mode!='zone'" }}
{{ end }}
{{ if not (empty .Values.controlPlane.kdsGlobalAddress) }}
{{ fail "Can't specify a controlPlane.kdsGlobalAddress when controlPlane.mode!='zone'" }}
{{ end }}
{{ end }}
{{- $defaultEnv := include "kuma.defaultEnv" . | fromYaml | pluck "env" | first }}
{{- if eq .Values.controlPlane.environment "universal" }}
{{- $defaultEnv = include "kuma.universal.defaultEnv" . | fromYaml | pluck "env" | first }}
{{- end }}
{{- $defaultEnvDict := dict }}
{{- range $index, $item := $defaultEnv }}
{{- $name := $item.name | upper }}
{{- $defaultEnvDict := set $defaultEnvDict $name $item.value }}
{{- end }}
{{- $envVarsCopy := deepCopy .Values.controlPlane.envVars }}
{{- $mergedEnv := merge $envVarsCopy $defaultEnvDict }}
{{- $defaultSecrets := include "kuma.parentSecrets" . | fromYaml }}
{{- $extraSecrets := .Values.controlPlane.extraSecrets }}
{{- $mergedSecrets := merge $extraSecrets $defaultSecrets }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "kuma.name" . }}-control-plane
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
annotations: {{ include "kuma.cpDeploymentAnnotations" . | nindent 4 }}
spec:
{{- if not .Values.controlPlane.autoscaling.enabled }}
replicas: {{ .Values.controlPlane.replicas }}
{{- end }}
minReadySeconds: {{ .Values.controlPlane.minReadySeconds }}
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
{{- include "kuma.selectorLabels" . | nindent 6 }}
app: {{ include "kuma.name" . }}-control-plane
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/cp-configmap.yaml") . | sha256sum }}
{{- if .Values.restartOnSecretChange }}
checksum/tls-secrets: {{ include (print $.Template.BasePath "/cp-webhooks-and-secrets.yaml") . | sha256sum }}
{{- end }}
{{- range $key, $value := $.Values.controlPlane.podAnnotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
labels: {{ include "kuma.cpLabels" . | nindent 8 }}
spec:
{{- with .Values.controlPlane.affinity }}
affinity: {{ tpl (toYaml . | nindent 8) $ }}
{{- end }}
{{- with .Values.controlPlane.topologySpreadConstraints }}
topologySpreadConstraints: {{ tpl (toYaml . | nindent 8) $ }}
{{- end }}
securityContext:
{{- toYaml .Values.controlPlane.podSecurityContext | trim | nindent 8 }}
serviceAccountName: {{ include "kuma.name" . }}-control-plane
automountServiceAccountToken: {{ .Values.controlPlane.automountServiceAccountToken }}
{{- with .Values.controlPlane.nodeSelector }}
nodeSelector:
{{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.controlPlane.tolerations }}
tolerations:
{{ toYaml . | nindent 8 }}
{{- end }}
hostNetwork: {{ .Values.controlPlane.hostNetwork }}
terminationGracePeriodSeconds: {{ .Values.controlPlane.terminationGracePeriodSeconds }}
{{- if (eq .Values.controlPlane.environment "universal") }}
initContainers:
- name: migration
image: {{ include "kuma.formatImage" (dict "image" .Values.controlPlane.image "root" $) | quote }}
imagePullPolicy: {{ .Values.controlPlane.image.pullPolicy }}
securityContext:
{{- toYaml .Values.controlPlane.containerSecurityContext | trim | nindent 12 }}
env:
{{- range $key, $value := $mergedEnv }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
{{- range $element := .Values.controlPlane.secrets }}
- name: {{ $element.Env }}
valueFrom:
secretKeyRef:
name: {{ $element.Secret }}
key: {{ $element.Key }}
{{- end }}
args:
- migrate
- up
- --log-level=info
- --config-file=/etc/kuma.io/kuma-control-plane/config.yaml
resources:
{{- if .Values.controlPlane.resources }}
{{- .Values.controlPlane.resources | toYaml | nindent 12 }}
{{- end }}
volumeMounts:
{{- if .Values.postgres.tls.caSecretName }}
- name: postgres-tls-cert-ca
subPath: ca.crt
mountPath: /var/run/secrets/kuma.io/postgres-tls-cert/ca.crt
readOnly: true
{{- end }}
{{- if .Values.postgres.tls.secretName }}
- name: postgres-tls-cert
subPath: tls.crt
mountPath: /var/run/secrets/kuma.io/postgres-tls-cert/tls.crt
readOnly: true
- name: postgres-tls-cert
subPath: tls.key
mountPath: /var/run/secrets/kuma.io/postgres-tls-cert/tls.key
readOnly: true
{{- end }}
- name: {{ include "kuma.name" . }}-control-plane-config
mountPath: /etc/kuma.io/kuma-control-plane
readOnly: true
{{- end }}
containers:
- name: control-plane
image: {{ include "kuma.formatImage" (dict "image" .Values.controlPlane.image "root" $) | quote }}
imagePullPolicy: {{ .Values.controlPlane.image.pullPolicy }}
securityContext:
{{- toYaml .Values.controlPlane.containerSecurityContext | trim | nindent 12 }}
env:
{{- range $key, $value := $mergedEnv }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
{{- range $element := .Values.controlPlane.secrets }}
- name: {{ $element.Env }}
valueFrom:
secretKeyRef:
name: {{ $element.Secret }}
key: {{ $element.Key }}
{{- end }}
- name: KUMA_INTER_CP_CATALOG_INSTANCE_ADDRESS
valueFrom:
fieldRef:
fieldPath: status.podIP
args:
- run
- --log-level={{ .Values.controlPlane.logLevel }}
- --log-output-path={{ .Values.controlPlane.logOutputPath }}
- --config-file=/etc/kuma.io/kuma-control-plane/config.yaml
ports:
- containerPort: 5680
name: diagnostics
protocol: TCP
- containerPort: 5681
- containerPort: 5682
- containerPort: {{ .Values.controlPlane.admissionServerPort | default "5443" }}
{{- if ne .Values.controlPlane.mode "global" }}
- containerPort: 5678
{{- end }}
livenessProbe:
timeoutSeconds: 10
httpGet:
path: /healthy
port: 5680
readinessProbe:
timeoutSeconds: 10
httpGet:
path: /ready
port: 5680
resources:
{{- if .Values.controlPlane.resources }}
{{- .Values.controlPlane.resources | toYaml | nindent 12 }}
{{- end }}
{{ with .Values.controlPlane.lifecycle }}
lifecycle: {{ . | toYaml | nindent 14 }}
{{ end }}
volumeMounts:
{{- if eq .Values.controlPlane.environment "kubernetes" }}
{{- if not .Values.controlPlane.automountServiceAccountToken }}
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: serviceaccount-token
readOnly: true
{{- end }}
- name: general-tls-cert
mountPath: /var/run/secrets/kuma.io/tls-cert/tls.crt
subPath: tls.crt
readOnly: true
- name: general-tls-cert
mountPath: /var/run/secrets/kuma.io/tls-cert/tls.key
subPath: tls.key
readOnly: true
- name: general-tls-cert{{- if .Values.controlPlane.tls.general.caSecretName }}-ca{{- end }}
mountPath: /var/run/secrets/kuma.io/tls-cert/ca.crt
subPath: ca.crt
readOnly: true
{{- end }}
{{- if and (eq .Values.controlPlane.environment "universal") (eq .Values.controlPlane.mode "zone") }}
{{- if .Values.controlPlane.tls.general.secretName }}
- name: general-tls-cert
mountPath: /var/run/secrets/kuma.io/tls-cert/tls.crt
subPath: tls.crt
readOnly: true
- name: general-tls-cert
mountPath: /var/run/secrets/kuma.io/tls-cert/tls.key
subPath: tls.key
readOnly: true
- name: general-tls-cert{{- if .Values.controlPlane.tls.general.caSecretName }}-ca{{- end }}
mountPath: /var/run/secrets/kuma.io/tls-cert/ca.crt
subPath: ca.crt
readOnly: true
{{- end }}
{{- end }}
- name: {{ include "kuma.name" . }}-control-plane-config
mountPath: /etc/kuma.io/kuma-control-plane
readOnly: true
{{- if .Values.controlPlane.tls.apiServer.secretName }}
- name: api-server-tls-cert
mountPath: /var/run/secrets/kuma.io/api-server-tls-cert
readOnly: true
{{- end }}
{{- if .Values.postgres.tls.caSecretName }}
- name: postgres-tls-cert-ca
subPath: ca.crt
mountPath: /var/run/secrets/kuma.io/postgres-tls-cert/ca.crt
readOnly: true
{{- end }}
{{- if .Values.postgres.tls.secretName }}
- name: postgres-tls-cert
subPath: tls.crt
mountPath: /var/run/secrets/kuma.io/postgres-tls-cert/tls.crt
readOnly: true
- name: postgres-tls-cert
subPath: tls.key
mountPath: /var/run/secrets/kuma.io/postgres-tls-cert/tls.key
readOnly: true
{{- end }}
{{- if .Values.controlPlane.tls.apiServer.clientCertsSecretName }}
- name: api-server-client-certs
mountPath: /var/run/secrets/kuma.io/api-server-client-certs
readOnly: true
{{- end }}
{{- if $kdsGlobalServerTLSSecretName }}
- name: kds-server-tls-cert
mountPath: /var/run/secrets/kuma.io/kds-server-tls-cert
readOnly: true
{{- end }}
{{- if $kdsZoneClientTLSSecretName }}
- name: kds-client-tls-cert
mountPath: /var/run/secrets/kuma.io/kds-client-tls-cert
readOnly: true
{{- end }}
{{- range $extraConfigMap := .Values.controlPlane.extraConfigMaps }}
- name: {{ $extraConfigMap.name }}
mountPath: {{ $extraConfigMap.mountPath }}
readOnly: {{ $extraConfigMap.readOnly }}
{{- end }}
{{- range $mergedSecret := $mergedSecrets }}
- name: {{ $mergedSecret.name }}
mountPath: {{ $mergedSecret.mountPath }}
subPath: {{ $mergedSecret.subPath }}
readOnly: {{ $mergedSecret.readOnly }}
{{- end }}
- name: tmp
mountPath: /tmp
volumes:
{{- if eq .Values.controlPlane.environment "kubernetes" }}
{{- if not .Values.controlPlane.automountServiceAccountToken }}
- name: serviceaccount-token
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3600
path: token
- configMap:
name: kube-root-ca.crt
items:
- key: ca.crt
path: ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
{{- end }}
{{- if .Values.controlPlane.tls.general.secretName }}
- name: general-tls-cert
secret:
secretName: {{ .Values.controlPlane.tls.general.secretName }}
{{- else }}
- name: general-tls-cert
secret:
secretName: {{ include "kuma.name" . }}-tls-cert
{{- end }}
{{- if .Values.controlPlane.tls.general.caSecretName }}
- name: general-tls-cert-ca
secret:
secretName: {{ .Values.controlPlane.tls.general.caSecretName }}
{{- end }}
{{- end }}
{{- if and (eq .Values.controlPlane.environment "universal") (eq .Values.controlPlane.mode "zone") }}
{{- if .Values.controlPlane.tls.general.secretName }}
- name: general-tls-cert
secret:
secretName: {{ .Values.controlPlane.tls.general.secretName }}
{{- end }}
{{- if .Values.controlPlane.tls.general.caSecretName }}
- name: general-tls-cert-ca
secret:
secretName: {{ .Values.controlPlane.tls.general.caSecretName }}
{{- end }}
{{- end }}
{{- if .Values.controlPlane.tls.apiServer.secretName }}
- name: api-server-tls-cert
secret:
secretName: {{ .Values.controlPlane.tls.apiServer.secretName }}
{{- end }}
{{- if .Values.postgres.tls.caSecretName }}
- name: postgres-tls-cert-ca
secret:
secretName: {{ .Values.postgres.tls.caSecretName }}
{{- end }}
{{- if .Values.postgres.tls.secretName }}
- name: postgres-tls-cert
secret:
secretName: {{ .Values.postgres.tls.secretName }}
{{- end }}
{{- if .Values.controlPlane.tls.apiServer.clientCertsSecretName }}
- name: api-server-client-certs
secret:
secretName: {{ .Values.controlPlane.tls.apiServer.clientCertsSecretName }}
{{- end }}
{{- if $kdsGlobalServerTLSSecretName }}
- name: kds-server-tls-cert
secret:
secretName: {{ $kdsGlobalServerTLSSecretName }}
{{- end }}
{{- if $kdsZoneClientTLSSecretName }}
- name: kds-client-tls-cert
secret:
secretName: {{ $kdsZoneClientTLSSecretName }}
{{- end }}
- name: {{ include "kuma.name" . }}-control-plane-config
configMap:
name: {{ include "kuma.name" . }}-control-plane-config
{{- range $extraConfigMap := .Values.controlPlane.extraConfigMaps }}
- name: {{ $extraConfigMap.name }}
configMap:
name: {{ $extraConfigMap.name }}
{{- end }}
{{- range $mergedSecret := $mergedSecrets }}
- name: {{ $mergedSecret.name }}
secret:
secretName: {{ $mergedSecret.name }}
{{- end }}
- name: tmp
emptyDir: {}

View File

@ -0,0 +1,33 @@
{{- if and (eq .Values.controlPlane.mode "global") .Values.controlPlane.globalZoneSyncService.enabled }}
apiVersion: v1
kind: Service
metadata:
name: {{ include "kuma.controlPlane.globalZoneSync.serviceName" . }}
namespace: {{ .Release.Namespace }}
annotations:
{{- range $key, $value := .Values.controlPlane.globalZoneSyncService.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
spec:
type: {{ .Values.controlPlane.globalZoneSyncService.type }}
{{- if .Values.controlPlane.globalZoneSyncService.loadBalancerIP }}
loadBalancerIP: {{ .Values.controlPlane.globalZoneSyncService.loadBalancerIP }}
{{- end }}
{{- if .Values.controlPlane.globalZoneSyncService.loadBalancerSourceRanges }}
loadBalancerSourceRanges:
{{- range .Values.controlPlane.globalZoneSyncService.loadBalancerSourceRanges }}
- {{.}}
{{- end }}
{{- end }}
ports:
- port: {{ .Values.controlPlane.globalZoneSyncService.port }}
appProtocol: {{ .Values.controlPlane.globalZoneSyncService.protocol }}
{{- if and (eq .Values.controlPlane.globalZoneSyncService.type "NodePort") .Values.controlPlane.globalZoneSyncService.nodePort }}
nodePort: {{ .Values.controlPlane.globalZoneSyncService.nodePort }}
{{- end }}
name: global-zone-sync
selector:
app: {{ include "kuma.name" . }}-control-plane
{{ include "kuma.selectorLabels" . | nindent 4 }}
{{- end }}

View File

@ -0,0 +1,24 @@
{{- if .Values.controlPlane.autoscaling.enabled }}
{{ if .Capabilities.APIVersions.Has "autoscaling/v2" }}
apiVersion: "autoscaling/v2"
{{ else }}
apiVersion: "autoscaling/v1"
{{ end }}
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "kuma.name" . }}-control-plane
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "kuma.name" . }}-control-plane
minReplicas: {{ .Values.controlPlane.autoscaling.minReplicas }}
maxReplicas: {{ .Values.controlPlane.autoscaling.maxReplicas }}
{{ if .Capabilities.APIVersions.Has "autoscaling/v2" }}
metrics: {{- toYaml .Values.controlPlane.autoscaling.metrics | nindent 4 }}
{{ else }}
targetCPUUtilizationPercentage: {{ .Values.controlPlane.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,25 @@
{{- if .Values.controlPlane.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "kuma.controlPlane.serviceName" . }}
namespace: {{ .Release.Namespace }}
{{- with .Values.controlPlane.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
spec:
ingressClassName: {{ .Values.controlPlane.ingress.ingressClassName }}
rules:
- host: {{ .Values.controlPlane.ingress.hostname }}
http:
paths:
- path: {{ .Values.controlPlane.ingress.path }}
pathType: {{ .Values.controlPlane.ingress.pathType }}
backend:
service:
name: {{ include "kuma.controlPlane.serviceName" . }}
port:
number: {{ .Values.controlPlane.ingress.servicePort }}
{{- end }}

View File

@ -0,0 +1,15 @@
{{ if and (eq .Values.controlPlane.mode "global") .Values.controlPlane.tls.kdsGlobalServer.create }}
apiVersion: v1
kind: Secret
metadata:
{{ with .Values.controlPlane.tls.kdsGlobalServer.secretName }}
name: {{ . }}
{{ else }}
name: {{ include "kuma.name" . }}-kds-global-server-tls
{{ end }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
type: kubernetes.io/tls
stringData:
tls.crt: {{ required "you must provide a kds tls cert" .Values.controlPlane.tls.kdsGlobalServer.cert | quote }}
tls.key: {{ required "you must provide a kds tls key" .Values.controlPlane.tls.kdsGlobalServer.key | quote }}
{{ end }}

View File

@ -0,0 +1,13 @@
{{ if and (eq .Values.controlPlane.mode "zone") .Values.controlPlane.tls.kdsZoneClient.create }}
apiVersion: v1
kind: Secret
metadata:
{{ with .Values.controlPlane.tls.kdsZoneClient.secretName }}
name: {{ . }}
{{ else }}
name: {{ include "kuma.name" . }}-kds-zone-client-tls
{{ end }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
stringData:
ca.crt: {{ required "you must provide a kds cert" .Values.controlPlane.tls.kdsZoneClient.cert | quote }}
{{ end }}

View File

@ -0,0 +1,20 @@
{{ if $.Values.controlPlane.podDisruptionBudget.enabled }}
{{ if .Capabilities.APIVersions.Has "policy/v1" }}
apiVersion: policy/v1
{{ else if .Capabilities.APIVersions.Has "policy/v1beta1" }}
apiVersion: policy/v1beta1
{{ else }}
{{ fail "pod disruption budgets are not supported by this version of kubernetes" }}
{{ end }}
kind: PodDisruptionBudget
metadata:
name: {{ include "kuma.name" . }}-control-plane
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
spec:
maxUnavailable: {{ .Values.controlPlane.podDisruptionBudget.maxUnavailable }}
selector:
matchLabels:
{{- include "kuma.selectorLabels" . | nindent 6 }}
app: {{ include "kuma.name" . }}-control-plane
{{ end }}

View File

@ -0,0 +1,315 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "kuma.name" . }}-control-plane
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
{{- with .Values.controlPlane.serviceAccountAnnotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.global.imagePullSecrets }}
imagePullSecrets:
{{- range . }}
- name: {{ . | quote }}
{{- end }}
{{- end }}
{{- if (eq .Values.controlPlane.environment "kubernetes") }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "kuma.name" . }}-control-plane
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
rules:
- apiGroups:
- ""
resources:
- namespaces
- pods
- configmaps
- nodes
{{- if .Values.controlPlane.supportGatewaySecretsInAllNamespaces }}
- secrets
{{- end }}
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- secrets
verbs:
- list
- watch
- apiGroups:
- "discovery.k8s.io"
resources:
- endpointslices
verbs:
- get
- list
- watch
- apiGroups:
- "apps"
resources:
- deployments
- replicasets
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- "batch"
resources:
- jobs
verbs:
- get
- list
- watch
- apiGroups:
- gateway.networking.k8s.io
resources:
- gatewayclasses
- gateways
- referencegrants
- httproutes
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- gateway.networking.k8s.io
resources:
- gatewayclasses/status
- gateways/status
- httproutes/status
verbs:
- get
- patch
- update
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
- apiGroups:
- ""
resources:
- services
verbs:
- get
- delete
- list
- watch
- create
- update
- patch
- apiGroups:
- "discovery.k8s.io"
resources:
- endpointslices
verbs:
- get
- list
- watch
- apiGroups:
- kuma.io
resources:
- dataplanes
- dataplaneinsights
- meshes
- zones
- zoneinsights
- zoneingresses
- zoneingressinsights
- zoneegresses
- zoneegressinsights
- meshinsights
- serviceinsights
- proxytemplates
- ratelimits
- trafficpermissions
- trafficroutes
- timeouts
- retries
- circuitbreakers
- virtualoutbounds
- containerpatches
- externalservices
- faultinjections
- healthchecks
- trafficlogs
- traffictraces
- meshgateways
- meshgatewayroutes
- meshgatewayinstances
- meshgatewayconfigs
{{- range $policy, $v := .Values.plugins.policies }}
{{- if $v }}
- {{ $policy }}
{{- end}}
{{- end}}
{{- range $policy, $v := .Values.plugins.resources }}
{{- if $v }}
- {{ $policy }}
{{- end}}
{{- end}}
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
- apiGroups:
- kuma.io
resources:
- meshgatewayinstances/status
- meshgatewayinstances/finalizers
- meshes/finalizers
- dataplanes/finalizers
verbs:
- get
- patch
- update
- apiGroups:
- ""
resources:
- pods/finalizers
verbs:
- get
- patch
- update
{{- if .Values.cni.enabled }}
- apiGroups:
- k8s.cni.cncf.io
resources:
- network-attachment-definitions
verbs:
- get
- list
- watch
- create
- delete
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- nodes
verbs:
- update
- apiGroups:
- "pods"
resources:
- pods
verbs:
- list
{{- end }}
# validate k8s token before issuing mTLS cert
- apiGroups:
- authentication.k8s.io
resources:
- tokenreviews
verbs:
- create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "kuma.name" . }}-control-plane
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "kuma.name" . }}-control-plane
subjects:
- kind: ServiceAccount
name: {{ include "kuma.name" . }}-control-plane
namespace: {{ .Release.Namespace }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: {{ include "kuma.name" . }}-control-plane
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
rules:
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
- apiGroups:
- ""
resources:
- configmaps
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
# leader-for-life election deletes Pods in some circumstances
- apiGroups:
- ""
resources:
- pods
verbs:
- delete
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: {{ include "kuma.name" . }}-control-plane
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: {{ include "kuma.name" . }}-control-plane
subjects:
- kind: ServiceAccount
name: {{ include "kuma.name" . }}-control-plane
namespace: {{ .Release.Namespace }}
{{- end }}

View File

@ -0,0 +1,49 @@
{{ if .Values.controlPlane.service.enabled }}
apiVersion: v1
kind: Service
metadata:
name: {{ include "kuma.controlPlane.serviceName" . }}
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
annotations:
{{- range $key, $value := .Values.controlPlane.service.annotations }}
{{- if $value }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}
spec:
type: {{ .Values.controlPlane.service.type }}
ports:
- port: 5680
name: diagnostics
appProtocol: http
- port: 5681
name: http-api-server
appProtocol: http
{{- if and (eq .Values.controlPlane.service.type "NodePort") .Values.controlPlane.service.apiServer.http.nodePort }}
nodePort: {{ .Values.controlPlane.service.apiServer.http.nodePort }}
{{- end }}
- port: 5682
name: https-api-server
appProtocol: https
{{- if and (eq .Values.controlPlane.service.type "NodePort") .Values.controlPlane.service.apiServer.https.nodePort }}
nodePort: {{ .Values.controlPlane.service.apiServer.https.nodePort }}
{{- end }}
{{- if ne .Values.controlPlane.environment "universal" }}
- port: 443
name: https-admission-server
targetPort: {{ .Values.controlPlane.admissionServerPort | default "5443" }}
appProtocol: https
{{- end }}
{{- if ne .Values.controlPlane.mode "global" }}
- port: 5676
name: mads-server
appProtocol: https
- port: 5678
name: dp-server
appProtocol: https
{{- end }}
selector:
app: {{ include "kuma.name" . }}-control-plane
{{- include "kuma.selectorLabels" . | nindent 4 }}
{{ end }}

View File

@ -0,0 +1,337 @@
{{- if not (eq (empty .Values.controlPlane.tls.general.caBundle) (empty .Values.controlPlane.tls.general.secretName)) }}
{{ fail "You need to send both or neither of controlPlane.tls.general.caBundle and controlPlane.tls.general.secretName"}}
{{- end }}
{{- $caBundle := .Values.controlPlane.tls.general.caBundle }}
{{/*
Generate certificates
see: https://masterminds.github.io/sprig/crypto.html
see: https://medium.com/nuvo-group-tech/move-your-certs-to-helm-4f5f61338aca
see: https://github.com/networkservicemesh/networkservicemesh/blob/804ad5026bb5dbd285c220f15395fe25e46f5edb/deployments/helm/nsm/charts/admission-webhook/templates/admission-webhook-secret.tpl
We only autogenerate certs if user did not chose their own secret.
We only autogenerate certs if the cert is not yet generated. This way we keep the secrets between HELM upgrades.
*/}}
{{- if eq .Values.controlPlane.tls.general.secretName "" -}}
{{- $cert := "" }}
{{- $key := "" }}
{{- $secretName := print (include "kuma.name" .) "-tls-cert" }}
{{- $secret := (lookup "v1" "Secret" .Release.Namespace $secretName) -}}
{{- if $secret -}}
{{- $cert = index $secret.data "tls.crt" -}}
{{- $key = index $secret.data "tls.key" -}}
{{- $caBundle = index $secret.data "ca.crt" -}}
{{- else -}}
{{- $commonName := (include "kuma.controlPlane.serviceName" .) -}}
{{- $altNames := list (printf "%s.%s" $commonName .Release.Namespace) (printf "%s.%s.svc" $commonName .Release.Namespace) -}}
{{- $certTTL := 3650 -}}
{{- $ca := genCA "kuma-ca" $certTTL -}}
{{- $genCert := genSignedCert $commonName nil $altNames $certTTL $ca -}}
{{- $cert = $genCert.Cert | b64enc -}}
{{- $key = $genCert.Key | b64enc -}}
{{ $caBundle = $ca.Cert | b64enc }}
{{- end -}}
---
apiVersion: v1
kind: Secret
type: kubernetes.io/tls
metadata:
name: {{ $secretName }}
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
data:
tls.crt: {{ $cert }}
tls.key: {{ $key }}
ca.crt: {{ $caBundle }}
{{- end }}
{{- if (eq .Values.controlPlane.environment "kubernetes") }}
---
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
name: {{ include "kuma.name" . }}-admission-mutating-webhook-configuration
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
webhooks:
- name: mesh.defaulter.kuma-admission.kuma.io
admissionReviewVersions: ["v1"]
failurePolicy: Fail
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system"]
clientConfig:
caBundle: {{ $caBundle }}
service:
namespace: {{ .Release.Namespace }}
name: {{ include "kuma.controlPlane.serviceName" . }}
path: /default-kuma-io-v1alpha1-mesh
rules:
- apiGroups:
- kuma.io
apiVersions:
- v1alpha1
operations:
- CREATE
- UPDATE
resources:
- meshes
- meshgateways
{{- range $policy, $v := .Values.plugins.policies }}
{{- if $v }}
- {{ $policy }}
{{- end}}
{{- end}}
{{- range $policy, $v := .Values.plugins.resources }}
{{- if $v }}
- {{ $policy }}
{{- end}}
{{- end}}
sideEffects: None
- name: owner-reference.kuma-admission.kuma.io
admissionReviewVersions: ["v1"]
failurePolicy: Fail
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system"]
clientConfig:
caBundle: {{ $caBundle }}
service:
namespace: {{ .Release.Namespace }}
name: {{ include "kuma.controlPlane.serviceName" . }}
path: /owner-reference-kuma-io-v1alpha1
rules:
- apiGroups:
- kuma.io
apiVersions:
- v1alpha1
operations:
- CREATE
resources:
- circuitbreakers
- externalservices
- faultinjections
- healthchecks
- meshgateways
- meshgatewayroutes
- proxytemplates
- ratelimits
- retries
- timeouts
- trafficlogs
- trafficpermissions
- trafficroutes
- traffictraces
- virtualoutbounds
{{- range $policy, $v := .Values.plugins.policies }}
{{- if $v }}
- {{ $policy }}
{{- end}}
{{- end}}
{{- range $policy, $v := .Values.plugins.resources }}
{{- if $v }}
- {{ $policy }}
{{- end}}
{{- end}}
{{ .Values.controlPlane.webhooks.ownerReference.additionalRules | nindent 6 }}
sideEffects: None
{{- if ne .Values.controlPlane.mode "global" }}
- name: namespace-kuma-injector.kuma.io
admissionReviewVersions: ["v1"]
failurePolicy: {{ .Values.controlPlane.injectorFailurePolicy }}
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system"]
- key: kuma.io/sidecar-injection
operator: In
values: ["enabled", "true"]
clientConfig:
caBundle: {{ $caBundle }}
service:
namespace: {{ .Release.Namespace }}
name: {{ include "kuma.controlPlane.serviceName" . }}
path: /inject-sidecar
rules:
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
resources:
- pods
sideEffects: None
- name: pods-kuma-injector.kuma.io
admissionReviewVersions: ["v1"]
failurePolicy: {{ .Values.controlPlane.injectorFailurePolicy }}
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system"]
objectSelector:
matchLabels:
kuma.io/sidecar-injection: enabled
clientConfig:
caBundle: {{ $caBundle }}
service:
namespace: {{ .Release.Namespace }}
name: {{ include "kuma.controlPlane.serviceName" . }}
path: /inject-sidecar
rules:
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
resources:
- pods
sideEffects: None
{{- end }}
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: {{ include "kuma.name" . }}-validating-webhook-configuration
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.cpLabels" . | nindent 4 }}
webhooks:
- name: validator.kuma-admission.kuma.io
admissionReviewVersions: ["v1"]
failurePolicy: Fail
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system"]
clientConfig:
caBundle: {{ $caBundle }}
service:
namespace: {{ .Release.Namespace }}
name: {{ include "kuma.controlPlane.serviceName" . }}
path: /validate-kuma-io-v1alpha1
rules:
- apiGroups:
- kuma.io
apiVersions:
- v1alpha1
operations:
- CREATE
- UPDATE
- DELETE
resources:
- circuitbreakers
- dataplanes
- externalservices
- faultinjections
- meshgatewayinstances
- healthchecks
- meshes
- meshgateways
- meshgatewayroutes
- proxytemplates
- ratelimits
- retries
- trafficlogs
- trafficpermissions
- trafficroutes
- traffictraces
- virtualoutbounds
- zones
- containerpatches
{{- range $policy, $v := .Values.plugins.policies }}
{{- if $v }}
- {{ $policy }}
{{- end}}
{{- end}}
{{- range $policy, $v := .Values.plugins.resources }}
{{- if $v }}
- {{ $policy }}
{{- end}}
{{- end}}
{{ .Values.controlPlane.webhooks.validator.additionalRules | nindent 6 }}
sideEffects: None
{{- if ne .Values.controlPlane.mode "global" }}
- name: service.validator.kuma-admission.kuma.io
admissionReviewVersions: ["v1"]
failurePolicy: Ignore
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system"]
clientConfig:
caBundle: {{ $caBundle }}
service:
namespace: {{ .Release.Namespace }}
name: {{ include "kuma.controlPlane.serviceName" . }}
path: /validate-v1-service
rules:
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
- UPDATE
resources:
- services
sideEffects: None
{{- end }}
- name: secret.validator.kuma-admission.kuma.io
admissionReviewVersions: ["v1"]
namespaceSelector:
matchLabels:
kuma.io/system-namespace: "true"
failurePolicy: Ignore
clientConfig:
caBundle: {{ $caBundle }}
service:
namespace: {{ .Release.Namespace }}
name: {{ include "kuma.controlPlane.serviceName" . }}
path: /validate-v1-secret
rules:
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
- UPDATE
- DELETE
resources:
- secrets
sideEffects: None
- name: gateway.validator.kuma-admission.kuma.io
admissionReviewVersions: ["v1"]
failurePolicy: Ignore
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values: ["kube-system"]
clientConfig:
caBundle: {{ $caBundle }}
service:
namespace: {{ .Release.Namespace }}
name: {{ include "kuma.controlPlane.serviceName" . }}
path: /validate-gatewayclass
rules:
- apiGroups:
- "gateway.networking.k8s.io"
apiVersions:
- v1beta1
operations:
- CREATE
resources:
- gatewayclasses
sideEffects: None
{{- end }}

View File

@ -0,0 +1,137 @@
{{- if .Values.egress.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "kuma.name" . }}-egress
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.egressLabels" . | nindent 4 }}
spec:
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
{{- if not .Values.egress.autoscaling.enabled }}
replicas: {{ .Values.egress.replicas }}
{{- end }}
selector:
matchLabels:
{{- include "kuma.selectorLabels" . | nindent 6 }}
app: {{ include "kuma.name" . }}-egress
template:
metadata:
annotations:
kuma.io/egress: enabled
{{- range $key, $value := merge .Values.egress.podAnnotations .Values.egress.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
labels:
{{- include "kuma.egressLabels" . | nindent 8 }}
spec:
{{- with .Values.egress.affinity }}
affinity: {{ tpl (toYaml . | nindent 8) $ }}
{{- end }}
{{- with .Values.egress.topologySpreadConstraints }}
topologySpreadConstraints: {{ tpl (toYaml . | nindent 8) $ }}
{{- end }}
securityContext:
{{- toYaml .Values.egress.podSecurityContext | trim | nindent 8 }}
serviceAccountName: {{ include "kuma.name" . }}-egress
automountServiceAccountToken: {{ .Values.egress.automountServiceAccountToken }}
{{- with .Values.egress.nodeSelector }}
nodeSelector:
{{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.egress.tolerations }}
tolerations:
{{ toYaml . | nindent 8 }}
{{- end }}
containers:
- name: egress
image: {{ include "kuma.formatImage" (dict "image" .Values.dataPlane.image "root" $) | quote }}
imagePullPolicy: {{ .Values.dataPlane.image.pullPolicy }}
securityContext:
{{- toYaml .Values.egress.containerSecurityContext | trim | nindent 12 }}
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: KUMA_CONTROL_PLANE_URL
value: "https://{{ include "kuma.controlPlane.serviceName" . }}.{{ .Release.Namespace }}:5678"
- name: KUMA_CONTROL_PLANE_CA_CERT_FILE
value: /var/run/secrets/kuma.io/cp-ca/ca.crt
- name: KUMA_DATAPLANE_DRAIN_TIME
value: {{ .Values.egress.drainTime }}
- name: KUMA_DATAPLANE_RUNTIME_TOKEN_PATH
value: /var/run/secrets/kubernetes.io/serviceaccount/token
- name: KUMA_DATAPLANE_PROXY_TYPE
value: "egress"
args:
- run
- --log-level={{ .Values.egress.logLevel | default "info" }}
ports:
- containerPort: 10002
livenessProbe:
httpGet:
path: "/ready"
port: 9901
failureThreshold: 12
initialDelaySeconds: 60
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 3
readinessProbe:
httpGet:
path: "/ready"
port: 9901
failureThreshold: 12
initialDelaySeconds: 1
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 3
resources: {{ toYaml .Values.egress.resources | nindent 12 }}
volumeMounts:
{{- if not .Values.egress.automountServiceAccountToken }}
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: serviceaccount-token
readOnly: true
{{- end }}
- name: control-plane-ca
mountPath: /var/run/secrets/kuma.io/cp-ca
readOnly: true
- name: tmp
mountPath: /tmp
volumes:
{{- if not .Values.egress.automountServiceAccountToken }}
- name: serviceaccount-token
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3600
path: token
- configMap:
name: kube-root-ca.crt
items:
- key: ca.crt
path: ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
{{- end }}
- name: control-plane-ca
secret:
secretName: {{ include "kuma.controlPlane.tls.general.caSecretName" . }}
items:
- key: ca.crt
path: ca.crt
- name: tmp
emptyDir: {}
{{- end }}

View File

@ -0,0 +1,24 @@
{{- if .Values.egress.autoscaling.enabled }}
{{ if .Capabilities.APIVersions.Has "autoscaling/v2" }}
apiVersion: "autoscaling/v2"
{{ else }}
apiVersion: "autoscaling/v1"
{{ end }}
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "kuma.name" . }}-egress
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.egressLabels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "kuma.name" . }}-egress
minReplicas: {{ .Values.egress.autoscaling.minReplicas }}
maxReplicas: {{ .Values.egress.autoscaling.maxReplicas }}
{{ if .Capabilities.APIVersions.Has "autoscaling/v2" }}
metrics: {{- toYaml .Values.egress.autoscaling.metrics | nindent 4 }}
{{ else }}
targetCPUUtilizationPercentage: {{ .Values.egress.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,20 @@
{{ if $.Values.egress.podDisruptionBudget.enabled }}
{{ if .Capabilities.APIVersions.Has "policy/v1" }}
apiVersion: policy/v1
{{ else if .Capabilities.APIVersions.Has "policy/v1beta1" }}
apiVersion: policy/v1beta1
{{ else }}
{{ fail "pod disruption budgets are not supported by this version of kubernetes" }}
{{ end }}
kind: PodDisruptionBudget
metadata:
name: {{ include "kuma.name" . }}-egress
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.egressLabels" . | nindent 4 }}
spec:
maxUnavailable: {{ .Values.egress.podDisruptionBudget.maxUnavailable }}
selector:
matchLabels:
{{- include "kuma.selectorLabels" . | nindent 6 }}
app: {{ include "kuma.name" . }}-egress
{{ end }}

View File

@ -0,0 +1,18 @@
{{- if .Values.egress.enabled }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "kuma.name" . }}-egress
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.egressLabels" . | nindent 4 }}
{{- with .Values.egress.serviceAccountAnnotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.global.imagePullSecrets }}
imagePullSecrets:
{{- range . }}
- name: {{ . | quote }}
{{- end }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,32 @@
{{- if .Values.egress.enabled }}
{{- if eq .Values.controlPlane.mode "global" }}
{{ fail "You shouldn't run zoneEgress when running the CP in global" }}
{{- end }}
{{- end }}
{{- if and .Values.egress.enabled .Values.egress.service.enabled }}
apiVersion: v1
kind: Service
metadata:
name: {{ include "kuma.egress.serviceName" . }}
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.egressLabels" . | nindent 4 }}
annotations:
{{- range $key, $value := .Values.egress.service.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
spec:
type: {{ .Values.egress.service.type }}
{{- if .Values.egress.service.loadBalancerIP }}
loadBalancerIP: {{ .Values.egress.service.loadBalancerIP }}
{{- end }}
ports:
- port: {{ .Values.egress.service.port }}
protocol: TCP
targetPort: 10002
{{- if and (eq .Values.egress.service.type "NodePort") .Values.egress.service.nodePort }}
nodePort: {{ .Values.egress.service.nodePort }}
{{- end }}
selector:
app: {{ include "kuma.name" . }}-egress
{{- include "kuma.selectorLabels" . | nindent 4 }}
{{- end }}

View File

@ -0,0 +1,19 @@
{{- if and (eq .Values.controlPlane.environment "kubernetes") (eq .Values.controlPlane.mode "zone") }}
{{- if .Capabilities.APIVersions.Has "gateway.networking.k8s.io/v1/GatewayClass" }}
---
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: kuma
spec:
controllerName: "gateways.kuma.io/controller"
{{- else if .Capabilities.APIVersions.Has "gateway.networking.k8s.io/v1beta1/GatewayClass" }}
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
name: kuma
spec:
controllerName: "gateways.kuma.io/controller"
{{- end }}
{{- end }}

View File

@ -0,0 +1,141 @@
{{- if .Values.ingress.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "kuma.name" . }}-ingress
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.ingressLabels" . | nindent 4 }}
spec:
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
{{- if not .Values.ingress.autoscaling.enabled }}
replicas: {{ .Values.ingress.replicas }}
{{- end }}
selector:
matchLabels:
{{- include "kuma.selectorLabels" . | nindent 6 }}
app: {{ include "kuma.name" . }}-ingress
template:
metadata:
annotations:
kuma.io/ingress: enabled
{{- range $key, $value := merge .Values.ingress.podAnnotations .Values.ingress.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
labels:
{{- include "kuma.ingressLabels" . | nindent 8 }}
spec:
{{- with .Values.ingress.affinity }}
affinity: {{ tpl (toYaml . | nindent 8) $ }}
{{- end }}
{{- with .Values.ingress.topologySpreadConstraints }}
topologySpreadConstraints: {{ tpl (toYaml . | nindent 8) $ }}
{{- end }}
securityContext:
{{- toYaml .Values.ingress.podSecurityContext | trim | nindent 8 }}
serviceAccountName: {{ include "kuma.name" . }}-ingress
automountServiceAccountToken: {{ .Values.ingress.automountServiceAccountToken }}
{{- with .Values.ingress.nodeSelector }}
nodeSelector:
{{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.ingress.tolerations }}
tolerations:
{{ toYaml . | nindent 8 }}
{{- end }}
terminationGracePeriodSeconds: {{ .Values.ingress.terminationGracePeriodSeconds }}
containers:
- name: ingress
image: {{ include "kuma.formatImage" (dict "image" .Values.dataPlane.image "root" $) | quote }}
imagePullPolicy: {{ .Values.dataPlane.image.pullPolicy }}
securityContext:
{{- toYaml .Values.ingress.containerSecurityContext | trim | nindent 12 }}
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: KUMA_CONTROL_PLANE_URL
value: "https://{{ include "kuma.controlPlane.serviceName" . }}.{{ .Release.Namespace }}:5678"
- name: KUMA_CONTROL_PLANE_CA_CERT_FILE
value: /var/run/secrets/kuma.io/cp-ca/ca.crt
- name: KUMA_DATAPLANE_DRAIN_TIME
value: {{ .Values.ingress.drainTime }}
- name: KUMA_DATAPLANE_RUNTIME_TOKEN_PATH
value: /var/run/secrets/kubernetes.io/serviceaccount/token
- name: KUMA_DATAPLANE_PROXY_TYPE
value: "ingress"
args:
- run
- --log-level={{ .Values.ingress.logLevel | default "info" }}
ports:
- containerPort: 10001
livenessProbe:
httpGet:
path: "/ready"
port: 9901
failureThreshold: 12
initialDelaySeconds: 60
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 3
readinessProbe:
httpGet:
path: "/ready"
port: 9901
failureThreshold: 12
initialDelaySeconds: 1
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 3
resources: {{ toYaml .Values.ingress.resources | nindent 12 }}
{{ with .Values.ingress.lifecycle}}
lifecycle: {{ . | toYaml | nindent 12 }}
{{ end }}
volumeMounts:
{{- if not .Values.ingress.automountServiceAccountToken }}
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: serviceaccount-token
readOnly: true
{{- end }}
- name: control-plane-ca
mountPath: /var/run/secrets/kuma.io/cp-ca
readOnly: true
- name: tmp
mountPath: /tmp
volumes:
{{- if not .Values.ingress.automountServiceAccountToken }}
- name: serviceaccount-token
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3600
path: token
- configMap:
name: kube-root-ca.crt
items:
- key: ca.crt
path: ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
{{- end }}
- name: control-plane-ca
secret:
secretName: {{ include "kuma.controlPlane.tls.general.caSecretName" . }}
items:
- key: ca.crt
path: ca.crt
- name: tmp
emptyDir: {}
{{- end }}

View File

@ -0,0 +1,24 @@
{{- if .Values.ingress.autoscaling.enabled }}
{{ if .Capabilities.APIVersions.Has "autoscaling/v2" }}
apiVersion: "autoscaling/v2"
{{ else }}
apiVersion: "autoscaling/v1"
{{ end }}
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "kuma.name" . }}-ingress
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.ingressLabels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "kuma.name" . }}-ingress
minReplicas: {{ .Values.ingress.autoscaling.minReplicas }}
maxReplicas: {{ .Values.ingress.autoscaling.maxReplicas }}
{{ if .Capabilities.APIVersions.Has "autoscaling/v2" }}
metrics: {{- toYaml .Values.ingress.autoscaling.metrics | nindent 4 }}
{{ else }}
targetCPUUtilizationPercentage: {{ .Values.ingress.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,20 @@
{{ if $.Values.ingress.podDisruptionBudget.enabled }}
{{ if .Capabilities.APIVersions.Has "policy/v1" }}
apiVersion: policy/v1
{{ else if .Capabilities.APIVersions.Has "policy/v1beta1" }}
apiVersion: policy/v1beta1
{{ else }}
{{ fail "pod disruption budgets are not supported by this version of kubernetes" }}
{{ end }}
kind: PodDisruptionBudget
metadata:
name: {{ include "kuma.name" . }}-ingress
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.ingressLabels" . | nindent 4 }}
spec:
maxUnavailable: {{ .Values.ingress.podDisruptionBudget.maxUnavailable }}
selector:
matchLabels:
{{- include "kuma.selectorLabels" . | nindent 6 }}
app: {{ include "kuma.name" . }}-ingress
{{ end }}

View File

@ -0,0 +1,18 @@
{{- if .Values.ingress.enabled }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "kuma.name" . }}-ingress
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.ingressLabels" . | nindent 4 }}
{{- with .Values.ingress.serviceAccountAnnotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.global.imagePullSecrets }}
imagePullSecrets:
{{- range . }}
- name: {{ . | quote }}
{{- end }}
{{- end }}
{{- end }}

View File

@ -0,0 +1,32 @@
{{- if .Values.ingress.enabled }}
{{- if or (eq .Values.controlPlane.mode "global") (eq .Values.controlPlane.mode "standalone") }}
{{ fail "You shouldn't run zoneIngress when running the CP in global or standalone" }}
{{- end }}
{{- end }}
{{- if and .Values.ingress.enabled .Values.ingress.service.enabled }}
apiVersion: v1
kind: Service
metadata:
name: {{ include "kuma.ingress.serviceName" . }}
namespace: {{ .Release.Namespace }}
labels: {{ include "kuma.ingressLabels" . | nindent 4 }}
annotations:
{{- range $key, $value := .Values.ingress.service.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
spec:
type: {{ .Values.ingress.service.type }}
{{- if .Values.ingress.service.loadBalancerIP }}
loadBalancerIP: {{ .Values.ingress.service.loadBalancerIP }}
{{- end }}
ports:
- port: {{ .Values.ingress.service.port }}
protocol: TCP
targetPort: 10001
{{- if and (eq .Values.ingress.service.type "NodePort") .Values.ingress.service.nodePort }}
nodePort: {{ .Values.ingress.service.nodePort }}
{{- end }}
selector:
app: {{ include "kuma.name" . }}-ingress
{{- include "kuma.selectorLabels" . | nindent 4 }}
{{- end }}

View File

@ -0,0 +1,126 @@
{{- if and (.Values.experimental.ebpf.enabled) (and (not .Values.cni.enabled) (not .Values.noHelmHooks) (eq .Values.controlPlane.environment "kubernetes")) }}
{{- $serviceAccountName := printf "%s-cleanup-node-ebpf-job" (include "kuma.name" .) }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "post-delete"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
{{- with .Values.global.imagePullSecrets }}
imagePullSecrets:
{{- range . }}
- name: {{ . | quote }}
{{- end }}
{{- end }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "kuma.name" . }}-cleanup-node-ebpf-job
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "post-delete"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
rules:
- apiGroups: [""]
resources:
- nodes
verbs:
- list
- apiGroups: [""]
resources:
- pods
verbs:
- watch
- delete
- deletecollection
- apiGroups: ["batch"]
resources:
- jobs
verbs:
- watch
- create
- delete
- deletecollection
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "kuma.name" . }}-cleanup-node-ebpf-job
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "post-delete"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "kuma.name" . }}-cleanup-node-ebpf-job
subjects:
- kind: ServiceAccount
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: {{ template "kuma.name" . }}-cleanup-node-ebpf-job
namespace: {{ .Release.Namespace }}
labels:
{{ include "kuma.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": "post-delete"
{{/* Ensure the job is created after the RBAC resources */}}
"helm.sh/hook-weight": "5"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
spec:
template:
metadata:
name: {{ template "kuma.name" . }}-cleanup-node-ebpf-job
labels:
{{ include "kuma.labels" . | nindent 8 }}
spec:
serviceAccountName: {{ $serviceAccountName }}
{{- with .Values.hooks.nodeSelector }}
nodeSelector:
{{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.hooks.tolerations }}
tolerations:
{{ toYaml . | nindent 8 }}
{{- end }}
restartPolicy: OnFailure
{{- if .Values.hooks.ebpfCleanup.podSecurityContext }}
securityContext:
{{ toYaml .Values.hooks.ebpfCleanup.podSecurityContext | trim | nindent 8 }}
{{- end }}
containers:
- name: post-delete-job
image: {{ include "kuma.formatImage" (dict "image" .Values.dataPlane.initImage "root" $) | quote }}
{{- if .Values.hooks.ebpfCleanup.containerSecurityContext }}
securityContext:
{{ toYaml .Values.hooks.ebpfCleanup.containerSecurityContext | trim | nindent 12 }}
{{- end }}
resources:
requests:
cpu: "20m"
memory: "20Mi"
limits:
cpu: "40m"
memory: "40Mi"
command:
- 'kumactl'
- 'uninstall'
- 'ebpf'
- '--cleanup-image-registry'
- {{ .Values.global.image.registry }}
- '--cleanup-image-repository'
- {{ .Values.dataPlane.initImage.repository }}
{{- end }}

View File

@ -0,0 +1,109 @@
{{- if and (eq .Values.controlPlane.environment "kubernetes") (not .Values.noHelmHooks) }}
# HELM first deletes RBAC of Kuma, then it tries to delete Secrets. We've got validating webhook on Secrets.
# But even that the policy of this webhook is Ignore, it fails because Kuma does not have permission to access Secrets anymore.
# Therefore we first need to delete webhook so we can delete the rest of the deployment
{{- $serviceAccountName := printf "%s-pre-delete-job" (include "kuma.name" .) }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "pre-delete"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
{{- with .Values.global.imagePullSecrets }}
imagePullSecrets:
{{- range . }}
- name: {{ . | quote }}
{{- end }}
{{- end }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "kuma.name" . }}-pre-delete-job
annotations:
"helm.sh/hook": "pre-delete"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
rules:
- apiGroups:
- admissionregistration.k8s.io
resources:
- validatingwebhookconfigurations
resourceNames:
- {{ include "kuma.name" . }}-validating-webhook-configuration
verbs:
- delete
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "kuma.name" . }}-pre-delete-job
annotations:
"helm.sh/hook": "pre-delete"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "kuma.name" . }}-pre-delete-job
subjects:
- kind: ServiceAccount
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: {{ template "kuma.name" . }}-delete-webhook
namespace: {{ .Release.Namespace }}
labels:
{{ include "kuma.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": "pre-delete"
{{/* Ensure the job is created after the RBAC resources */}}
"helm.sh/hook-weight": "5"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
spec:
template:
metadata:
name: {{ template "kuma.name" . }}-delete-webhook
labels:
{{ include "kuma.labels" . | nindent 8 }}
spec:
serviceAccountName: {{ $serviceAccountName }}
{{- with .Values.hooks.nodeSelector }}
nodeSelector:
{{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.hooks.tolerations }}
tolerations:
{{ toYaml . | nindent 8 }}
{{- end }}
restartPolicy: OnFailure
securityContext:
{{- toYaml .Values.hooks.podSecurityContext | trim | nindent 8 }}
containers:
- name: pre-delete-job
image: "{{ .Values.kubectl.image.registry }}/{{ .Values.kubectl.image.repository }}:{{ .Values.kubectl.image.tag }}"
command:
- 'kubectl'
- 'delete'
- 'ValidatingWebhookConfiguration'
- '--ignore-not-found'
- {{ include "kuma.name" . }}-validating-webhook-configuration
securityContext:
{{- toYaml (mergeOverwrite (dict "runAsUser" 65534) .Values.hooks.containerSecurityContext) | trim | nindent 12 }}
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "100m"
memory: "256Mi"
{{- end }}

View File

@ -0,0 +1,124 @@
{{- if and ( .Values.noHelmHooks ) (eq .Values.controlPlane.environment "kubernetes") }}
{{- $errorMessage := ".Values.noHelmHooks is set. You must manually create and label the system namespace with kuma.io/system-namespace: \"true\" before installing or upgrading the chart" }}
{{- $systemNamespace := (lookup "v1" "Namespace" "" .Release.Namespace) }}
{{- if not $systemNamespace }}
{{- fail $errorMessage }}
{{- end }}
{{- $systemNamespaceLabels := ($systemNamespace).metadata.labels }}
{{- if ne (get $systemNamespaceLabels "kuma.io/system-namespace") "true" }}
{{- fail $errorMessage }}
{{- end }}
{{- else}}
{{- if .Values.patchSystemNamespace }}
{{- $serviceAccountName := printf "%s-patch-ns-job" (include "kuma.name" .) }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "pre-install"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
{{- with .Values.global.imagePullSecrets }}
imagePullSecrets:
{{- range . }}
- name: {{ . | quote }}
{{- end }}
{{- end }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "kuma.name" . }}-patch-ns-job
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "pre-install"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
rules:
- apiGroups:
- ""
resources:
- namespaces
resourceNames:
- {{ .Release.Namespace }}
verbs:
- get
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "kuma.name" . }}-patch-ns-job
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "pre-install"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "kuma.name" . }}-patch-ns-job
subjects:
- kind: ServiceAccount
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: {{ template "kuma.name" . }}-patch-ns
namespace: {{ .Release.Namespace }}
labels:
{{ include "kuma.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": "pre-install"
{{/* Ensure the job is created after the RBAC resources */}}
"helm.sh/hook-weight": "5"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
spec:
template:
metadata:
name: {{ template "kuma.name" . }}-patch-ns-script
labels:
{{ include "kuma.labels" . | nindent 8 }}
spec:
serviceAccountName: {{ $serviceAccountName }}
{{- with .Values.hooks.nodeSelector }}
nodeSelector:
{{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.hooks.tolerations }}
tolerations:
{{ toYaml . | nindent 8 }}
{{- end }}
restartPolicy: OnFailure
securityContext:
{{- toYaml .Values.hooks.podSecurityContext | trim | nindent 8 }}
containers:
- name: pre-install-job
image: "{{ .Values.kubectl.image.registry }}/{{ .Values.kubectl.image.repository }}:{{ .Values.kubectl.image.tag }}"
securityContext:
{{- toYaml (mergeOverwrite (dict "runAsUser" 65534) .Values.hooks.containerSecurityContext) | trim | nindent 12 }}
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "100m"
memory: "256Mi"
command:
- 'kubectl'
- 'patch'
- 'namespace'
- {{ .Release.Namespace | quote }}
- '--type'
- 'merge'
- '--patch'
- '{ "metadata": { "labels": { "kuma.io/system-namespace": "true" } } }'
{{- end }}
{{- end }}

View File

@ -0,0 +1,171 @@
{{- if (and .Values.installCrdsOnUpgrade.enabled (and (not .Values.noHelmHooks) (eq .Values.controlPlane.environment "kubernetes"))) }}
{{ $hook := "pre-upgrade,pre-install" }}
{{- $serviceAccountName := printf "%s-install-crds" (include "kuma.name" .) }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "{{ $hook }}"
"helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
{{- with concat .Values.installCrdsOnUpgrade.imagePullSecrets .Values.global.imagePullSecrets | uniq }}
imagePullSecrets:
{{- range . }}
- name: {{ . | quote }}
{{- end }}
{{- end }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ include "kuma.name" . }}-install-crds
annotations:
"helm.sh/hook": "{{ $hook }}"
"helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
rules:
- apiGroups:
- "apiextensions.k8s.io"
resources:
- customresourcedefinitions
verbs:
- create
- patch
- update
- list
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ include "kuma.name" . }}-install-crds
annotations:
"helm.sh/hook": "{{ $hook }}"
"helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed"
labels:
{{- include "kuma.labels" . | nindent 4 }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ include "kuma.name" . }}-install-crds
subjects:
- kind: ServiceAccount
name: {{ $serviceAccountName }}
namespace: {{ .Release.Namespace }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "kuma.name" . }}-install-crds-scripts
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": "{{ $hook }}"
"helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
labels:
{{- include "kuma.labels" . | nindent 4 }}
data:
install_crds.sh: |
#!/usr/bin/env sh
set -e
if [ -s /kuma/crds/crds.yaml ]; then
echo "/kuma/crds/crds.yaml found and is not empty, adding crds"
kubectl apply -f /kuma/crds/crds.yaml
else
echo "/kuma/crds/crds.yaml not found or empty, it looks like there is no crds to install"
fi
save_crds.sh: |
set -e
crds="$(kumactl install crds --no-config)"
if [ -n "${crds}" ]; then
echo "found crds - saving to /kuma/crds/crds.yaml"
echo "${crds}" > /kuma/crds/crds.yaml
fi
---
apiVersion: batch/v1
kind: Job
metadata:
name: {{ template "kuma.name" . }}-install-crds
namespace: {{ .Release.Namespace }}
labels:
{{ include "kuma.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": "{{ $hook }}"
"helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded"
spec:
template:
metadata:
name: {{ template "kuma.name" . }}-install-crds-job
labels:
{{ include "kuma.labels" . | nindent 8 }}
spec:
serviceAccountName: {{ $serviceAccountName }}
{{- with .Values.hooks.nodeSelector }}
nodeSelector:
{{ toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.hooks.tolerations }}
tolerations:
{{ toYaml . | nindent 8 }}
{{- end }}
restartPolicy: OnFailure
securityContext:
{{- toYaml .Values.hooks.podSecurityContext | trim | nindent 8 }}
containers:
- name: pre-upgrade-job
image: "{{ .Values.kubectl.image.registry }}/{{ .Values.kubectl.image.repository }}:{{ .Values.kubectl.image.tag }}"
securityContext:
{{- toYaml (mergeOverwrite (dict "runAsUser" 65534) .Values.hooks.containerSecurityContext) | trim | nindent 12 }}
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "100m"
memory: "256Mi"
command: ["/kuma/scripts/install_crds.sh"]
volumeMounts:
- mountPath: /kuma/crds
name: crds
readOnly: true
- mountPath: /kuma/scripts
name: scripts
readOnly: true
initContainers:
- name: pre-upgrade-job-init
image: {{ include "kuma.formatImage" (dict "image" .Values.kumactl.image "root" $) | quote }}
securityContext:
{{- toYaml .Values.hooks.containerSecurityContext | trim | nindent 12 }}
resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "100m"
memory: "256Mi"
volumeMounts:
- mountPath: /kuma/crds
name: crds
- mountPath: /kuma/scripts
name: scripts
readOnly: true
command: ["sh", "-c"]
args: ["/kuma/scripts/save_crds.sh"]
volumes:
- name: scripts
configMap:
name: {{ include "kuma.name" . }}-install-crds-scripts
defaultMode: 0755
- name: crds
emptyDir: {}
{{- end }}

View File

@ -0,0 +1,748 @@
global:
image:
# -- Default registry for all Kuma Images
registry: "docker.io/kumahq"
# -- The default tag for all Kuma images, which itself defaults to .Chart.AppVersion
tag:
# -- Add `imagePullSecrets` to all the service accounts used for Kuma components
imagePullSecrets: []
# -- Whether to patch the target namespace with the system label
patchSystemNamespace: true
installCrdsOnUpgrade:
# -- Whether install new CRDs before upgrade (if any were introduced with the new version of Kuma)
enabled: true
# -- The `imagePullSecrets` to attach to the Service Account running CRD installation.
# This field will be deprecated in a future release, please use .global.imagePullSecrets
imagePullSecrets: []
# -- Whether to disable all helm hooks
noHelmHooks: false
# -- Whether to restart control-plane by calculating a new checksum for the secret
restartOnSecretChange: true
controlPlane:
# -- Environment that control plane is run in, useful when running universal global control plane on k8s
environment: "kubernetes"
# -- Labels to add to resources in addition to default labels
extraLabels: {}
# -- Kuma CP log level: one of off,info,debug
logLevel: "info"
# -- Kuma CP log output path: Defaults to /dev/stdout
logOutputPath: ""
# -- Kuma CP modes: one of zone,global
mode: "zone"
# -- (string) Kuma CP zone, if running multizone
zone:
# -- Only used in `zone` mode
kdsGlobalAddress: ""
# -- Number of replicas of the Kuma CP. Ignored when autoscaling is enabled
replicas: 1
# -- Minimum number of seconds for which a newly created pod should be ready for it to be considered available.
minReadySeconds: 0
# -- Annotations applied only to the `Deployment` resource
deploymentAnnotations: {}
# -- Annotations applied only to the `Pod` resource
podAnnotations: {}
# Horizontal Pod Autoscaling configuration
autoscaling:
# -- Whether to enable Horizontal Pod Autoscaling, which requires the [Metrics Server](https://github.com/kubernetes-sigs/metrics-server) in the cluster
enabled: false
# -- The minimum CP pods to allow
minReplicas: 2
# -- The max CP pods to scale to
maxReplicas: 5
# -- For clusters that don't support autoscaling/v2, autoscaling/v1 is used
targetCPUUtilizationPercentage: 80
# -- For clusters that do support autoscaling/v2, use metrics
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
# -- Node selector for the Kuma Control Plane pods
nodeSelector:
kubernetes.io/os: linux
# -- Tolerations for the Kuma Control Plane pods
tolerations: []
podDisruptionBudget:
# -- Whether to create a pod disruption budget
enabled: false
# -- The maximum number of unavailable pods allowed by the budget
maxUnavailable: 1
# -- Affinity placement rule for the Kuma Control Plane pods.
# This is rendered as a template, so you can reference other helm variables or includes.
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
# These match the selector labels used on the deployment.
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- '{{ include "kuma.name" . }}'
- key: app.kubernetes.io/instance
operator: In
values:
- '{{ .Release.Name }}'
- key: app
operator: In
values:
- '{{ include "kuma.name" . }}-control-plane'
topologyKey: kubernetes.io/hostname
# -- Topology spread constraints rule for the Kuma Control Plane pods.
# This is rendered as a template, so you can use variables to generate match labels.
topologySpreadConstraints:
# -- Failure policy of the mutating webhook implemented by the Kuma Injector component
injectorFailurePolicy: Fail
service:
apiServer:
http:
# -- Port on which Http api server Service is exposed on Node for service of type NodePort
nodePort: 30681
https:
# -- Port on which Https api server Service is exposed on Node for service of type NodePort
nodePort: 30682
# -- Whether to create a service resource.
enabled: true
# -- (string) Optionally override of the Kuma Control Plane Service's name
name:
# -- Service type of the Kuma Control Plane
type: ClusterIP
# -- Annotations to put on the Kuma Control Plane
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "5680"
# Kuma API and GUI ingress settings. Useful if you want to expose the
# API and GUI of Kuma outside the k8s cluster.
ingress:
# -- Install K8s Ingress resource that exposes GUI and API
enabled: false
# -- IngressClass defines which controller will implement the resource
ingressClassName:
# -- Ingress hostname
hostname:
# -- Map of ingress annotations.
annotations: {}
# -- Ingress path.
path: /
# -- Each path in an Ingress is required to have a corresponding path type. (ImplementationSpecific/Exact/Prefix)
pathType: ImplementationSpecific
# -- Port from kuma-cp to use to expose API and GUI. Switch to 5682 to expose TLS port
servicePort: 5681
globalZoneSyncService:
# -- Whether to create a k8s service for the global zone sync
# service. It will only be created when enabled and deploying the global
# control plane.
enabled: true
# -- Service type of the Global-zone sync
type: LoadBalancer
# -- (string) Optionally specify IP to be used by cloud provider when configuring load balancer
loadBalancerIP:
# -- Optionally specify allowed source ranges that can access the load balancer
loadBalancerSourceRanges: []
# -- Additional annotations to put on the Global Zone Sync Service
annotations: { }
# -- Port on which Global Zone Sync Service is exposed on Node for service of type NodePort
nodePort: 30685
# -- Port on which Global Zone Sync Service is exposed
port: 5685
# -- Protocol of the Global Zone Sync service port
protocol: grpc
defaults:
# -- Whether to skip creating the default Mesh
skipMeshCreation: false
# -- Whether to automountServiceAccountToken for cp. Optionally set to false
automountServiceAccountToken: true
# -- Optionally override the resource spec
resources:
requests:
cpu: 500m
memory: 256Mi
limits:
memory: 256Mi
# -- Pod lifecycle settings (useful for adding a preStop hook, when
# using AWS ALB or NLB)
lifecycle: {}
# -- Number of seconds to wait before force killing the pod. Make sure to
# update this if you add a preStop hook.
terminationGracePeriodSeconds: 30
# TLS for various servers
tls:
general:
# -- Secret that contains tls.crt, tls.key [and ca.crt when no
# controlPlane.tls.general.caSecretName specified] for protecting
# Kuma in-cluster communication
secretName: ""
# -- Secret that contains ca.crt that was used to sign cert for protecting
# Kuma in-cluster communication (ca.crt present in this secret
# have precedence over the one provided in the controlPlane.tls.general.secretName)
caSecretName: ""
# -- Base64 encoded CA certificate (the same as in controlPlane.tls.general.secret#ca.crt)
caBundle: ""
apiServer:
# -- Secret that contains tls.crt, tls.key for protecting Kuma API on HTTPS
secretName: ""
# -- Secret that contains list of .pem certificates that can access admin endpoints of Kuma API on HTTPS
clientCertsSecretName: ""
# - if not creating the global control plane, then do nothing
# - if secretName is empty and create is false, then do nothing
# - if secretName is non-empty and create is false, then use the secret made outside of helm with the name secretName
# - if secretName is empty and create is true, then create a secret with a default name and use it
# - if secretName is non-empty and create is true, then create the secret using the provided name
kdsGlobalServer:
# -- Name of the K8s TLS Secret resource. If you set this and don't set
# create=true, you have to create the secret manually.
secretName: ""
# -- Whether to create the TLS secret in helm.
create: false
# -- The TLS certificate to offer.
cert: ""
# -- The TLS key to use.
key: ""
# - if not creating the zonal control plane, then do nothing
# - if secretName is empty and create is false, then do nothing
# - if secretName is non-empty and create is false, then use the secret made outside of helm with the name secretName
# - if secretName is empty and create is true, then create a secret with a default name and use it
# - if secretName is non-empty and create is true, then create the secret using the provided name
kdsZoneClient:
# -- Name of the K8s Secret resource that contains ca.crt which was
# used to sign the certificate of KDS Global Server. If you set this
# and don't set create=true, you have to create the secret manually.
secretName: ""
# -- Whether to create the TLS secret in helm.
create: false
# -- CA bundle that was used to sign the certificate of KDS Global Server.
cert: ""
# -- If true, TLS cert of the server is not verified.
skipVerify: false
# -- Annotations to add for Control Plane's Service Account
serviceAccountAnnotations: { }
image:
# -- Kuma CP ImagePullPolicy
pullPolicy: IfNotPresent
# -- Kuma CP image repository
repository: "kuma-cp"
# -- Kuma CP Image tag. When not specified, the value is copied from global.tag
tag:
# -- (object with { Env: string, Secret: string, Key: string }) Secrets to add as environment variables,
# where `Env` is the name of the env variable,
# `Secret` is the name of the Secret,
# and `Key` is the key of the Secret value to use
secrets:
# someSecret:
# Secret: some-secret
# Key: secret_key
# Env: SOME_SECRET
# -- Additional environment variables that will be passed to the control plane
envVars: { }
# -- Additional config maps to mount into the control plane, with optional inline values
extraConfigMaps: [ ]
# - name: extra-config
# mountPath: /etc/extra-config
# readOnly: true
# values:
# extra-config-key: |
# extra-config-value
# -- (object with { name: string, mountPath: string, readOnly: string }) Additional secrets to mount into the control plane,
# where `Env` is the name of the env variable,
# `Secret` is the name of the Secret,
# and `Key` is the key of the Secret value to use
extraSecrets:
# extraConfig:
# name: extra-config
# mountPath: /etc/extra-config
# readOnly: true
webhooks:
validator:
# -- Additional rules to apply on Kuma validator webhook. Useful when building custom policy on top of Kuma.
additionalRules: ""
ownerReference:
# -- Additional rules to apply on Kuma owner reference webhook. Useful when building custom policy on top of Kuma.
additionalRules: ""
# -- Specifies if the deployment should be started in hostNetwork mode.
hostNetwork: false
# -- Define a new server port for the admission controller. Recommended to set in combination with
# hostNetwork to prevent multiple port bindings on the same port (like Calico in AWS EKS).
admissionServerPort: 5443
# -- Security context at the pod level for control plane.
podSecurityContext:
runAsNonRoot: true
# -- Security context at the container level for control plane.
containerSecurityContext:
readOnlyRootFilesystem: true
# -- If true, then control plane can support TLS secrets for builtin gateway outside of mesh system namespace.
# The downside is that control plane requires permission to read Secrets in all namespaces.
supportGatewaySecretsInAllNamespaces: false
cni:
# -- Install Kuma with CNI instead of proxy init container
enabled: false
# -- Install CNI in chained mode
chained: false
# -- Set the CNI install directory
netDir: /etc/cni/multus/net.d
# -- Set the CNI bin directory
binDir: /var/lib/cni/bin
# -- Set the CNI configuration name
confName: kuma-cni.conf
# -- CNI log level: one of off,info,debug
logLevel: info
# -- Node Selector for the CNI pods
nodeSelector:
kubernetes.io/os: linux
# -- Tolerations for the CNI pods
tolerations: []
# -- Additional pod annotations
podAnnotations: { }
# -- Set the CNI namespace
namespace: kube-system
image:
# -- CNI image repository
repository: "kuma-cni"
# -- CNI image tag - defaults to .Chart.AppVersion
tag:
# -- CNI image pull policy
imagePullPolicy: IfNotPresent
# -- it's only useful in tests to trigger a possible race condition
delayStartupSeconds: 0
# -- use new CNI (experimental)
experimental:
imageEbpf:
# -- CNI experimental eBPF image registry
registry: "docker.io/kumahq"
# -- CNI experimental eBPF image repository
repository: "merbridge"
# -- CNI experimental eBPF image tag
tag: "0.8.5"
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
memory: 100Mi
# -- Security context at the pod level for cni
podSecurityContext: {}
# -- Security context at the container level for cni
containerSecurityContext:
readOnlyRootFilesystem: true
runAsNonRoot: false
runAsUser: 0
runAsGroup: 0
dataPlane:
# -- If true, then turn on CoreDNS query logging
dnsLogging: false
image:
# -- The Kuma DP image repository
repository: "kuma-dp"
# -- Kuma DP ImagePullPolicy
pullPolicy: IfNotPresent
# -- Kuma DP Image Tag. When not specified, the value is copied from global.tag
tag:
initImage:
# -- The Kuma DP init image repository
repository: "kuma-init"
# -- Kuma DP init image tag When not specified, the value is copied from global.tag
tag:
ingress:
# -- If true, it deploys Ingress for cross cluster communication
enabled: false
# -- Labels to add to resources, in addition to default labels
extraLabels: {}
# -- Time for which old listener will still be active as draining
drainTime: 30s
# -- Number of replicas of the Ingress. Ignored when autoscaling is enabled.
replicas: 1
# -- Log level for ingress (available values: off|info|debug)
logLevel: info
# -- Define the resources to allocate to mesh ingress
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 1000m
memory: 512Mi
# -- Pod lifecycle settings (useful for adding a preStop hook, when
# using AWS ALB or NLB)
lifecycle: {}
# -- Number of seconds to wait before force killing the pod. Make sure to
# update this if you add a preStop hook.
terminationGracePeriodSeconds: 40
# Horizontal Pod Autoscaling configuration
autoscaling:
# -- Whether to enable Horizontal Pod Autoscaling, which requires the [Metrics Server](https://github.com/kubernetes-sigs/metrics-server) in the cluster
enabled: false
# -- The minimum CP pods to allow
minReplicas: 2
# -- The max CP pods to scale to
maxReplicas: 5
# -- For clusters that don't support autoscaling/v2, autoscaling/v1 is used
targetCPUUtilizationPercentage: 80
# -- For clusters that do support autoscaling/v2, use metrics
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
service:
# -- Whether to create a Service resource.
enabled: true
# -- Service type of the Ingress
type: LoadBalancer
# -- (string) Optionally specify IP to be used by cloud provider when configuring load balancer
loadBalancerIP:
# -- Additional annotations to put on the Ingress service
annotations: { }
# -- Port on which Ingress is exposed
port: 10001
# -- Port on which service is exposed on Node for service of type NodePort
nodePort:
# -- Additional pod annotations (deprecated favor `podAnnotations`)
annotations: { }
# -- Additional pod annotations
podAnnotations: { }
# -- Node Selector for the Ingress pods
nodeSelector:
kubernetes.io/os: linux
# -- Tolerations for the Ingress pods
tolerations: []
podDisruptionBudget:
# -- Whether to create a pod disruption budget
enabled: false
# -- The maximum number of unavailable pods allowed by the budget
maxUnavailable: 1
# -- Affinity placement rule for the Kuma Ingress pods
# This is rendered as a template, so you can reference other helm variables
# or includes.
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
# These match the selector labels used on the deployment.
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- '{{ include "kuma.name" . }}'
- key: app.kubernetes.io/instance
operator: In
values:
- '{{ .Release.Name }}'
- key: app
operator: In
values:
- kuma-ingress
topologyKey: kubernetes.io/hostname
# -- Topology spread constraints rule for the Kuma Mesh Ingress pods.
# This is rendered as a template, so you can use variables to generate match labels.
topologySpreadConstraints:
# -- Security context at the pod level for ingress
podSecurityContext:
runAsNonRoot: true
runAsUser: 5678
runAsGroup: 5678
# -- Security context at the container level for ingress
containerSecurityContext:
readOnlyRootFilesystem: true
# -- Annotations to add for Control Plane's Service Account
serviceAccountAnnotations: { }
# -- Whether to automountServiceAccountToken for cp. Optionally set to false
automountServiceAccountToken: true
egress:
# -- If true, it deploys Egress for cross cluster communication
enabled: false
# -- Labels to add to resources, in addition to the default labels.
extraLabels: {}
# -- Time for which old listener will still be active as draining
drainTime: 30s
# -- Number of replicas of the Egress. Ignored when autoscaling is enabled.
replicas: 1
# -- Log level for egress (available values: off|info|debug)
logLevel: info
# Horizontal Pod Autoscaling configuration
autoscaling:
# -- Whether to enable Horizontal Pod Autoscaling, which requires the [Metrics Server](https://github.com/kubernetes-sigs/metrics-server) in the cluster
enabled: false
# -- The minimum CP pods to allow
minReplicas: 2
# -- The max CP pods to scale to
maxReplicas: 5
# -- For clusters that don't support autoscaling/v2, autoscaling/v1 is used
targetCPUUtilizationPercentage: 80
# -- For clusters that do support autoscaling/v2, use metrics
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 1000m
memory: 512Mi
service:
# -- Whether to create the service object
enabled: true
# -- Service type of the Egress
type: ClusterIP
# -- (string) Optionally specify IP to be used by cloud provider when configuring load balancer
loadBalancerIP:
# -- Additional annotations to put on the Egress service
annotations: { }
# -- Port on which Egress is exposed
port: 10002
# -- Port on which service is exposed on Node for service of type NodePort
nodePort:
# -- Additional pod annotations (deprecated favor `podAnnotations`)
annotations: { }
# -- Additional pod annotations
podAnnotations: { }
# -- Node Selector for the Egress pods
nodeSelector:
kubernetes.io/os: linux
# -- Tolerations for the Egress pods
tolerations: []
podDisruptionBudget:
# -- Whether to create a pod disruption budget
enabled: false
# -- The maximum number of unavailable pods allowed by the budget
maxUnavailable: 1
# -- Affinity placement rule for the Kuma Egress pods.
# This is rendered as a template, so you can reference other helm variables or includes.
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
# These match the selector labels used on the deployment.
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- '{{ include "kuma.name" . }}'
- key: app.kubernetes.io/instance
operator: In
values:
- '{{ .Release.Name }}'
- key: app
operator: In
values:
- kuma-egress
topologyKey: kubernetes.io/hostname
# -- Topology spread constraints rule for the Kuma Egress pods.
# This is rendered as a template, so you can use variables to generate match labels.
topologySpreadConstraints:
# -- Security context at the pod level for egress
podSecurityContext:
runAsNonRoot: true
runAsUser: 5678
runAsGroup: 5678
# -- Security context at the container level for egress
containerSecurityContext:
readOnlyRootFilesystem: true
# -- Annotations to add for Control Plane's Service Account
serviceAccountAnnotations: { }
# -- Whether to automountServiceAccountToken for cp. Optionally set to false
automountServiceAccountToken: true
kumactl:
image:
# -- The kumactl image repository
repository: kumactl
# -- The kumactl image tag. When not specified, the value is copied from global.tag
tag:
kubectl:
image:
# -- The kubectl image registry
registry: docker.io
# -- The kubectl image repository
repository: bitnami/kubectl
# -- The kubectl image tag
tag: "1.27.5"
hooks:
# -- Node selector for the HELM hooks
nodeSelector:
kubernetes.io/os: linux
# -- Tolerations for the HELM hooks
tolerations: []
# -- Security context at the pod level for crd/webhook/ns
podSecurityContext:
runAsNonRoot: true
# -- Security context at the container level for crd/webhook/ns
containerSecurityContext:
readOnlyRootFilesystem: true
# -- ebpf-cleanup hook needs write access to the root filesystem to clean ebpf programs
# Changing below values will potentially break ebpf cleanup completely,
# so be cautious when doing so.
ebpfCleanup:
# -- Security context at the pod level for crd/webhook/cleanup-ebpf
podSecurityContext:
runAsNonRoot: false
# -- Security context at the container level for crd/webhook/cleanup-ebpf
containerSecurityContext:
readOnlyRootFilesystem: false
experimental:
# Configuration for the experimental ebpf mode for transparent proxy
ebpf:
# -- If true, ebpf will be used instead of using iptables to install/configure transparent proxy
enabled: false
# -- Name of the environmental variable which will contain the IP address of a pod
instanceIPEnvVarName: INSTANCE_IP
# -- Path where BPF file system should be mounted
bpffsPath: /sys/fs/bpf
# -- Host's cgroup2 path
cgroupPath: /sys/fs/cgroup
# -- Name of the network interface which TC programs should be attached to, we'll try to automatically determine it if empty
tcAttachIface: ""
# -- Path where compiled eBPF programs which will be installed can be found
programsSourcePath: /tmp/kuma-ebpf
# -- If false, it uses legacy API for resource synchronization
deltaKds: true
# -- If true, enable native Kubernetes sidecars. This requires at least
# Kubernetes v1.29
sidecarContainers: false
# Postgres' settings for universal control plane on k8s
postgres:
# -- Postgres port, password should be provided as a secret reference in "controlPlane.secrets"
# with the Env value "KUMA_STORE_POSTGRES_PASSWORD".
# Example:
# controlPlane:
# secrets:
# - Secret: postgres-postgresql
# Key: postgresql-password
# Env: KUMA_STORE_POSTGRES_PASSWORD
port: "5432"
# TLS settings
tls:
# -- Mode of TLS connection. Available values are: "disable", "verifyNone", "verifyCa", "verifyFull"
mode: disable # ENV: KUMA_STORE_POSTGRES_TLS_MODE
# -- Whether to disable SNI the postgres `sslsni` option.
disableSSLSNI: false # ENV: KUMA_STORE_POSTGRES_TLS_DISABLE_SSLSNI
# -- Secret name that contains the ca.crt
caSecretName:
# -- Secret name that contains the client tls.crt, tls.key
secretName:
# @ignored for helm-docs
plugins:
resources:
hostnamegenerators: true
meshexternalservices: true
meshservices: true
policies:
meshaccesslogs: true
meshcircuitbreakers: true
meshfaultinjections: true
meshhealthchecks: true
meshhttproutes: true
meshloadbalancingstrategies: true
meshmetrics: true
meshpassthroughs: true
meshproxypatches: true
meshratelimits: true
meshretries: true
meshtcproutes: true
meshtimeouts: true
meshtraces: true
meshtrafficpermissions: true

View File

@ -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
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@ -0,0 +1,27 @@
annotations:
catalog.cattle.io/certified: partner
catalog.cattle.io/display-name: Speedscale Operator
catalog.cattle.io/kube-version: '>= 1.17.0-0'
catalog.cattle.io/release-name: speedscale-operator
apiVersion: v1
appVersion: 2.2.509
description: Stress test your APIs with real world scenarios. Collect and replay
traffic without scripting.
home: https://speedscale.com
icon: file://assets/icons/speedscale-operator.png
keywords:
- speedscale
- test
- testing
- regression
- reliability
- load
- replay
- network
- traffic
kubeVersion: '>= 1.17.0-0'
maintainers:
- email: support@speedscale.com
name: Speedscale Support
name: speedscale-operator
version: 2.2.509

View File

@ -0,0 +1,201 @@
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 2021 Speedscale
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.

View File

@ -0,0 +1,111 @@
![GitHub Tag](https://img.shields.io/github/v/tag/speedscale/operator-helm)
# Speedscale Operator
The [Speedscale](https://www.speedscale.com) Operator is a [Kubernetes operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/)
that watches for deployments to be applied to the cluster and takes action based on annotations. The operator
can inject a proxy to capture traffic into or out of applications, or setup an isolation test environment around
a deployment for testing. The operator itself is a deployment that will be always present on the cluster once
the helm chart is installed.
## Prerequisites
- Kubernetes 1.20+
- Helm 3+
- Appropriate [network and firewall configuration](https://docs.speedscale.com/reference/networking) for Speedscale cloud and webhook traffic
## Get Repo Info
```bash
helm repo add speedscale https://speedscale.github.io/operator-helm/
helm repo update
```
_See [helm repo](https://helm.sh/docs/helm/helm_repo/) for command documentation._
## Install Chart
An API key is required. Sign up for a [free Speedscale trial](https://speedscale.com/free-trial/) if you do not have one.
```bash
helm install speedscale-operator speedscale/speedscale-operator \
-n speedscale \
--create-namespace \
--set apiKey=<YOUR-SPEEDSCALE-API-KEY> \
--set clusterName=<YOUR-CLUSTER-NAME>
```
_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._
### Pre-install job failure
We use pre-install job to check provided API key and provision some of the required resources.
If the job failed during the installation, you'll see the following error during install:
```
Error: INSTALLATION FAILED: failed pre-install: job failed: BackoffLimitExceeded
```
You can inspect the logs using this command:
```bash
kubectl -n speedscale logs job/speedscale-operator-pre-install
```
After fixing the error, uninstall the helm release, delete the failed job
and try installing again:
```bash
helm -n speedscale uninstall speedscale-operator
kubectl -n speedscale delete job speedscale-operator-pre-install
```
## Uninstall Chart
```bash
helm -n speedscale uninstall speedscale-operator
```
This removes all the Kubernetes components associated with the chart and deletes the release.
_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._
CRDs created by this chart are not removed by default and should be manually cleaned up:
```bash
kubectl delete crd trafficreplays.speedscale.com
```
## Upgrading Chart
```bash
helm repo update
helm -n speedscale upgrade speedscale-operator speedscale/speedscale-operator
```
Resources capturing traffic will need to be rolled to pick up the latest
Speedscale sidecar. Use the rollout restart command for each namespace and
resource type:
```bash
kubectl -n <namespace> rollout restart deployment
```
With Helm v3, CRDs created by this chart are not updated by default
and should be manually updated.
Consult also the [Helm Documentation on CRDs](https://helm.sh/docs/chart_best_practices/custom_resource_definitions).
_See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documentation._
### Upgrading an existing Release to a new version
A major chart version change (like v1.2.3 -> v2.0.0) indicates that there is an
incompatible breaking change needing manual actions.
## Help
Speedscale docs information available at [docs.speedscale.com](https://docs.speedscale.com) or join us
on the [Speedscale community Slack](https://join.slack.com/t/speedscalecommunity/shared_invite/zt-x5rcrzn4-XHG1QqcHNXIM~4yozRrz8A)!

View File

@ -0,0 +1,111 @@
![GitHub Tag](https://img.shields.io/github/v/tag/speedscale/operator-helm)
# Speedscale Operator
The [Speedscale](https://www.speedscale.com) Operator is a [Kubernetes operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/)
that watches for deployments to be applied to the cluster and takes action based on annotations. The operator
can inject a proxy to capture traffic into or out of applications, or setup an isolation test environment around
a deployment for testing. The operator itself is a deployment that will be always present on the cluster once
the helm chart is installed.
## Prerequisites
- Kubernetes 1.20+
- Helm 3+
- Appropriate [network and firewall configuration](https://docs.speedscale.com/reference/networking) for Speedscale cloud and webhook traffic
## Get Repo Info
```bash
helm repo add speedscale https://speedscale.github.io/operator-helm/
helm repo update
```
_See [helm repo](https://helm.sh/docs/helm/helm_repo/) for command documentation._
## Install Chart
An API key is required. Sign up for a [free Speedscale trial](https://speedscale.com/free-trial/) if you do not have one.
```bash
helm install speedscale-operator speedscale/speedscale-operator \
-n speedscale \
--create-namespace \
--set apiKey=<YOUR-SPEEDSCALE-API-KEY> \
--set clusterName=<YOUR-CLUSTER-NAME>
```
_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._
### Pre-install job failure
We use pre-install job to check provided API key and provision some of the required resources.
If the job failed during the installation, you'll see the following error during install:
```
Error: INSTALLATION FAILED: failed pre-install: job failed: BackoffLimitExceeded
```
You can inspect the logs using this command:
```bash
kubectl -n speedscale logs job/speedscale-operator-pre-install
```
After fixing the error, uninstall the helm release, delete the failed job
and try installing again:
```bash
helm -n speedscale uninstall speedscale-operator
kubectl -n speedscale delete job speedscale-operator-pre-install
```
## Uninstall Chart
```bash
helm -n speedscale uninstall speedscale-operator
```
This removes all the Kubernetes components associated with the chart and deletes the release.
_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._
CRDs created by this chart are not removed by default and should be manually cleaned up:
```bash
kubectl delete crd trafficreplays.speedscale.com
```
## Upgrading Chart
```bash
helm repo update
helm -n speedscale upgrade speedscale-operator speedscale/speedscale-operator
```
Resources capturing traffic will need to be rolled to pick up the latest
Speedscale sidecar. Use the rollout restart command for each namespace and
resource type:
```bash
kubectl -n <namespace> rollout restart deployment
```
With Helm v3, CRDs created by this chart are not updated by default
and should be manually updated.
Consult also the [Helm Documentation on CRDs](https://helm.sh/docs/chart_best_practices/custom_resource_definitions).
_See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documentation._
### Upgrading an existing Release to a new version
A major chart version change (like v1.2.3 -> v2.0.0) indicates that there is an
incompatible breaking change needing manual actions.
## Help
Speedscale docs information available at [docs.speedscale.com](https://docs.speedscale.com) or join us
on the [Speedscale community Slack](https://join.slack.com/t/speedscalecommunity/shared_invite/zt-x5rcrzn4-XHG1QqcHNXIM~4yozRrz8A)!

View File

@ -0,0 +1,9 @@
questions:
- variable: apiKey
default: "fffffffffffffffffffffffffffffffffffffffffffff"
description: "An API key is required to connect to the Speedscale cloud."
required: true
type: string
label: API Key
group: Authentication

View File

@ -0,0 +1,12 @@
Thank you for installing the Speedscale Operator!
Next you'll need to add the Speedscale Proxy Sidecar to your deployments.
See https://docs.speedscale.com/setup/sidecar/install/
If upgrading use the rollout restart command for each namespace and resource
type to ensure Speedscale sidecars are updated:
kubectl -n <namespace> rollout restart deployment
Once your deployment is running the sidecar your service will show up on
https://app.speedscale.com/.

View File

@ -0,0 +1,209 @@
{{- $cacrt := "" -}}
{{- $crt := "" -}}
{{- $key := "" -}}
{{- $s := (lookup "v1" "Secret" .Release.Namespace "speedscale-webhook-certs") -}}
{{- if $s -}}
{{- $cacrt = index $s.data "ca.crt" | default (index $s.data "tls.crt") | b64dec -}}
{{- $crt = index $s.data "tls.crt" | b64dec -}}
{{- $key = index $s.data "tls.key" | b64dec -}}
{{ else }}
{{- $altNames := list ( printf "speedscale-operator.%s" .Release.Namespace ) ( printf "speedscale-operator.%s.svc" .Release.Namespace ) -}}
{{- $ca := genCA "speedscale-operator" 3650 -}}
{{- $cert := genSignedCert "speedscale-operator" nil $altNames 3650 $ca -}}
{{- $cacrt = $ca.Cert -}}
{{- $crt = $cert.Cert -}}
{{- $key = $cert.Key -}}
{{- end -}}
---
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
creationTimestamp: null
name: speedscale-operator
annotations:
argocd.argoproj.io/hook: PreSync
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 4}}
{{- end }}
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
caBundle: {{ $cacrt | b64enc }}
service:
name: speedscale-operator
namespace: {{ .Release.Namespace }}
path: /mutate
failurePolicy: Ignore
name: sidecar.speedscale.com
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: "NotIn"
values:
- kube-system
- kube-node-lease
{{- if .Values.namespaceSelector }}
- key: kubernetes.io/metadata.name
operator: "In"
values:
{{- range .Values.namespaceSelector }}
- {{ . | quote }}
{{- end }}
{{- end }}
reinvocationPolicy: IfNeeded
rules:
- apiGroups:
- apps
- batch
apiVersions:
- v1
operations:
- CREATE
- UPDATE
- DELETE
resources:
- deployments
- statefulsets
- daemonsets
- jobs
- replicasets
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
- UPDATE
- DELETE
resources:
- pods
- apiGroups:
- argoproj.io
apiVersions:
- "*"
operations:
- CREATE
- UPDATE
- DELETE
resources:
- rollouts
sideEffects: None
timeoutSeconds: 10
---
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
creationTimestamp: null
name: speedscale-operator-replay
annotations:
argocd.argoproj.io/hook: PreSync
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 4}}
{{- end }}
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
caBundle: {{ $cacrt | b64enc }}
service:
name: speedscale-operator
namespace: {{ .Release.Namespace }}
path: /mutate-speedscale-com-v1-trafficreplay
failurePolicy: Fail
name: replay.speedscale.com
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: "NotIn"
values:
- kube-system
- kube-node-lease
{{- if .Values.namespaceSelector }}
- key: kubernetes.io/metadata.name
operator: "In"
values:
{{- range .Values.namespaceSelector }}
- {{ . | quote }}
{{- end }}
{{- end }}
rules:
- apiGroups:
- speedscale.com
apiVersions:
- v1
operations:
- CREATE
- UPDATE
resources:
- trafficreplays
sideEffects: None
timeoutSeconds: 10
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
creationTimestamp: null
name: speedscale-operator-replay
annotations:
argocd.argoproj.io/hook: PreSync
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 4}}
{{- end }}
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
caBundle: {{ $cacrt | b64enc }}
service:
name: speedscale-operator
namespace: {{ .Release.Namespace }}
path: /validate-speedscale-com-v1-trafficreplay
failurePolicy: Fail
name: replay.speedscale.com
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: "NotIn"
values:
- kube-system
- kube-node-lease
{{- if .Values.namespaceSelector }}
- key: kubernetes.io/metadata.name
operator: "In"
values:
{{- range .Values.namespaceSelector }}
- {{ . | quote }}
{{- end }}
{{- end }}
rules:
- apiGroups:
- speedscale.com
apiVersions:
- v1
operations:
- CREATE
- UPDATE
- DELETE
resources:
- trafficreplays
sideEffects: None
timeoutSeconds: 10
---
apiVersion: v1
kind: Secret
metadata:
annotations:
helm.sh/hook: pre-install
helm.sh/hook-delete-policy: before-hook-creation
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 4}}
{{- end }}
creationTimestamp: null
name: speedscale-webhook-certs
namespace: {{ .Release.Namespace }}
type: kubernetes.io/tls
data:
ca.crt: {{ $cacrt | b64enc }}
tls.crt: {{ $crt | b64enc }}
tls.key: {{ $key | b64enc }}

View File

@ -0,0 +1,43 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: speedscale-operator
namespace: {{ .Release.Namespace }}
annotations:
argocd.argoproj.io/hook: PreSync
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 4}}
{{- end }}
data:
CLUSTER_NAME: {{ .Values.clusterName }}
IMAGE_PULL_POLICY: {{ .Values.image.pullPolicy }}
IMAGE_PULL_SECRETS: ""
IMAGE_REGISTRY: {{ .Values.image.registry }}
IMAGE_TAG: {{ .Values.image.tag }}
INSTANCE_ID: '{{- $cm := (lookup "v1" "ConfigMap" .Release.Namespace "speedscale-operator") -}}{{ if $cm }}{{ $cm.data.INSTANCE_ID }}{{ else }}{{ ( printf "%s-%s" .Values.clusterName uuidv4 ) }}{{ end }}'
LOG_LEVEL: {{ .Values.logLevel }}
SPEEDSCALE_DLP_CONFIG: {{ .Values.dlp.config }}
SPEEDSCALE_FILTER_RULE: {{ .Values.filterRule }}
TELEMETRY_INTERVAL: 1s
WITH_DLP: {{ .Values.dlp.enabled | quote }}
WITH_INSPECTOR: {{ .Values.dashboardAccess | quote }}
API_KEY_SECRET_NAME: {{ .Values.apiKeySecret | quote }}
DEPLOY_DEMO: {{ .Values.deployDemo | quote }}
GLOBAL_ANNOTATIONS: {{ .Values.globalAnnotations | toJson | quote }}
GLOBAL_LABELS: {{ .Values.globalLabels | toJson | quote }}
{{- if .Values.http_proxy }}
HTTP_PROXY: {{ .Values.http_proxy }}
{{- end }}
{{- if .Values.https_proxy }}
HTTPS_PROXY: {{ .Values.https_proxy }}
{{- end }}
{{- if .Values.no_proxy }}
NO_PROXY: {{ .Values.no_proxy }}
{{- end }}
PRIVILEGED_SIDECARS: {{ .Values.privilegedSidecars | quote }}
DISABLE_SMARTDNS: {{ .Values.disableSidecarSmartReverseDNS | quote }}
SIDECAR_CONFIG: {{ .Values.sidecar | toJson | quote }}
FORWARDER_CONFIG: {{ .Values.forwarder | toJson | quote }}
TEST_PREP_TIMEOUT: {{ .Values.operator.test_prep_timeout }}
CONTROL_PLANE_TIMEOUT: {{ .Values.operator.control_plane_timeout }}

View File

@ -0,0 +1,525 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
creationTimestamp: null
name: trafficreplays.speedscale.com
spec:
group: speedscale.com
names:
kind: TrafficReplay
listKind: TrafficReplayList
plural: trafficreplays
shortNames:
- replay
singular: trafficreplay
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .status.active
name: Active
type: boolean
- jsonPath: .spec.mode
name: Mode
type: string
- jsonPath: .status.conditions[-1:].message
name: Status
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: date
name: v1
schema:
openAPIV3Schema:
description: TrafficReplay is the Schema for the trafficreplays 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: TrafficReplaySpec defines the desired state of TrafficReplay
properties:
buildTag:
description: |-
BuildTag links a unique tag, build hash, etc. to the generated
traffic replay report. That way you can connect the report results to the
version of the code that was tested.
type: string
cleanup:
description: |-
Cleanup is the name of cleanup mode used for this TrafficReplay. Set to
"none" to leave resources in the state they were during the replay. The
default mode "inventory" will revert the environment to the state it was
before the replay.
enum:
- inventory
- all
- none
type: string
collectLogs:
description: |-
CollectLogs enables or disables log collection from target
workload. Defaults to true.
DEPRECATED: use TestReport.ActualConfig.Cluster.CollectLogs
type: boolean
configChecksum:
description: |-
ConfigChecksum, managed my the operator, is the SHA1 checksum of the
configuration.
type: string
customURL:
description: |-
CustomURL specifies a custom URL to send *ALL* traffic to. Use
Workload.CustomURI to send traffic to a specific URL for only that
workload.
type: string
generatorLowData:
description: |-
GeneratorLowData forces the generator into a high
efficiency/low data output mode. This is ideal for high volume
performance tests. Defaults to false.
DEPRECATED
type: boolean
mode:
description: Mode is the name of replay mode used for this TrafficReplay.
enum:
- full-replay
- responder-only
- generator-only
type: string
needsReport:
description: Indicates whether a responder-only replay needs a report.
type: boolean
proxyMode:
description: |-
ProxyMode defines proxy operational mode used with injected sidecar.
DEPRECATED
type: string
responderLowData:
description: |-
ResponderLowData forces the responder into a high
efficiency/low data output mode. This is ideal for high volume
performance tests. Defaults to false.
DEPRECATED
type: boolean
secretRefs:
description: |-
SecretRefs hold the references to the secrets which contain
various secrets like (e.g. short-lived JWTs to be used by the generator
for authorization with HTTP calls).
items:
description: |-
LocalObjectReference contains enough information to locate the referenced
Kubernetes resource object.
properties:
name:
description: Name of the referent.
type: string
required:
- name
type: object
type: array
sidecar:
description: |-
Sidecar defines sidecar specific configuration.
DEPRECATED: use Workloads
properties:
inject:
description: 'DEPRECATED: do not use'
type: boolean
patch:
description: Patch is .yaml file patch for the Workload
format: byte
type: string
tls:
properties:
in:
description: In provides configuration for sidecar inbound
TLS.
properties:
private:
description: Private is the filename of the TLS inbound
private key.
type: string
public:
description: Public is the filename of the TLS inbound
public key.
type: string
secret:
description: Secret is a secret with the TLS keys to use
for inbound traffic.
type: string
type: object
mutual:
description: Mutual provides configuration for sidecar mutual
TLS.
properties:
private:
description: Private is the filename of the mutual TLS
private key.
type: string
public:
description: Public is the filename of the mutual TLS
public key.
type: string
secret:
description: Secret is a secret with the mutual TLS keys.
type: string
type: object
out:
description: |-
Out enables or disables TLS out on the
sidecar during replay.
type: boolean
type: object
type: object
snapshotID:
description: |-
SnapshotID is the id of the traffic snapshot for this
TrafficReplay.
type: string
testConfigID:
description: |-
TestConfigID is the id of the replay configuration to be used
by the generator and responder for the TrafficReplay.
type: string
timeout:
description: |-
Timeout is the time to wait for replay test to finish. Defaults
to value of the `TIMEOUT` setting of the operator.
type: string
ttlAfterReady:
description: |-
TTLAfterReady provides a TTL (time to live) mechanism to limit
the lifetime of TrafficReplay object that have finished the execution and
reached its final state (either complete or failed).
type: string
workloadRef:
description: |-
WorkloadRef is the reference to the target workload (SUT) for
TrafficReplay. The operations will be performed in the namespace of the
target object.
DEPRECATED: use Workloads
properties:
apiVersion:
description: API version of the referenced object.
type: string
kind:
description: Kind of the referenced object. Defaults to "Deployment".
type: string
name:
description: |-
Name of the referenced object. Required when defining for a test unless a
custom URI is provided. Always required when defining mocks.
type: string
namespace:
description: Namespace of the referenced object. Defaults to the
TrafficReplay namespace.
type: string
required:
- name
type: object
workloads:
description: |-
Workloads define target workloads (SUT) for a TrafficReplay. Many
workloads may be provided, or none. Workloads may be modified and
restarted during replay to configure communication with a responder.
items:
description: |-
Workload represents a Kubernetes workload to be targeted during replay and
associated settings.
properties:
customURI:
description: |-
CustomURI will be target of the traffic instead of directly targeting
workload. This is required if a Ref is not specified.
type: string
inTrafficKey:
description: 'DEPRECATED: use Tests'
type: string
inTrafficKeys:
description: 'DEPRECATED: use Tests'
items:
type: string
type: array
mocks:
description: |-
Mocks are strings used to identify slices of outbound snapshot traffic to
mock for this workload and maps directly to a snapshot's `OutTraffic`
field. Snapshot egress traffic can be split across multiple slices where
each slice contains part of the traffic. A workload may specify multiple
keys and multiple workloads may specify the same key.
Only the traffic slices defined here will be mocked. A workload with no
keys defined will not mock any traffic. Pass '*' to mock all traffic.
Mock strings may only match part of the snapshot's `OutTraffic` key if the
string matches exactly one key. For example, the test string
`foo.example.com` would match the `OutTraffic` key of
my-service:foo.example.com:8080, as long as no other keys would match
`foo.example.com`. Multiple mocks must be specified for multiple keys
unless using '*'.
items:
type: string
type: array
outTrafficKeys:
description: 'DEPRECATED: use Mocks'
items:
type: string
type: array
ref:
description: |-
Ref is a reference to a cluster workload, like a deployment or a
statefulset. This is required unless a CustomURI is specified.
properties:
apiVersion:
description: API version of the referenced object.
type: string
kind:
description: Kind of the referenced object. Defaults to
"Deployment".
type: string
name:
description: |-
Name of the referenced object. Required when defining for a test unless a
custom URI is provided. Always required when defining mocks.
type: string
namespace:
description: Namespace of the referenced object. Defaults
to the TrafficReplay namespace.
type: string
required:
- name
type: object
routing:
description: Routing configures how workloads route egress traffic
to responders
enum:
- hostalias
- nat
type: string
sidecar:
description: |-
TODO: this is not implemented, come back and replace deprecated Sidecar with workload specific settings
Sidecar defines sidecar specific configuration.
properties:
inject:
description: 'DEPRECATED: do not use'
type: boolean
patch:
description: Patch is .yaml file patch for the Workload
format: byte
type: string
tls:
properties:
in:
description: In provides configuration for sidecar inbound
TLS.
properties:
private:
description: Private is the filename of the TLS
inbound private key.
type: string
public:
description: Public is the filename of the TLS inbound
public key.
type: string
secret:
description: Secret is a secret with the TLS keys
to use for inbound traffic.
type: string
type: object
mutual:
description: Mutual provides configuration for sidecar
mutual TLS.
properties:
private:
description: Private is the filename of the mutual
TLS private key.
type: string
public:
description: Public is the filename of the mutual
TLS public key.
type: string
secret:
description: Secret is a secret with the mutual
TLS keys.
type: string
type: object
out:
description: |-
Out enables or disables TLS out on the
sidecar during replay.
type: boolean
type: object
type: object
tests:
description: |-
Tests are strings used to identify slices of inbound snapshot traffic this
workload is targeting and maps directly to a snapshot's `InTraffic` field.
Snapshot ingress traffic can be split across multiple slices where each
slice contains part of the traffic. A key must only be specified once
across all workloads, but a workload may specify multiple keys. Pass '*'
to match all keys.
Test strings may only match part of the snapshot's `InTraffic` key if the
string matches exactly one key. For example, the test string
`foo.example.com` would match the `InTraffic` key of
my-service:foo.example.com:8080, as long as no other keys would match
`foo.example.com`
This field is optional in the spec to provide support for single-workload
and legacy replays, but must be specified for multi-workload replays in
order to provide deterministic replay configuration.
items:
type: string
type: array
type: object
type: array
required:
- snapshotID
- testConfigID
type: object
status:
default:
observedGeneration: -1
description: TrafficReplayStatus defines the observed state of TrafficReplay
properties:
active:
description: Active indicates whether this traffic replay is currently
underway or not.
type: boolean
conditions:
items:
description: "Condition contains details for one aspect of the current
state of this API Resource.\n---\nThis struct is intended for
direct use as an array at the field path .status.conditions. For
example,\n\n\n\ttype FooStatus struct{\n\t // Represents the
observations of a foo's current state.\n\t // Known .status.conditions.type
are: \"Available\", \"Progressing\", and \"Degraded\"\n\t //
+patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t
\ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\"
patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t
\ // other fields\n\t}"
properties:
lastTransitionTime:
description: |-
lastTransitionTime is the last time the condition transitioned from one status to another.
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
format: date-time
type: string
message:
description: |-
message is a human readable message indicating details about the transition.
This may be an empty string.
maxLength: 32768
type: string
observedGeneration:
description: |-
observedGeneration represents the .metadata.generation that the condition was set based upon.
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
with respect to the current state of the instance.
format: int64
minimum: 0
type: integer
reason:
description: |-
reason contains a programmatic identifier indicating the reason for the condition's last transition.
Producers of specific condition types may define expected values and meanings for this field,
and whether the values are considered a guaranteed API.
The value should be a CamelCase string.
This field may not be empty.
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
description: status of the condition, one of True, False, Unknown.
enum:
- "True"
- "False"
- Unknown
type: string
type:
description: |-
type of condition in CamelCase or in foo.example.com/CamelCase.
---
Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be
useful (see .node.status.conditions), the ability to deconflict is important.
The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- lastTransitionTime
- message
- reason
- status
- type
type: object
type: array
finishedTime:
description: Information when the traffic replay has finished.
format: date-time
type: string
initializedTime:
description: Information when the test environment was successfully
prepared.
format: date-time
type: string
lastHeartbeatTime:
description: 'DEPRECATED: will not be set'
format: date-time
type: string
observedGeneration:
description: ObservedGeneration is the last observed generation.
format: int64
type: integer
reconcileFailures:
description: |-
ReconcileFailures is the number of times the traffic replay controller
experienced an error during the reconciliation process. The traffic
replay will be deleted if too many errors occur.
format: int64
type: integer
reportID:
description: The id of the traffic replay report created.
type: string
reportURL:
description: The url to the traffic replay report.
type: string
startedTime:
description: Information when the traffic replay has started.
format: date-time
type: string
type: object
type: object
served: true
storage: true
subresources:
status: {}
status:
acceptedNames:
kind: ""
plural: ""
conditions: null
storedVersions: null

View File

@ -0,0 +1,132 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
operator.speedscale.com/ignore: "true"
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 4}}
{{- end }}
labels:
app: speedscale-operator
controlplane.speedscale.com/component: operator
{{- if .Values.globalLabels }}
{{ toYaml .Values.globalLabels | indent 4}}
{{- end }}
name: speedscale-operator
namespace: {{ .Release.Namespace }}
spec:
replicas: 1
selector:
matchLabels:
app: speedscale-operator
controlplane.speedscale.com/component: operator
strategy:
type: Recreate
template:
metadata:
annotations:
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 8}}
{{- end }}
labels:
app: speedscale-operator
controlplane.speedscale.com/component: operator
{{- if .Values.globalLabels }}
{{ toYaml .Values.globalLabels | indent 8}}
{{- end }}
spec:
containers:
- command:
- /operator
env:
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
envFrom:
- configMapRef:
name: speedscale-operator
# https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core
# When a key exists in multiple sources, the value associated with the last source will take precedence.
# Values defined by an Env with a duplicate key will take precedence.
- configMapRef:
name: speedscale-operator-override
optional: true
- secretRef:
name: '{{ ne .Values.apiKeySecret "" | ternary .Values.apiKeySecret "speedscale-apikey" }}'
optional: false
image: '{{ .Values.image.registry }}/operator:{{ .Values.image.tag }}'
imagePullPolicy: {{ .Values.image.pullPolicy }}
livenessProbe:
failureThreshold: 5
httpGet:
path: /healthz
port: health-check
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 5
name: operator
ports:
- containerPort: 443
name: webhook-server
- containerPort: 8081
name: health-check
readinessProbe:
failureThreshold: 10
httpGet:
path: /readyz
port: health-check
scheme: HTTP
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 5
resources: {{- toYaml .Values.operator.resources | nindent 10 }}
securityContext:
allowPrivilegeEscalation: false
privileged: false
readOnlyRootFilesystem: true
runAsNonRoot: false
# Run as root to bind 443 https://github.com/kubernetes/kubernetes/issues/56374
runAsUser: 0
volumeMounts:
- mountPath: /tmp
name: tmp
- mountPath: /tmp/k8s-webhook-server/serving-certs
name: webhook-certs
readOnly: true
- mountPath: /etc/ssl/speedscale
name: speedscale-tls-out
readOnly: true
hostNetwork: {{ .Values.hostNetwork }}
securityContext:
runAsNonRoot: true
serviceAccountName: speedscale-operator
terminationGracePeriodSeconds: 10
volumes:
- emptyDir: {}
name: tmp
- name: webhook-certs
secret:
secretName: speedscale-webhook-certs
- name: speedscale-tls-out
secret:
secretName: speedscale-certs
{{- if .Values.affinity }}
affinity: {{ toYaml .Values.affinity | nindent 8 }}
{{- end }}
{{- if .Values.tolerations }}
tolerations: {{ toYaml .Values.tolerations | nindent 8 }}
{{- end }}
{{- if .Values.nodeSelector }}
nodeSelector: {{ toYaml .Values.nodeSelector | nindent 8 }}
{{- end }}

View File

@ -0,0 +1,73 @@
---
apiVersion: batch/v1
kind: Job
metadata:
annotations:
helm.sh/hook: pre-install
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
helm.sh/hook-weight: "4"
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 4}}
{{- end }}
creationTimestamp: null
name: speedscale-operator-pre-install
namespace: {{ .Release.Namespace }}
labels:
{{- if .Values.globalLabels }}
{{ toYaml .Values.globalLabels | indent 4}}
{{- end }}
spec:
backoffLimit: 0
ttlSecondsAfterFinished: 30
template:
metadata:
annotations:
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 8}}
{{- end }}
creationTimestamp: null
labels:
{{- if .Values.globalLabels }}
{{ toYaml .Values.globalLabels | indent 8}}
{{- end }}
spec:
containers:
- args:
- |-
# ensure valid settings before the chart reports a successfull install
{{- if .Values.http_proxy }}
HTTP_PROXY={{ .Values.http_proxy | quote }} \
{{- end }}
{{- if .Values.https_proxy }}
HTTPS_PROXY={{ .Values.https_proxy | quote }} \
{{- end }}
{{- if .Values.no_proxy }}
NO_PROXY={{ .Values.no_proxy | quote }} \
{{- end }}
speedctl init --overwrite --no-rcfile-update \
--api-key $SPEEDSCALE_API_KEY \
--app-url $SPEEDSCALE_APP_URL
# in case we're in istio
curl -X POST http://127.0.0.1:15000/quitquitquit || true
command:
- sh
- -c
envFrom:
- secretRef:
name: '{{ ne .Values.apiKeySecret "" | ternary .Values.apiKeySecret "speedscale-apikey" }}'
optional: false
image: '{{ .Values.image.registry }}/speedscale-cli:{{ .Values.image.tag }}'
imagePullPolicy: {{ .Values.image.pullPolicy }}
name: speedscale-cli
resources: {}
restartPolicy: Never
{{- if .Values.affinity }}
affinity: {{ toYaml .Values.affinity | nindent 8 }}
{{- end }}
{{- if .Values.tolerations }}
tolerations: {{ toYaml .Values.tolerations | nindent 8 }}
{{- end }}
{{- if .Values.nodeSelector }}
nodeSelector: {{ toYaml .Values.nodeSelector | nindent 8 }}
{{- end }}

View File

@ -0,0 +1,244 @@
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: speedscale-operator
{{- if .Values.globalAnnotations }}
annotations: {{ toYaml .Values.globalAnnotations | nindent 4 }}
{{- end }}
rules:
- apiGroups:
- apps
resources:
- deployments
- statefulsets
- daemonsets
verbs:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- apps
resources:
- replicasets
verbs:
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- batch
resources:
- jobs
verbs:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- get
- list
- apiGroups:
- admissionregistration.k8s.io
resources:
- mutatingwebhookconfigurations
- validatingwebhookconfigurations
verbs:
- get
- list
- apiGroups:
- rbac.authorization.k8s.io
resources:
- clusterrolebindings
- clusterroles
verbs:
- get
- list
- apiGroups:
- ""
resources:
- namespaces
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- configmaps
- secrets
- pods
- services
- serviceaccounts
verbs:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- ""
resources:
- pods/log
verbs:
- get
- list
- apiGroups:
- ""
resources:
- events
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- list
- watch
- apiGroups:
- metrics.k8s.io
resources:
- pods
verbs:
- get
- list
- watch
- apiGroups:
- rbac.authorization.k8s.io
resources:
- rolebindings
- roles
verbs:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- networking.istio.io
resources:
- envoyfilters
- sidecars
verbs:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- security.istio.io
resources:
- peerauthentications
verbs:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- speedscale.com
resources:
- trafficreplays
verbs:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
- apiGroups:
- speedscale.com
resources:
- trafficreplays/status
verbs:
- get
- update
- patch
- apiGroups:
- argoproj.io
resources:
- rollouts
verbs:
- get
- list
- patch
- update
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: speedscale-operator
{{- if .Values.globalAnnotations }}
annotations: {{ toYaml .Values.globalAnnotations | nindent 4 }}
{{- end }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: speedscale-operator
subjects:
- kind: ServiceAccount
name: speedscale-operator
namespace: {{ .Release.Namespace }}
---
apiVersion: v1
automountServiceAccountToken: true
kind: ServiceAccount
metadata:
creationTimestamp: null
labels:
app: speedscale-operator
controlplane.speedscale.com/component: operator
name: speedscale-operator
namespace: {{ .Release.Namespace }}
{{- if .Values.globalAnnotations }}
annotations: {{ toYaml .Values.globalAnnotations | nindent 4 }}
{{- end }}

View File

@ -0,0 +1,18 @@
---
{{ if .Values.apiKey }}
apiVersion: v1
kind: Secret
metadata:
name: speedscale-apikey
namespace: {{ .Release.Namespace }}
annotations:
helm.sh/hook: pre-install
helm.sh/hook-weight: "3"
{{- if .Values.globalAnnotations }}
{{ toYaml .Values.globalAnnotations | indent 4}}
{{- end }}
type: Opaque
data:
SPEEDSCALE_API_KEY: {{ .Values.apiKey | b64enc }}
SPEEDSCALE_APP_URL: {{ .Values.appUrl | b64enc }}
{{ end }}

View File

@ -0,0 +1,22 @@
---
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: speedscale-operator
controlplane.speedscale.com/component: operator
name: speedscale-operator
namespace: {{ .Release.Namespace }}
{{- if .Values.globalAnnotations }}
annotations: {{ toYaml .Values.globalAnnotations | nindent 4 }}
{{- end }}
spec:
ports:
- port: 443
protocol: TCP
selector:
app: speedscale-operator
controlplane.speedscale.com/component: operator
status:
loadBalancer: {}

Some files were not shown because too many files have changed in this diff Show More